{
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicAnalyzer.html",
    "title": "Class ArabicAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicAnalyzer Analyzer for Arabic. This analyzer implements light-stemming as specified by: Light Stemming for Arabic Information Retrieval http://www.mtholyoke.edu/~lballest/Pubs/arab_stem05.pdf The analysis package contains three primary components: ArabicNormalizationFilter : Arabic orthographic normalization. ArabicStemFilter : Arabic light stemming Arabic stop words file: a set of default Arabic stop words. Inheritance System.Object Analyzer StopwordAnalyzerBase ArabicAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ArabicAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ArabicAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source ArabicAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public ArabicAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ArabicAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop word. If a none-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before ArabicStemFilter . Declaration public ArabicAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Arabic stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from an StandardTokenizer filtered with LowerCaseFilter , StopFilter , ArabicNormalizationFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and ArabicStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html",
    "title": "Class ArabicLetterTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicLetterTokenizer Tokenizer that breaks text into runs of letters and diacritics. The problem with the standard Letter tokenizer is that it fails on diacritics. Handling similar to this is necessary for Indic Scripts, Hebrew, Thaana, etc. You must specify the required LuceneVersion compatibility when creating ArabicLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizer instead.\")] public class ArabicLetterTokenizer : LetterTokenizer, IDisposable Constructors | Improve this Doc View Source ArabicLetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new ArabicLetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public ArabicLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See LuceneVersion . AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source ArabicLetterTokenizer(LuceneVersion, TextReader) Construct a new ArabicLetterTokenizer. Declaration public ArabicLetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Allows for Letter category or NonspacingMark category Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides LetterTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html",
    "title": "Class ArabicLetterTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicLetterTokenizerFactory Factory for ArabicLetterTokenizer Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ArabicLetterTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizerFactory instead.\")] public class ArabicLetterTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ArabicLetterTokenizerFactory(IDictionary<String, String>) Creates a new ArabicNormalizationFilterFactory Declaration public ArabicLetterTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html",
    "title": "Class ArabicNormalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicNormalizationFilter A TokenFilter that applies ArabicNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter ArabicNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ArabicNormalizationFilter(TokenStream) Declaration public ArabicNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html",
    "title": "Class ArabicNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicNormalizationFilterFactory Factory for ArabicNormalizationFilter . <fieldType name=\"text_arnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ArabicNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source ArabicNormalizationFilterFactory(IDictionary<String, String>) Creates a new ArabicNormalizationFilterFactory Declaration public ArabicNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizer.html",
    "title": "Class ArabicNormalizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicNormalizer Normalizer for Arabic. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of hamza with alef seat to a bare alef. Normalization of teh marbuta to heh Normalization of dotless yeh (alef maksura) to yeh. Removal of Arabic diacritics (the harakat) Removal of tatweel (stretching character). Inheritance System.Object ArabicNormalizer 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.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicNormalizer Fields | Improve this Doc View Source ALEF Declaration public const char ALEF = 'ا' Field Value Type Description System.Char | Improve this Doc View Source ALEF_HAMZA_ABOVE Declaration public const char ALEF_HAMZA_ABOVE = 'أ' Field Value Type Description System.Char | Improve this Doc View Source ALEF_HAMZA_BELOW Declaration public const char ALEF_HAMZA_BELOW = 'إ' Field Value Type Description System.Char | Improve this Doc View Source ALEF_MADDA Declaration public const char ALEF_MADDA = 'آ' Field Value Type Description System.Char | Improve this Doc View Source DAMMA Declaration public const char DAMMA = 'ُ' Field Value Type Description System.Char | Improve this Doc View Source DAMMATAN Declaration public const char DAMMATAN = 'ٌ' Field Value Type Description System.Char | Improve this Doc View Source DOTLESS_YEH Declaration public const char DOTLESS_YEH = 'ى' Field Value Type Description System.Char | Improve this Doc View Source FATHA Declaration public const char FATHA = 'َ' Field Value Type Description System.Char | Improve this Doc View Source FATHATAN Declaration public const char FATHATAN = 'ً' Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = 'ه' Field Value Type Description System.Char | Improve this Doc View Source KASRA Declaration public const char KASRA = 'ِ' Field Value Type Description System.Char | Improve this Doc View Source KASRATAN Declaration public const char KASRATAN = 'ٍ' Field Value Type Description System.Char | Improve this Doc View Source SHADDA Declaration public const char SHADDA = 'ّ' Field Value Type Description System.Char | Improve this Doc View Source SUKUN Declaration public const char SUKUN = 'ْ' Field Value Type Description System.Char | Improve this Doc View Source TATWEEL Declaration public const char TATWEEL = 'ـ' Field Value Type Description System.Char | Improve this Doc View Source TEH_MARBUTA Declaration public const char TEH_MARBUTA = 'ة' Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = 'ي' Field Value Type Description System.Char Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Arabic text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilter.html",
    "title": "Class ArabicStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicStemFilter A TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter ArabicStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ArabicStemFilter(TokenStream) Declaration public ArabicStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html",
    "title": "Class ArabicStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicStemFilterFactory Factory for ArabicStemFilter . <fieldType name=\"text_arstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> <filter class=\"solr.ArabicStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ArabicStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ArabicStemFilterFactory(IDictionary<String, String>) Creates a new ArabicStemFilterFactory Declaration public ArabicStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemmer.html",
    "title": "Class ArabicStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArabicStemmer Stemmer for Arabic. Stemming is done in-place for efficiency, operating on a termbuffer. Stemming is defined as: Removal of attached definite article, conjunction, and prepositions. Stemming of common suffixes. Inheritance System.Object ArabicStemmer 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.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicStemmer Fields | Improve this Doc View Source ALEF Declaration public const char ALEF = 'ا' Field Value Type Description System.Char | Improve this Doc View Source BEH Declaration public const char BEH = 'ب' Field Value Type Description System.Char | Improve this Doc View Source FEH Declaration public const char FEH = 'ف' Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = 'ه' Field Value Type Description System.Char | Improve this Doc View Source KAF Declaration public const char KAF = 'ك' Field Value Type Description System.Char | Improve this Doc View Source LAM Declaration public const char LAM = 'ل' Field Value Type Description System.Char | Improve this Doc View Source NOON Declaration public const char NOON = 'ن' Field Value Type Description System.Char | Improve this Doc View Source TEH Declaration public const char TEH = 'ت' Field Value Type Description System.Char | Improve this Doc View Source TEH_MARBUTA Declaration public const char TEH_MARBUTA = 'ة' Field Value Type Description System.Char | Improve this Doc View Source WAW Declaration public const char WAW = 'و' Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = 'ي' Field Value Type Description System.Char Properties | Improve this Doc View Source Prefixes Declaration public static IList<char[]> Prefixes { get; } Property Value Type Description System.Collections.Generic.IList < System.Char []> | Improve this Doc View Source Suffixes Declaration public static IList<char[]> Suffixes { get; } Property Value Type Description System.Collections.Generic.IList < System.Char []> Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Arabic text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization | Improve this Doc View Source StemPrefix(Char[], Int32) Stem a prefix off an Arabic word. Declaration public virtual int StemPrefix(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 new length of input buffer after stemming. | Improve this Doc View Source StemSuffix(Char[], Int32) Stem suffix(es) off an Arabic word. Declaration public virtual int StemSuffix(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 new length of input buffer after stemming"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.html",
    "title": "Namespace Lucene.Net.Analysis.Ar | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ar <!-- 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. --> Analyzer for Arabic. Classes ArabicAnalyzer Analyzer for Arabic. This analyzer implements light-stemming as specified by: Light Stemming for Arabic Information Retrieval http://www.mtholyoke.edu/~lballest/Pubs/arab_stem05.pdf The analysis package contains three primary components: ArabicNormalizationFilter : Arabic orthographic normalization. ArabicStemFilter : Arabic light stemming Arabic stop words file: a set of default Arabic stop words. ArabicLetterTokenizer Tokenizer that breaks text into runs of letters and diacritics. The problem with the standard Letter tokenizer is that it fails on diacritics. Handling similar to this is necessary for Indic Scripts, Hebrew, Thaana, etc. You must specify the required LuceneVersion compatibility when creating ArabicLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. ArabicLetterTokenizerFactory Factory for ArabicLetterTokenizer ArabicNormalizationFilter A TokenFilter that applies ArabicNormalizer to normalize the orthography. ArabicNormalizationFilterFactory Factory for ArabicNormalizationFilter . <fieldType name=\"text_arnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> </analyzer> </fieldType> ArabicNormalizer Normalizer for Arabic. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of hamza with alef seat to a bare alef. Normalization of teh marbuta to heh Normalization of dotless yeh (alef maksura) to yeh. Removal of Arabic diacritics (the harakat) Removal of tatweel (stretching character). ArabicStemFilter A TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . ArabicStemFilterFactory Factory for ArabicStemFilter . <fieldType name=\"text_arstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> <filter class=\"solr.ArabicStemFilterFactory\"/> </analyzer> </fieldType> ArabicStemmer Stemmer for Arabic. Stemming is done in-place for efficiency, operating on a termbuffer. Stemming is defined as: Removal of attached definite article, conjunction, and prepositions. Stemming of common suffixes."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html",
    "title": "Class BulgarianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BulgarianAnalyzer Analyzer for Bulgarian. This analyzer implements light-stemming as specified by: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf Inheritance System.Object Analyzer StopwordAnalyzerBase BulgarianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BulgarianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public BulgarianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public BulgarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and a stem exclusion set. If a stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before BulgarianStemFilter . Declaration public BulgarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionSet Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Bulgarian stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and BulgarianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilter.html",
    "title": "Class BulgarianStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BulgarianStemFilter A TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter BulgarianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BulgarianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BulgarianStemFilter(TokenStream) Declaration public BulgarianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html",
    "title": "Class BulgarianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BulgarianStemFilterFactory Factory for BulgarianStemFilter . <fieldType name=\"text_bgstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BulgarianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory BulgarianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BulgarianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BulgarianStemFilterFactory(IDictionary<String, String>) Creates a new BulgarianStemFilterFactory Declaration public BulgarianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemmer.html",
    "title": "Class BulgarianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BulgarianStemmer Light Stemmer for Bulgarian. Implements the algorithm described in: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf Inheritance System.Object BulgarianStemmer 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.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BulgarianStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Bulgarian text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.html",
    "title": "Namespace Lucene.Net.Analysis.Bg | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Bg <!-- 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. --> Analyzer for Bulgarian. Classes BulgarianAnalyzer Analyzer for Bulgarian. This analyzer implements light-stemming as specified by: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf BulgarianStemFilter A TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . BulgarianStemFilterFactory Factory for BulgarianStemFilter . <fieldType name=\"text_bgstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BulgarianStemFilterFactory\"/> </analyzer> </fieldType> BulgarianStemmer Light Stemmer for Bulgarian. Implements the algorithm described in: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianAnalyzer.html",
    "title": "Class BrazilianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BrazilianAnalyzer Analyzer for Brazilian Portuguese language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (words that will not be stemmed, but indexed). NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase BrazilianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BrazilianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public BrazilianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public BrazilianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and stemming exclusion words Declaration public BrazilianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Brazilian Portuguese stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , StandardFilter , StopFilter , and BrazilianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilter.html",
    "title": "Class BrazilianStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BrazilianStemFilter A TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter BrazilianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BrazilianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BrazilianStemFilter(TokenStream) Creates a new BrazilianStemFilter Declaration public BrazilianStemFilter(TokenStream in) Parameters Type Name Description TokenStream in the source TokenStream Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html",
    "title": "Class BrazilianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BrazilianStemFilterFactory Factory for BrazilianStemFilter . <fieldType name=\"text_brstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BrazilianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory BrazilianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BrazilianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BrazilianStemFilterFactory(IDictionary<String, String>) Creates a new BrazilianStemFilterFactory Declaration public BrazilianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemmer.html",
    "title": "Class BrazilianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BrazilianStemmer A stemmer for Brazilian Portuguese words. Inheritance System.Object BrazilianStemmer 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.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BrazilianStemmer Constructors | Improve this Doc View Source BrazilianStemmer() Declaration public BrazilianStemmer() Methods | Improve this Doc View Source Log() For log and debug purpose Declaration public virtual string Log() Returns Type Description System.String TERM, CT, RV, R1 and R2 | Improve this Doc View Source Stem(String) Stems the given term to an unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.html",
    "title": "Namespace Lucene.Net.Analysis.Br | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Br <!-- 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. --> Analyzer for Brazilian Portuguese. Classes BrazilianAnalyzer Analyzer for Brazilian Portuguese language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (words that will not be stemmed, but indexed). NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . BrazilianStemFilter A TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . BrazilianStemFilterFactory Factory for BrazilianStemFilter . <fieldType name=\"text_brstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BrazilianStemFilterFactory\"/> </analyzer> </fieldType> BrazilianStemmer A stemmer for Brazilian Portuguese words."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.CatalanAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.CatalanAnalyzer.html",
    "title": "Class CatalanAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CatalanAnalyzer Analyzer for Catalan. You must specify the required LuceneVersion compatibility when creating CatalanAnalyzer: Inheritance System.Object Analyzer StopwordAnalyzerBase CatalanAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Ca Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CatalanAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source CatalanAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public CatalanAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source CatalanAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public CatalanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source CatalanAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public CatalanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Catalan stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.html",
    "title": "Namespace Lucene.Net.Analysis.Ca | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ca <!-- 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. --> Analyzer for Catalan. Classes CatalanAnalyzer Analyzer for Catalan. You must specify the required LuceneVersion compatibility when creating CatalanAnalyzer:"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.BaseCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.BaseCharFilter.html",
    "title": "Class BaseCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseCharFilter Base utility class for implementing a CharFilter . You subclass this, and then record mappings by calling AddOffCorrectMap(Int32, Int32) , and then invoke the correct method to correct an offset. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter BaseCharFilter HTMLStripCharFilter MappingCharFilter PatternReplaceCharFilter BufferedCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Read(Char[], Int32, Int32) CharFilter.Read() CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class BaseCharFilter : CharFilter, IDisposable Constructors | Improve this Doc View Source BaseCharFilter(TextReader) Declaration public BaseCharFilter(TextReader in) Parameters Type Name Description System.IO.TextReader in Properties | Improve this Doc View Source LastCumulativeDiff Declaration protected virtual int LastCumulativeDiff { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddOffCorrectMap(Int32, Int32) Adds an offset correction mapping at the given output stream offset. Assumption: the offset given with each successive call to this method will not be smaller than the offset given at the previous invocation. Declaration protected virtual void AddOffCorrectMap(int off, int cumulativeDiff) Parameters Type Name Description System.Int32 off The output stream offset at which to apply the correction System.Int32 cumulativeDiff The input offset is given by adding this to the output offset | Improve this Doc View Source Correct(Int32) Retrieve the corrected offset. Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.html",
    "title": "Namespace Lucene.Net.Analysis.CharFilters | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.CharFilters <!-- 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. --> Normalization of text before the tokenizer. CharFilters are chainable filters that normalize text before tokenization and provide mappings between normalized text offsets and the corresponding offset in the original text. CharFilter offset mappings CharFilters modify an input stream via a series of substring replacements (including deletions and insertions) to produce an output stream. There are three possible replacement cases: the replacement string has the same length as the original substring; the replacement is shorter; and the replacement is longer. In the latter two cases (when the replacement has a different length than the original), one or more offset correction mappings are required. When the replacement is shorter than the original (e.g. when the replacement is the empty string), a single offset correction mapping should be added at the replacement's end offset in the output stream. The cumulativeDiff parameter to the addOffCorrectMapping() method will be the sum of all previous replacement offset adjustments, with the addition of the difference between the lengths of the original substring and the replacement string (a positive value). When the replacement is longer than the original (e.g. when the original is the empty string), you should add as many offset correction mappings as the difference between the lengths of the replacement string and the original substring, starting at the end offset the original substring would have had in the output stream. The cumulativeDiff parameter to the addOffCorrectMapping() method will be the sum of all previous replacement offset adjustments, with the addition of the difference between the lengths of the original substring and the replacement string so far (a negative value). Classes BaseCharFilter Base utility class for implementing a CharFilter . You subclass this, and then record mappings by calling AddOffCorrectMap(Int32, Int32) , and then invoke the correct method to correct an offset. HTMLStripCharFilter A CharFilter that wraps another System.IO.TextReader and attempts to strip out HTML constructs. HTMLStripCharFilterFactory Factory for HTMLStripCharFilter . <fieldType name=\"text_html\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.HTMLStripCharFilterFactory\" escapedTags=\"a, title\" /> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> MappingCharFilter Simplistic CharFilter that applies the mappings contained in a NormalizeCharMap to the character stream, and correcting the resulting changes to the offsets. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. MappingCharFilterFactory Factory for MappingCharFilter . <fieldType name=\"text_map\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.MappingCharFilterFactory\" mapping=\"mapping.txt\"/> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 1.4 NormalizeCharMap Holds a map of System.String input to System.String output, to be used with NormalizeCharMap.Builder . Use the MappingCharFilter to create this. NormalizeCharMap.Builder Builds an NormalizeCharMap. Call add() until you have added all the mappings, then call build() to get a NormalizeCharMap This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html",
    "title": "Class HTMLStripCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HTMLStripCharFilter A CharFilter that wraps another System.IO.TextReader and attempts to strip out HTML constructs. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter BaseCharFilter HTMLStripCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HTMLStripCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source HTMLStripCharFilter(TextReader) Creates a new HTMLStripCharFilter over the provided TextReader. Declaration public HTMLStripCharFilter(TextReader source) Parameters Type Name Description System.IO.TextReader source System.IO.TextReader to strip html tags from. | Improve this Doc View Source HTMLStripCharFilter(TextReader, ICollection<String>) Creates a new HTMLStripCharFilter over the provided System.IO.TextReader with the specified start and end tags. Declaration public HTMLStripCharFilter(TextReader source, ICollection<string> escapedTags) Parameters Type Name Description System.IO.TextReader source System.IO.TextReader to strip html tags from. System.Collections.Generic.ICollection < System.String > escapedTags Tags in this set (both start and end tags) will not be filtered out. Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides CharFilter.Dispose(Boolean) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html",
    "title": "Class HTMLStripCharFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HTMLStripCharFilterFactory Factory for HTMLStripCharFilter . <fieldType name=\"text_html\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.HTMLStripCharFilterFactory\" escapedTags=\"a, title\" /> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory HTMLStripCharFilterFactory Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HTMLStripCharFilterFactory : CharFilterFactory Constructors | Improve this Doc View Source HTMLStripCharFilterFactory(IDictionary<String, String>) Creates a new HTMLStripCharFilterFactory Declaration public HTMLStripCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilter.html",
    "title": "Class MappingCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MappingCharFilter Simplistic CharFilter that applies the mappings contained in a NormalizeCharMap to the character stream, and correcting the resulting changes to the offsets. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter BaseCharFilter MappingCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class MappingCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source MappingCharFilter(NormalizeCharMap, TextReader) Default constructor that takes a System.IO.TextReader . Declaration public MappingCharFilter(NormalizeCharMap normMap, TextReader in) Parameters Type Name Description NormalizeCharMap normMap System.IO.TextReader in Methods | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides CharFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html",
    "title": "Class MappingCharFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MappingCharFilterFactory Factory for MappingCharFilter . <fieldType name=\"text_map\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.MappingCharFilterFactory\" mapping=\"mapping.txt\"/> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 1.4 Inheritance System.Object AbstractAnalysisFactory CharFilterFactory MappingCharFilterFactory Implements IResourceLoaderAware IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class MappingCharFilterFactory : CharFilterFactory, IResourceLoaderAware, IMultiTermAwareComponent Constructors | Improve this Doc View Source MappingCharFilterFactory(IDictionary<String, String>) Creates a new MappingCharFilterFactory Declaration public MappingCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source m_normMap Declaration protected NormalizeCharMap m_normMap Field Value Type Description NormalizeCharMap Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader | Improve this Doc View Source ParseRules(IList<String>, NormalizeCharMap.Builder) Declaration protected virtual void ParseRules(IList<string> rules, NormalizeCharMap.Builder builder) Parameters Type Name Description System.Collections.Generic.IList < System.String > rules NormalizeCharMap.Builder builder | Improve this Doc View Source ParseString(String) Declaration protected virtual string ParseString(string s) Parameters Type Name Description System.String s Returns Type Description System.String Implements IResourceLoaderAware IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html",
    "title": "Class NormalizeCharMap.Builder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormalizeCharMap.Builder Builds an NormalizeCharMap. Call add() until you have added all the mappings, then call build() to get a NormalizeCharMap This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NormalizeCharMap.Builder 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.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder Methods | Improve this Doc View Source Add(String, String) Records a replacement to be applied to the input stream. Whenever singleMatch occurs in the input, it will be replaced with replacement . Declaration public virtual void Add(string match, string replacement) Parameters Type Name Description System.String match input String to be replaced System.String replacement output String Exceptions Type Condition System.ArgumentException if match is the empty string, or was already previously added | Improve this Doc View Source Build() Builds the NormalizeCharMap ; call this once you are done calling Add(String, String) . Declaration public virtual NormalizeCharMap Build() Returns Type Description NormalizeCharMap"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html",
    "title": "Class NormalizeCharMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormalizeCharMap Holds a map of System.String input to System.String output, to be used with NormalizeCharMap.Builder . Use the MappingCharFilter to create this. Inheritance System.Object NormalizeCharMap 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.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NormalizeCharMap"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKAnalyzer.html",
    "title": "Class CJKAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CJKAnalyzer An Analyzer that tokenizes text with StandardTokenizer , normalizes content with CJKWidthFilter , folds case with LowerCaseFilter , forms bigrams of CJK with CJKBigramFilter , and filters stopwords with StopFilter Inheritance System.Object Analyzer StopwordAnalyzerBase CJKAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source CJKAnalyzer(LuceneVersion) Builds an analyzer which removes words in DefaultStopSet . Declaration public CJKAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source CJKAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public CJKAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default CJK stopwords. Currently it contains some common English words that are not usually useful for searching and some double-byte interpunctions. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilter.html",
    "title": "Class CJKBigramFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CJKBigramFilter Forms bigrams of CJK terms that are generated from StandardTokenizer or ICUTokenizer. CJK types are set by these tokenizers, but you can also use CJKBigramFilter(TokenStream, CJKScript) to explicitly control which of the CJK scripts are turned into bigrams. By default, when a CJK character has no adjacent characters to form a bigram, it is output in unigram form. If you want to always output both unigrams and bigrams, set the outputUnigrams flag in CJKBigramFilter(TokenStream, CJKScript, Boolean) . This can be used for a combined unigram+bigram approach. In all cases, all non-CJK input is passed thru unmodified. Inheritance System.Object AttributeSource TokenStream TokenFilter CJKBigramFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKBigramFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CJKBigramFilter(TokenStream) Calls CJKBigramFilter(TokenStream, CJKScript) Declaration public CJKBigramFilter(TokenStream in) Parameters Type Name Description TokenStream in Input TokenStream | Improve this Doc View Source CJKBigramFilter(TokenStream, CJKScript) Calls CJKBigramFilter(TokenStream, CJKScript, Boolean) Declaration public CJKBigramFilter(TokenStream in, CJKScript flags) Parameters Type Name Description TokenStream in Input TokenStream CJKScript flags OR'ed set from HAN , HIRAGANA , KATAKANA , HANGUL | Improve this Doc View Source CJKBigramFilter(TokenStream, CJKScript, Boolean) Create a new CJKBigramFilter , specifying which writing systems should be bigrammed, and whether or not unigrams should also be output. Declaration public CJKBigramFilter(TokenStream in, CJKScript flags, bool outputUnigrams) Parameters Type Name Description TokenStream in Input TokenStream CJKScript flags OR'ed set from HAN , HIRAGANA , KATAKANA , HANGUL System.Boolean outputUnigrams true if unigrams for the selected writing systems should also be output. when this is false, this is only done when there are no adjacent characters to form a bigram. Fields | Improve this Doc View Source DOUBLE_TYPE when we emit a bigram, its then marked as this type Declaration public const string DOUBLE_TYPE = \"<DOUBLE>\" Field Value Type Description System.String | Improve this Doc View Source SINGLE_TYPE when we emit a unigram, its then marked as this type Declaration public const string SINGLE_TYPE = \"<SINGLE>\" Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html",
    "title": "Class CJKBigramFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CJKBigramFilterFactory Factory for CJKBigramFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\" han=\"true\" hiragana=\"true\" katakana=\"true\" hangul=\"true\" outputUnigrams=\"false\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CJKBigramFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CJKBigramFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CJKBigramFilterFactory(IDictionary<String, String>) Creates a new CJKBigramFilterFactory Declaration public CJKBigramFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKScript.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKScript.html",
    "title": "Enum CJKScript | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum CJKScript Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax [Flags] public enum CJKScript Fields Name Description ALL bigram flag for all scripts HAN bigram flag for Han Ideographs HANGUL bigram flag for Hangul HIRAGANA bigram flag for Hiragana KATAKANA bigram flag for Katakana"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizer.html",
    "title": "Class CJKTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CJKTokenizer CJKTokenizer is designed for Chinese, Japanese, and Korean languages. The tokens returned are every two adjacent characters with overlap match. Example: \"java C1C2C3C4\" will be segmented to: \"java\" \"C1C2\" \"C2C3\" \"C3C4\". Additionally, the following is applied to Latin text (such as English): Text is converted to lowercase. Numeric digits, '+', '#', and '_' are tokenized as letters. Full-width forms are converted to half-width forms. For more info on Asian language (Chinese, Japanese, and Korean) text segmentation: please search google Inheritance System.Object AttributeSource TokenStream Tokenizer CJKTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use StandardTokenizer, CJKWidthFilter, CJKBigramFilter, and LowerCaseFilter instead.\")] public sealed class CJKTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source CJKTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public CJKTokenizer(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader in | Improve this Doc View Source CJKTokenizer(TextReader) Construct a token stream processing the given input. Declaration public CJKTokenizer(TextReader in) Parameters Type Name Description System.IO.TextReader in I/O reader Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Returns true for the next token in the stream, or false at EOS. See http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.UnicodeBlock.html for detail. Declaration public override bool IncrementToken() Returns Type Description System.Boolean false for end of stream, true otherwise Overrides TokenStream.IncrementToken() Exceptions Type Condition System.IO.IOException when read error happened in the InputStream | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html",
    "title": "Class CJKTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CJKTokenizerFactory Factory for CJKTokenizer . <fieldType name=\"text_cjk\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.CJKTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory CJKTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use CJKBigramFilterFactory instead.\")] public class CJKTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source CJKTokenizerFactory(IDictionary<String, String>) Creates a new CJKTokenizerFactory Declaration public CJKTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader in Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilter.html",
    "title": "Class CJKWidthFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CJKWidthFilter A TokenFilter that normalizes CJK width differences: Folds fullwidth ASCII variants into the equivalent basic latin Folds halfwidth Katakana variants into the equivalent kana NOTE: this filter can be viewed as a (practical) subset of NFKC/NFKD Unicode normalization. See the normalization support in the ICU package for full normalization. Inheritance System.Object AttributeSource TokenStream TokenFilter CJKWidthFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKWidthFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CJKWidthFilter(TokenStream) Declaration public CJKWidthFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html",
    "title": "Class CJKWidthFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CJKWidthFilterFactory Factory for CJKWidthFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CJKWidthFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CJKWidthFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source CJKWidthFilterFactory(IDictionary<String, String>) Creates a new CJKWidthFilterFactory Declaration public CJKWidthFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.html",
    "title": "Namespace Lucene.Net.Analysis.Cjk | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cjk <!-- 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. --> Analyzer for Chinese, Japanese, and Korean, which indexes bigrams. This analyzer generates bigram terms, which are overlapping groups of two adjacent Han, Hiragana, Katakana, or Hangul characters. Three analyzers are provided for Chinese, each of which treats Chinese text in a different way. * ChineseAnalyzer (in the analyzers/cn package): Index unigrams (individual Chinese characters) as a token. * CJKAnalyzer (in this package): Index bigrams (overlapping groups of two adjacent Chinese characters) as tokens. * SmartChineseAnalyzer (in the analyzers/smartcn package): Index words (attempt to segment Chinese text into words) as tokens. Example phrase： \"我是中国人\" 1. ChineseAnalyzer: 我－是－中－国－人 2. CJKAnalyzer: 我是－是中－中国－国人 3. SmartChineseAnalyzer: 我－是－中国－人 Classes CJKAnalyzer An Analyzer that tokenizes text with StandardTokenizer , normalizes content with CJKWidthFilter , folds case with LowerCaseFilter , forms bigrams of CJK with CJKBigramFilter , and filters stopwords with StopFilter CJKBigramFilter Forms bigrams of CJK terms that are generated from StandardTokenizer or ICUTokenizer. CJK types are set by these tokenizers, but you can also use CJKBigramFilter(TokenStream, CJKScript) to explicitly control which of the CJK scripts are turned into bigrams. By default, when a CJK character has no adjacent characters to form a bigram, it is output in unigram form. If you want to always output both unigrams and bigrams, set the outputUnigrams flag in CJKBigramFilter(TokenStream, CJKScript, Boolean) . This can be used for a combined unigram+bigram approach. In all cases, all non-CJK input is passed thru unmodified. CJKBigramFilterFactory Factory for CJKBigramFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\" han=\"true\" hiragana=\"true\" katakana=\"true\" hangul=\"true\" outputUnigrams=\"false\" /> </analyzer> </fieldType> CJKTokenizer CJKTokenizer is designed for Chinese, Japanese, and Korean languages. The tokens returned are every two adjacent characters with overlap match. Example: \"java C1C2C3C4\" will be segmented to: \"java\" \"C1C2\" \"C2C3\" \"C3C4\". Additionally, the following is applied to Latin text (such as English): Text is converted to lowercase. Numeric digits, '+', '#', and '_' are tokenized as letters. Full-width forms are converted to half-width forms. For more info on Asian language (Chinese, Japanese, and Korean) text segmentation: please search google CJKTokenizerFactory Factory for CJKTokenizer . <fieldType name=\"text_cjk\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.CJKTokenizerFactory\"/> </analyzer> </fieldType> CJKWidthFilter A TokenFilter that normalizes CJK width differences: Folds fullwidth ASCII variants into the equivalent basic latin Folds halfwidth Katakana variants into the equivalent kana NOTE: this filter can be viewed as a (practical) subset of NFKC/NFKD Unicode normalization. See the normalization support in the ICU package for full normalization. CJKWidthFilterFactory Factory for CJKWidthFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\"/> </analyzer> </fieldType> Enums CJKScript"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.html",
    "title": "Namespace Lucene.Net.Analysis.Ckb | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ckb <!-- 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. --> Analyzer for Sorani Kurdish. Classes SoraniAnalyzer Analyzer for Sorani Kurdish. SoraniNormalizationFilter A TokenFilter that applies SoraniNormalizer to normalize the orthography. SoraniNormalizationFilterFactory Factory for SoraniNormalizationFilter . <fieldType name=\"text_ckbnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> </analyzer> </fieldType> SoraniNormalizer Normalizes the Unicode representation of Sorani text. Normalization consists of: Alternate forms of 'y' (0064, 0649) are converted to 06CC (FARSI YEH) Alternate form of 'k' (0643) is converted to 06A9 (KEHEH) Alternate forms of vowel 'e' (0647+200C, word-final 0647, 0629) are converted to 06D5 (AE) Alternate (joining) form of 'h' (06BE) is converted to 0647 Alternate forms of 'rr' (0692, word-initial 0631) are converted to 0695 (REH WITH SMALL V BELOW) Harakat, tatweel, and formatting characters such as directional controls are removed. SoraniStemFilter A TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SoraniStemFilterFactory Factory for SoraniStemFilter . <fieldType name=\"text_ckbstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> <filter class=\"solr.SoraniStemFilterFactory\"/> </analyzer> </fieldType> SoraniStemmer Light stemmer for Sorani"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html",
    "title": "Class SoraniAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SoraniAnalyzer Analyzer for Sorani Kurdish. Inheritance System.Object Analyzer StopwordAnalyzerBase SoraniAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source SoraniAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SoraniAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SoraniAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SoraniAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SoraniAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SoraniAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Kurdish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , SoraniNormalizationFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SoraniStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html",
    "title": "Class SoraniNormalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SoraniNormalizationFilter A TokenFilter that applies SoraniNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter SoraniNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SoraniNormalizationFilter(TokenStream) Declaration public SoraniNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html",
    "title": "Class SoraniNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SoraniNormalizationFilterFactory Factory for SoraniNormalizationFilter . <fieldType name=\"text_ckbnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SoraniNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source SoraniNormalizationFilterFactory(IDictionary<String, String>) Creates a new SoraniNormalizationFilterFactory Declaration public SoraniNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizer.html",
    "title": "Class SoraniNormalizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SoraniNormalizer Normalizes the Unicode representation of Sorani text. Normalization consists of: Alternate forms of 'y' (0064, 0649) are converted to 06CC (FARSI YEH) Alternate form of 'k' (0643) is converted to 06A9 (KEHEH) Alternate forms of vowel 'e' (0647+200C, word-final 0647, 0629) are converted to 06D5 (AE) Alternate (joining) form of 'h' (06BE) is converted to 0647 Alternate forms of 'rr' (0692, word-initial 0631) are converted to 0695 (REH WITH SMALL V BELOW) Harakat, tatweel, and formatting characters such as directional controls are removed. Inheritance System.Object SoraniNormalizer 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.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniNormalizer Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Sorani text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilter.html",
    "title": "Class SoraniStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SoraniStemFilter A TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SoraniStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SoraniStemFilter(TokenStream) Declaration public SoraniStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html",
    "title": "Class SoraniStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SoraniStemFilterFactory Factory for SoraniStemFilter . <fieldType name=\"text_ckbstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> <filter class=\"solr.SoraniStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SoraniStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SoraniStemFilterFactory(IDictionary<String, String>) Creates a new SoraniStemFilterFactory Declaration public SoraniStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemmer.html",
    "title": "Class SoraniStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SoraniStemmer Light stemmer for Sorani Inheritance System.Object SoraniStemmer 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.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Sorani text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseAnalyzer.html",
    "title": "Class ChineseAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ChineseAnalyzer An Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter Inheritance System.Object Analyzer ChineseAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardAnalyzer instead, which has the same functionality.\")] public sealed class ChineseAnalyzer : Analyzer, IDisposable Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a ChineseTokenizer filtered with ChineseFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilter.html",
    "title": "Class ChineseFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ChineseFilter A TokenFilter with a stop word table. Numeric tokens are removed. English tokens must be larger than 1 character. One Chinese character as one Chinese word. TO DO: Add Chinese stop words, such as \\ue400 Dictionary based Chinese word extraction Intelligent Chinese word extraction Inheritance System.Object AttributeSource TokenStream TokenFilter ChineseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StopFilter instead, which has the same functionality.\")] public sealed class ChineseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ChineseFilter(TokenStream) Declaration public ChineseFilter(TokenStream in) Parameters Type Name Description TokenStream in Fields | Improve this Doc View Source STOP_WORDS Declaration public static readonly string[] STOP_WORDS Field Value Type Description System.String [] Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilterFactory.html",
    "title": "Class ChineseFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ChineseFilterFactory Factory for ChineseFilter Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ChineseFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use StopFilterFactory instead.\")] public class ChineseFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ChineseFilterFactory(IDictionary<String, String>) Creates a new ChineseFilterFactory Declaration public ChineseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizer.html",
    "title": "Class ChineseTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ChineseTokenizer Tokenize Chinese text as individual chinese characters. The difference between ChineseTokenizer and CJKTokenizer is that they have different token parsing logic. For example, if the Chinese text \"C1C2C3C4\" is to be indexed: The tokens returned from ChineseTokenizer are C1, C2, C3, C4. The tokens returned from the CJKTokenizer are C1C2, C2C3, C3C4. Therefore the index created by CJKTokenizer is much larger. The problem is that when searching for C1, C1C2, C1C3, C4C2, C1C2C3 ... the ChineseTokenizer works, but the CJKTokenizer will not work. Inheritance System.Object AttributeSource TokenStream Tokenizer ChineseTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizer instead, which has the same functionality.\")] public sealed class ChineseTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ChineseTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public ChineseTokenizer(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader in | Improve this Doc View Source ChineseTokenizer(TextReader) Declaration public ChineseTokenizer(TextReader in) Parameters Type Name Description System.IO.TextReader in Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html",
    "title": "Class ChineseTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ChineseTokenizerFactory Factory for ChineseTokenizer Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ChineseTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use StandardTokenizerFactory instead.\")] public class ChineseTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ChineseTokenizerFactory(IDictionary<String, String>) Creates a new ChineseTokenizerFactory Declaration public ChineseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.html",
    "title": "Namespace Lucene.Net.Analysis.Cn | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn <!-- 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. --> Analyzer for Chinese, which indexes unigrams (individual chinese characters). Three analyzers are provided for Chinese, each of which treats Chinese text in a different way. * StandardAnalyzer: Index unigrams (individual Chinese characters) as a token. * CJKAnalyzer (in the analyzers/cjk package): Index bigrams (overlapping groups of two adjacent Chinese characters) as tokens. * SmartChineseAnalyzer (in the analyzers/smartcn package): Index words (attempt to segment Chinese text into words) as tokens. Example phrase： \"我是中国人\" 1. StandardAnalyzer: 我－是－中－国－人 2. CJKAnalyzer: 我是－是中－中国－国人 3. SmartChineseAnalyzer: 我－是－中国－人 Classes ChineseAnalyzer An Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter ChineseFilter A TokenFilter with a stop word table. Numeric tokens are removed. English tokens must be larger than 1 character. One Chinese character as one Chinese word. TO DO: Add Chinese stop words, such as \\ue400 Dictionary based Chinese word extraction Intelligent Chinese word extraction ChineseFilterFactory Factory for ChineseFilter ChineseTokenizer Tokenize Chinese text as individual chinese characters. The difference between ChineseTokenizer and CJKTokenizer is that they have different token parsing logic. For example, if the Chinese text \"C1C2C3C4\" is to be indexed: The tokens returned from ChineseTokenizer are C1, C2, C3, C4. The tokens returned from the CJKTokenizer are C1C2, C2C3, C3C4. Therefore the index created by CJKTokenizer is much larger. The problem is that when searching for C1, C1C2, C1C3, C4C2, C1C2C3 ... the ChineseTokenizer works, but the CJKTokenizer will not work. ChineseTokenizerFactory Factory for ChineseTokenizer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html",
    "title": "Class CommonGramsFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommonGramsFilter Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This is achieved through the use of PositionIncrement . Bigrams have a type of GRAM_TYPE Example: input:\"the quick brown fox\" output:|\"the\",\"the-quick\"|\"brown\"|\"fox\"| \"the-quick\" has a position increment of 0 so it is in the same position as \"the\" \"the-quick\" has a term.type() of \"gram\" Inheritance System.Object AttributeSource TokenStream TokenFilter CommonGramsFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CommonGramsFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CommonGramsFilter(LuceneVersion, TokenStream, CharArraySet) Construct a token stream filtering the given input using a Set of common words to create bigrams. Outputs both unigrams with position increment and bigrams with position increment 0 type=gram where one or both of the words in a potential bigram are in the set of common words . Declaration public CommonGramsFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet commonWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream input TokenStream input in filter chain CharArraySet commonWords The set of common words. Fields | Improve this Doc View Source GRAM_TYPE Declaration public const string GRAM_TYPE = \"gram\" Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Inserts bigrams for common words into a token stream. For each input token, output the token. If the token and/or the following token are in the list of common words also output a bigram with position increment 0 and type=\"gram\" TODO:Consider adding an option to not emit unigram stopwords as in CDL XTF BigramStopFilter, CommonGramsQueryFilter would need to be changed to work with this. TODO: Consider optimizing for the case of three commongrams i.e \"man of the year\" normally produces 3 bigrams: \"man-of\", \"of-the\", \"the-year\" but with proper management of positions we could eliminate the middle bigram \"of-the\"and save a disk seek and a whole set of position lookups. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html",
    "title": "Class CommonGramsFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommonGramsFilterFactory Constructs a CommonGramsFilter . <fieldType name=\"text_cmmngrms\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsFilterFactory\" words=\"commongramsstopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CommonGramsFilterFactory CommonGramsQueryFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CommonGramsFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source CommonGramsFilterFactory(IDictionary<String, String>) Creates a new CommonGramsFilterFactory Declaration public CommonGramsFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source CommonWords Declaration public virtual CharArraySet CommonWords { get; } Property Value Type Description CharArraySet | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html",
    "title": "Class CommonGramsQueryFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommonGramsQueryFilter Wrap a CommonGramsFilter optimizing phrase queries by only returning single words when they are not a member of a bigram. Example: query input to CommonGramsFilter: \"the rain in spain falls mainly\" output of CommomGramsFilter/input to CommonGramsQueryFilter: |\"the, \"the-rain\"|\"rain\" \"rain-in\"|\"in, \"in-spain\"|\"spain\"|\"falls\"|\"mainly\" output of CommonGramsQueryFilter:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" Inheritance System.Object AttributeSource TokenStream TokenFilter CommonGramsQueryFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CommonGramsQueryFilter : TokenFilter, IDisposable Remarks See: http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc//all/org/apache/lucene/analysis/TokenStream.html and http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/analysis/package.html?revision=718798 Constructors | Improve this Doc View Source CommonGramsQueryFilter(CommonGramsFilter) Constructs a new CommonGramsQueryFilter based on the provided CommomGramsFilter Declaration public CommonGramsQueryFilter(CommonGramsFilter input) Parameters Type Name Description CommonGramsFilter input CommonGramsFilter the QueryFilter will use Properties | Improve this Doc View Source IsGramType Convenience method to check if the current type is a gram type Declaration public bool IsGramType { get; } Property Value Type Description System.Boolean true if the current type is a gram type, false otherwise Methods | Improve this Doc View Source IncrementToken() Output bigrams whenever possible to optimize queries. Only output unigrams when they are not a member of a bigram. Example: input: \"the rain in spain falls mainly\" output:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html",
    "title": "Class CommonGramsQueryFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommonGramsQueryFilterFactory Construct CommonGramsQueryFilter . <fieldType name=\"text_cmmngrmsqry\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsQueryFilterFactory\" words=\"commongramsquerystopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CommonGramsFilterFactory CommonGramsQueryFilterFactory Implements IResourceLoaderAware Inherited Members CommonGramsFilterFactory.Inform(IResourceLoader) CommonGramsFilterFactory.IgnoreCase CommonGramsFilterFactory.CommonWords TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CommonGramsQueryFilterFactory : CommonGramsFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source CommonGramsQueryFilterFactory(IDictionary<String, String>) Creates a new CommonGramsQueryFilterFactory Declaration public CommonGramsQueryFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Create a CommonGramsFilter and wrap it with a CommonGramsQueryFilter Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides CommonGramsFilterFactory.Create(TokenStream) Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.html",
    "title": "Namespace Lucene.Net.Analysis.CommonGrams | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.CommonGrams <!-- 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. --> Construct n-grams for frequently occurring terms and phrases. Classes CommonGramsFilter Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This is achieved through the use of PositionIncrement . Bigrams have a type of GRAM_TYPE Example: input:\"the quick brown fox\" output:|\"the\",\"the-quick\"|\"brown\"|\"fox\"| \"the-quick\" has a position increment of 0 so it is in the same position as \"the\" \"the-quick\" has a term.type() of \"gram\" CommonGramsFilterFactory Constructs a CommonGramsFilter . <fieldType name=\"text_cmmngrms\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsFilterFactory\" words=\"commongramsstopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> CommonGramsQueryFilter Wrap a CommonGramsFilter optimizing phrase queries by only returning single words when they are not a member of a bigram. Example: query input to CommonGramsFilter: \"the rain in spain falls mainly\" output of CommomGramsFilter/input to CommonGramsQueryFilter: |\"the, \"the-rain\"|\"rain\" \"rain-in\"|\"in, \"in-spain\"|\"spain\"|\"falls\"|\"mainly\" output of CommonGramsQueryFilter:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" CommonGramsQueryFilterFactory Construct CommonGramsQueryFilter . <fieldType name=\"text_cmmngrmsqry\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsQueryFilterFactory\" words=\"commongramsquerystopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html",
    "title": "Class CompoundWordTokenFilterBase.CompoundToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompoundWordTokenFilterBase.CompoundToken Helper class to hold decompounded token information Inheritance System.Object CompoundWordTokenFilterBase.CompoundToken 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.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class CompoundToken Constructors | Improve this Doc View Source CompoundToken(CompoundWordTokenFilterBase, Int32, Int32) Construct the compound token based on a slice of the current m_termAtt . Declaration public CompoundToken(CompoundWordTokenFilterBase outerInstance, int offset, int length) Parameters Type Name Description CompoundWordTokenFilterBase outerInstance System.Int32 offset System.Int32 length Properties | Improve this Doc View Source EndOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public ICharSequence Text { get; } Property Value Type Description J2N.Text.ICharSequence"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html",
    "title": "Class CompoundWordTokenFilterBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompoundWordTokenFilterBase Base class for decomposition token filters. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. As of 4.4, CompoundWordTokenFilterBase doesn't update offsets. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase DictionaryCompoundWordTokenFilter HyphenationCompoundWordTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CompoundWordTokenFilterBase : TokenFilter, IDisposable Constructors | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet, Boolean) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary System.Boolean onlyLongestMatch | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet, Int32, Int32, Int32, Boolean) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary System.Int32 minWordSize System.Int32 minSubwordSize System.Int32 maxSubwordSize System.Boolean onlyLongestMatch Fields | Improve this Doc View Source DEFAULT_MAX_SUBWORD_SIZE The default for maximal length of subwords that get propagated to the output of this filter Declaration public const int DEFAULT_MAX_SUBWORD_SIZE = 15 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_SUBWORD_SIZE The default for minimal length of subwords that get propagated to the output of this filter Declaration public const int DEFAULT_MIN_SUBWORD_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_WORD_SIZE The default for minimal word length that gets decomposed Declaration public const int DEFAULT_MIN_WORD_SIZE = 5 Field Value Type Description System.Int32 | Improve this Doc View Source m_dictionary Declaration protected readonly CharArraySet m_dictionary Field Value Type Description CharArraySet | Improve this Doc View Source m_matchVersion Declaration protected readonly LuceneVersion m_matchVersion Field Value Type Description LuceneVersion | Improve this Doc View Source m_maxSubwordSize Declaration protected readonly int m_maxSubwordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minSubwordSize Declaration protected readonly int m_minSubwordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minWordSize Declaration protected readonly int m_minWordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_offsetAtt Declaration protected readonly IOffsetAttribute m_offsetAtt Field Value Type Description IOffsetAttribute | Improve this Doc View Source m_onlyLongestMatch Declaration protected readonly bool m_onlyLongestMatch Field Value Type Description System.Boolean | Improve this Doc View Source m_termAtt Declaration protected readonly ICharTermAttribute m_termAtt Field Value Type Description ICharTermAttribute | Improve this Doc View Source m_tokens Declaration protected readonly LinkedList<CompoundWordTokenFilterBase.CompoundToken> m_tokens Field Value Type Description System.Collections.Generic.LinkedList < CompoundWordTokenFilterBase.CompoundToken > Methods | Improve this Doc View Source Decompose() Decomposes the current m_termAtt and places CompoundWordTokenFilterBase.CompoundToken instances in the m_tokens list. The original token may not be placed in the list, as it is automatically passed through this filter. Declaration protected abstract void Decompose() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html",
    "title": "Class DictionaryCompoundWordTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DictionaryCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a brute-force algorithm to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase DictionaryCompoundWordTokenFilter Implements System.IDisposable Inherited Members CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE CompoundWordTokenFilterBase.m_matchVersion CompoundWordTokenFilterBase.m_dictionary CompoundWordTokenFilterBase.m_tokens CompoundWordTokenFilterBase.m_minWordSize CompoundWordTokenFilterBase.m_minSubwordSize CompoundWordTokenFilterBase.m_maxSubwordSize CompoundWordTokenFilterBase.m_onlyLongestMatch CompoundWordTokenFilterBase.m_termAtt CompoundWordTokenFilterBase.m_offsetAtt CompoundWordTokenFilterBase.IncrementToken() CompoundWordTokenFilterBase.Reset() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DictionaryCompoundWordTokenFilter : CompoundWordTokenFilterBase, IDisposable Constructors | Improve this Doc View Source DictionaryCompoundWordTokenFilter(LuceneVersion, TokenStream, CharArraySet) Creates a new DictionaryCompoundWordTokenFilter Declaration public DictionaryCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process CharArraySet dictionary the word dictionary to match against. | Improve this Doc View Source DictionaryCompoundWordTokenFilter(LuceneVersion, TokenStream, CharArraySet, Int32, Int32, Int32, Boolean) Creates a new DictionaryCompoundWordTokenFilter Declaration public DictionaryCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process CharArraySet dictionary the word dictionary to match against. System.Int32 minWordSize only words longer than this get processed System.Int32 minSubwordSize only subwords longer than this get to the output stream System.Int32 maxSubwordSize only subwords shorter than this get to the output stream System.Boolean onlyLongestMatch Add only the longest matching subword to the stream Methods | Improve this Doc View Source Decompose() Declaration protected override void Decompose() Overrides CompoundWordTokenFilterBase.Decompose() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html",
    "title": "Class DictionaryCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DictionaryCompoundWordTokenFilterFactory Factory for DictionaryCompoundWordTokenFilter . <fieldType name=\"text_dictcomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DictionaryCompoundWordTokenFilterFactory\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory DictionaryCompoundWordTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DictionaryCompoundWordTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source DictionaryCompoundWordTokenFilterFactory(IDictionary<String, String>) Creates a new DictionaryCompoundWordTokenFilterFactory Declaration public DictionaryCompoundWordTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.html",
    "title": "Namespace Lucene.Net.Analysis.Compound | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Compound <!-- 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. --> A filter that decomposes compound words you find in many Germanic languages into the word parts. This example shows what it does: Input token stream Rindfleischüberwachungsgesetz Drahtschere abba Output token stream (Rindfleischüberwachungsgesetz,0,29) (Rind,0,4,posIncr=0) (fleisch,4,11,posIncr=0) (überwachung,11,22,posIncr=0) (gesetz,23,29,posIncr=0) (Drahtschere,30,41) (Draht,30,35,posIncr=0) (schere,35,41,posIncr=0) (abba,42,46) The input token is always preserved and the filters do not alter the case of word parts. There are two variants of the filter available: HyphenationCompoundWordTokenFilter : it uses a hyphenation grammar based approach to find potential word parts of a given word. DictionaryCompoundWordTokenFilter : it uses a brute-force dictionary-only based approach to find the word parts of a given word. Compound word token filters HyphenationCompoundWordTokenFilter The HyphenationCompoundWordTokenFilter uses hyphenation grammars to find potential subwords that a worth to check against the dictionary. It can be used without a dictionary as well but then produces a lot of \"nonword\" tokens. The quality of the output tokens is directly connected to the quality of the grammar file you use. For languages like German they are quite good. Grammar file Unfortunately we cannot bundle the hyphenation grammar files with Lucene because they do not use an ASF compatible license (they use the LaTeX Project Public License instead). You can find the XML based grammar files at the Objects For Formatting Objects (OFFO) Sourceforge project (direct link to download the pattern files: http://downloads.sourceforge.net/offo/offo-hyphenation.zip ). The files you need are in the subfolder offo-hyphenation/hyph/ . Credits for the hyphenation code go to the Apache FOP project . DictionaryCompoundWordTokenFilter The DictionaryCompoundWordTokenFilter uses a dictionary-only approach to find subwords in a compound word. It is much slower than the one that uses the hyphenation grammars. You can use it as a first start to see if your dictionary is good or not because it is much simpler in design. Dictionary The output quality of both token filters is directly connected to the quality of the dictionary you use. They are language dependent of course. You always should use a dictionary that fits to the text you want to index. If you index medical text for example then you should use a dictionary that contains medical words. A good start for general text are the dictionaries you find at the OpenOffice dictionaries Wiki. Which variant should I use? This decision matrix should help you: Token filter Output quality Performance HyphenationCompoundWordTokenFilter good if grammar file is good – acceptable otherwise fast DictionaryCompoundWordTokenFilter good slow Examples public void testHyphenationCompoundWordsDE() throws Exception { String[] dict = { \"Rind\", \"Fleisch\", \"Draht\", \"Schere\", \"Gesetz\", \"Aufgabe\", \"Überwachung\" }; Reader reader = new FileReader(\"de_DR.xml\"); HyphenationTree hyphenator = HyphenationCompoundWordTokenFilter .getHyphenationTree(reader); HyphenationCompoundWordTokenFilter tf = new HyphenationCompoundWordTokenFilter( new WhitespaceTokenizer(new StringReader( \"Rindfleischüberwachungsgesetz Drahtschere abba\")), hyphenator, dict, CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE, CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE, CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE, false); CharTermAttribute t = tf.addAttribute(CharTermAttribute.class); while (tf.incrementToken()) { System.out.println(t); } } public void testHyphenationCompoundWordsWithoutDictionaryDE() throws Exception { Reader reader = new FileReader(\"de_DR.xml\"); HyphenationTree hyphenator = HyphenationCompoundWordTokenFilter .getHyphenationTree(reader); HyphenationCompoundWordTokenFilter tf = new HyphenationCompoundWordTokenFilter( new WhitespaceTokenizer(new StringReader( \"Rindfleischüberwachungsgesetz Drahtschere abba\")), hyphenator); CharTermAttribute t = tf.addAttribute(CharTermAttribute.class); while (tf.incrementToken()) { System.out.println(t); } } public void testDumbCompoundWordsSE() throws Exception { String[] dict = { \"Bil\", \"Dörr\", \"Motor\", \"Tak\", \"Borr\", \"Slag\", \"Hammar\", \"Pelar\", \"Glas\", \"Ögon\", \"Fodral\", \"Bas\", \"Fiol\", \"Makare\", \"Gesäll\", \"Sko\", \"Vind\", \"Rute\", \"Torkare\", \"Blad\" }; DictionaryCompoundWordTokenFilter tf = new DictionaryCompoundWordTokenFilter( new WhitespaceTokenizer( new StringReader( \"Bildörr Bilmotor Biltak Slagborr Hammarborr Pelarborr Glasögonfodral Basfiolsfodral Basfiolsfodralmakaregesäll Skomakare Vindrutetorkare Vindrutetorkarblad abba\")), dict); CharTermAttribute t = tf.addAttribute(CharTermAttribute.class); while (tf.incrementToken()) { System.out.println(t); } } Classes CompoundWordTokenFilterBase Base class for decomposition token filters. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. As of 4.4, CompoundWordTokenFilterBase doesn't update offsets. CompoundWordTokenFilterBase.CompoundToken Helper class to hold decompounded token information DictionaryCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a brute-force algorithm to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. DictionaryCompoundWordTokenFilterFactory Factory for DictionaryCompoundWordTokenFilter . <fieldType name=\"text_dictcomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DictionaryCompoundWordTokenFilterFactory\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"true\"/> </analyzer> </fieldType> HyphenationCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a hyphenation grammar and a word dictionary to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. HyphenationCompoundWordTokenFilterFactory Factory for HyphenationCompoundWordTokenFilter . This factory accepts the following parameters: hyphenator (mandatory): path to the FOP xml hyphenation pattern. See http://offo.sourceforge.net/hyphenation/ . encoding (optional): encoding of the xml hyphenation file. defaults to UTF-8. dictionary (optional): dictionary of words. defaults to no dictionary. minWordSize (optional): minimal word length that gets decomposed. defaults to 5. minSubwordSize (optional): minimum length of subwords. defaults to 2. maxSubwordSize (optional): maximum length of subwords. defaults to 15. onlyLongestMatch (optional): if true, adds only the longest matching subword to the stream. defaults to false. <fieldType name=\"text_hyphncomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenationCompoundWordTokenFilterFactory\" hyphenator=\"hyphenator.xml\" encoding=\"UTF-8\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"false\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html",
    "title": "Class ByteVector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteVector This class implements a simple byte vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object ByteVector 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.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ByteVector Constructors | Improve this Doc View Source ByteVector() Declaration public ByteVector() | Improve this Doc View Source ByteVector(Byte[]) Declaration public ByteVector(byte[] a) Parameters Type Name Description System.Byte [] a | Improve this Doc View Source ByteVector(Byte[], Int32) Declaration public ByteVector(byte[] a, int capacity) Parameters Type Name Description System.Byte [] a System.Int32 capacity | Improve this Doc View Source ByteVector(Int32) Declaration public ByteVector(int capacity) Parameters Type Name Description System.Int32 capacity Properties | Improve this Doc View Source Array Declaration public virtual byte[] Array { get; } Property Value Type Description System.Byte [] | Improve this Doc View Source Capacity returns current capacity of array Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] LUCENENET indexer for .NET Declaration public virtual byte this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Byte | Improve this Doc View Source Length return number of items in array Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Alloc(Int32) This is to implement memory allocation in the array. Like malloc(). Declaration public virtual int Alloc(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 | Improve this Doc View Source TrimToSize() Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html",
    "title": "Class CharVector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharVector This class implements a simple char vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object CharVector 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.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharVector Constructors | Improve this Doc View Source CharVector() Declaration public CharVector() | Improve this Doc View Source CharVector(Char[]) Declaration public CharVector(char[] a) Parameters Type Name Description System.Char [] a | Improve this Doc View Source CharVector(Char[], Int32) Declaration public CharVector(char[] a, int capacity) Parameters Type Name Description System.Char [] a System.Int32 capacity | Improve this Doc View Source CharVector(Int32) Declaration public CharVector(int capacity) Parameters Type Name Description System.Int32 capacity Properties | Improve this Doc View Source Array Declaration public virtual char[] Array { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Capacity returns current capacity of array Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] LUCENENET indexer for .NET Declaration public virtual char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length return number of items in array Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Alloc(Int32) Declaration public virtual int Alloc(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 | Improve this Doc View Source Clear() Reset Vector but don't resize or clear elements Declaration public virtual void Clear() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source TrimToSize() Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.html",
    "title": "Namespace Lucene.Net.Analysis.Compound.Hyphenation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Compound.Hyphenation <!-- 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. --> The code for the compound word hyphenation is taken from the Apache FOP project . All credits for the hyphenation code belongs to them. Classes ByteVector This class implements a simple byte vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. CharVector This class implements a simple char vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Hyphen This class represents a hyphen. A 'full' hyphen is made of 3 parts: the pre-break text, post-break text and no-break. If no line-break is generated at this position, the no-break text is used, otherwise, pre-break and post-break are used. Typically, pre-break is equal to the hyphen character and the others are empty. However, this general scheme allows support for cases in some languages where words change spelling if they're split across lines, like german's 'backen' which hyphenates 'bak-ken'. BTW, this comes from TeX. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Hyphenation This class represents a hyphenated word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. HyphenationTree This tree structure stores the hyphenation patterns in an efficient way for fast lookup. It provides the provides the method to hyphenate a word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. PatternParser A XMLReader document handler to read and parse hyphenation patterns from a XML file. LUCENENET: This class has been refactored from its Java counterpart to use XmlReader rather than a SAX parser. TernaryTree Ternary Search Tree. A ternary search tree is a hybrid between a binary tree and a digital search tree (trie). Keys are limited to strings. A data value of type char is stored in each leaf node. It can be used as an index (or pointer) to the data. Branches that only contain one key are compressed to one node by storing a pointer to the trailer substring of the key. This class is intended to serve as base class or helper class to implement Dictionary collections or the like. Ternary trees have some nice properties as the following: the tree can be traversed in sorted order, partial matches (wildcard) can be implemented, retrieval of all keys within a given distance from the target, etc. The storage requirements are higher than a binary tree but a lot less than a trie. Performance is comparable with a hash table, sometimes it outperforms a hash function (most of the time can determine a miss faster than a hash). The main purpose of this java port is to serve as a base for implementing TeX's hyphenation algorithm (see The TeXBook, appendix H). Each language requires from 5000 to 15000 hyphenation patterns which will be keys in this tree. The strings patterns are usually small (from 2 to 5 characters), but each char in the tree is stored in a node. Thus memory usage is the main concern. We will sacrifice 'elegance' to keep memory requirements to the minimum. Using java's char type as pointer (yes, I know pointer it is a forbidden word in java) we can keep the size of the node to be just 8 bytes (3 pointers and the data char). This gives room for about 65000 nodes. In my tests the english patterns took 7694 nodes and the german patterns 10055 nodes, so I think we are safe. All said, this is a map with strings as keys and char as value. Pretty limited!. It can be extended to a general map by using the string representation of an object and using the char value as an index to an array that contains the object values. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. TernaryTree.Iterator Enumerator for TernaryTree LUCENENET NOTE: This differs a bit from its Java counterpart to adhere to .NET IEnumerator semantics. In Java, when the TernaryTree.Iterator is instantiated, it is already positioned at the first element. However, to act like a .NET IEnumerator, the initial state is undefined and considered to be before the first element until MoveNext() is called, and if a move took place it will return true ; Interfaces IPatternConsumer This interface is used to connect the XML pattern file parser to the hyphenation tree. This interface has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html",
    "title": "Class Hyphen | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Hyphen This class represents a hyphen. A 'full' hyphen is made of 3 parts: the pre-break text, post-break text and no-break. If no line-break is generated at this position, the no-break text is used, otherwise, pre-break and post-break are used. Typically, pre-break is equal to the hyphen character and the others are empty. However, this general scheme allows support for cases in some languages where words change spelling if they're split across lines, like german's 'backen' which hyphenates 'bak-ken'. BTW, this comes from TeX. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object Hyphen 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) Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Hyphen Properties | Improve this Doc View Source NoBreak Declaration public string NoBreak { get; set; } Property Value Type Description System.String | Improve this Doc View Source PostBreak Declaration public string PostBreak { get; set; } Property Value Type Description System.String | Improve this Doc View Source PreBreak Declaration public string PreBreak { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html",
    "title": "Class Hyphenation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Hyphenation This class represents a hyphenated word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object Hyphenation 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.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Hyphenation Properties | Improve this Doc View Source HyphenationPoints the hyphenation points Declaration public virtual int[] HyphenationPoints { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Length the number of hyphenation points in the word Declaration public virtual int Length { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html",
    "title": "Class HyphenationTree | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HyphenationTree This tree structure stores the hyphenation patterns in an efficient way for fast lookup. It provides the provides the method to hyphenate a word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object TernaryTree HyphenationTree Implements IPatternConsumer Inherited Members TernaryTree.m_lo TernaryTree.m_hi TernaryTree.m_eq TernaryTree.m_sc TernaryTree.m_kv TernaryTree.m_root TernaryTree.m_freenode TernaryTree.m_length TernaryTree.BLOCK_SIZE TernaryTree.Init() TernaryTree.Insert(String, Char) TernaryTree.Insert(Char[], Int32, Char) TernaryTree.StrCmp(Char[], Int32, Char[], Int32) TernaryTree.StrCmp(String, Char[], Int32) TernaryTree.StrCpy(Char[], Int32, Char[], Int32) TernaryTree.StrLen(Char[], Int32) TernaryTree.StrLen(Char[]) TernaryTree.Find(String) TernaryTree.Find(Char[], Int32) TernaryTree.Knows(String) TernaryTree.Length TernaryTree.Clone() TernaryTree.InsertBalanced(String[], Char[], Int32, Int32) TernaryTree.Balance() TernaryTree.TrimToSize() TernaryTree.Keys() TernaryTree.PrintStats(TextWriter) 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.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenationTree : TernaryTree, IPatternConsumer Constructors | Improve this Doc View Source HyphenationTree() Declaration public HyphenationTree() Fields | Improve this Doc View Source m_classmap This map stores the character classes Declaration protected TernaryTree m_classmap Field Value Type Description TernaryTree | Improve this Doc View Source m_stoplist This map stores hyphenation exceptions Declaration protected IDictionary<string, IList<object>> m_stoplist Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.Object >> | Improve this Doc View Source m_vspace value space: stores the interletter values Declaration protected ByteVector m_vspace Field Value Type Description ByteVector Methods | Improve this Doc View Source AddClass(String) Add a character class to the tree. It is used by PatternParser as callback to add character classes. Character classes define the valid word characters for hyphenation. If a word contains a character not defined in any of the classes, it is not hyphenated. It also defines a way to normalize the characters in order to compare them with the stored patterns. Usually pattern files use only lower case characters, in this case a class for letter 'a', for example, should be defined as \"aA\", the first character being the normalization char. Declaration public virtual void AddClass(string chargroup) Parameters Type Name Description System.String chargroup | Improve this Doc View Source AddException(String, IList<Object>) Add an exception to the tree. It is used by PatternParser class as callback to store the hyphenation exceptions. Declaration public virtual void AddException(string word, IList<object> hyphenatedword) Parameters Type Name Description System.String word normalized word System.Collections.Generic.IList < System.Object > hyphenatedword a vector of alternating strings and Hyphen objects. | Improve this Doc View Source AddPattern(String, String) Add a pattern to the tree. Mainly, to be used by PatternParser class as callback to add a pattern to the tree. Declaration public virtual void AddPattern(string pattern, string ivalue) Parameters Type Name Description System.String pattern the hyphenation pattern System.String ivalue interletter weight values indicating the desirability and priority of hyphenating at a given point within the pattern. It should contain only digit characters. (i.e. '0' to '9'). | Improve this Doc View Source FindPattern(String) Declaration public virtual string FindPattern(string pat) Parameters Type Name Description System.String pat Returns Type Description System.String | Improve this Doc View Source GetValues(Int32) Declaration protected virtual byte[] GetValues(int k) Parameters Type Name Description System.Int32 k Returns Type Description System.Byte [] | Improve this Doc View Source HStrCmp(Char[], Int32, Char[], Int32) String compare, returns 0 if equal or t is a substring of s Declaration protected virtual int HStrCmp(char[] s, int si, char[] t, int ti) Parameters Type Name Description System.Char [] s System.Int32 si System.Char [] t System.Int32 ti Returns Type Description System.Int32 | Improve this Doc View Source Hyphenate(Char[], Int32, Int32, Int32, Int32) Hyphenate word and return an array of hyphenation points. Declaration public virtual Hyphenation Hyphenate(char[] w, int offset, int len, int remainCharCount, int pushCharCount) Parameters Type Name Description System.Char [] w char array that contains the word System.Int32 offset Offset to first character in word System.Int32 len Length of word System.Int32 remainCharCount Minimum number of characters allowed before the hyphenation point. System.Int32 pushCharCount Minimum number of characters allowed after the hyphenation point. Returns Type Description Hyphenation a Hyphenation object representing the hyphenated word or null if word is not hyphenated. Remarks w = \"* nnllllllnnn \", where n is a non-letter, l is a letter, all n may be absent, the first n is at offset, the first l is at offset + iIgnoreAtBeginning; word = \".llllll.'\\0' *\", where all l in w are copied into word. In the first part of the routine len = w.length, in the second part of the routine len = word.length. Three indices are used: index(w), the index in w, index(word), the index in word, letterindex(word), the index in the letter part of word. The following relations exist: index(w) = offset + i - 1 index(word) = i - iIgnoreAtBeginning letterindex(word) = index(word) - 1 (see first loop). It follows that: index(w) - index(word) = offset - 1 + iIgnoreAtBeginning index(w) = letterindex(word) + offset + iIgnoreAtBeginning | Improve this Doc View Source Hyphenate(String, Int32, Int32) Hyphenate word and return a Hyphenation object. Declaration public virtual Hyphenation Hyphenate(string word, int remainCharCount, int pushCharCount) Parameters Type Name Description System.String word the word to be hyphenated System.Int32 remainCharCount Minimum number of characters allowed before the hyphenation point. System.Int32 pushCharCount Minimum number of characters allowed after the hyphenation point. Returns Type Description Hyphenation a Hyphenation object representing the hyphenated word or null if word is not hyphenated. | Improve this Doc View Source LoadPatterns(FileInfo) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(FileInfo f) Parameters Type Name Description System.IO.FileInfo f a System.IO.FileInfo object representing the file Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(FileInfo, Encoding) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(FileInfo f, Encoding encoding) Parameters Type Name Description System.IO.FileInfo f a System.IO.FileInfo object representing the file System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(Stream) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(Stream source) Parameters Type Name Description System.IO.Stream source System.IO.Stream input source for the file Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(Stream, Encoding) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(Stream source, Encoding encoding) Parameters Type Name Description System.IO.Stream source System.IO.Stream input source for the file System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(String) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(string filename) Parameters Type Name Description System.String filename the filename Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(String, Encoding) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(string filename, Encoding encoding) Parameters Type Name Description System.String filename the filename System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(XmlReader) Read hyphenation patterns from an System.Xml.XmlReader . Declaration public virtual void LoadPatterns(XmlReader source) Parameters Type Name Description System.Xml.XmlReader source System.Xml.XmlReader input source for the file Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source PackValues(String) Packs the values by storing them in 4 bits, two values into a byte Values range is from 0 to 9. We use zero as terminator, so we'll add 1 to the value. Declaration protected virtual int PackValues(string values) Parameters Type Name Description System.String values a string of digits from '0' to '9' representing the interletter values. Returns Type Description System.Int32 the index into the vspace array where the packed values are stored. | Improve this Doc View Source SearchPatterns(Char[], Int32, Byte[]) Search for all possible partial matches of word starting at index an update interletter values. In other words, it does something like: for (i=0; i<patterns.Length; i++) { if (word.Substring(index).StartsWith(patterns[i], StringComparison.Ordinal)) update_interletter_values(patterns[i]); } But it is done in an efficient way since the patterns are stored in a ternary tree. In fact, this is the whole purpose of having the tree: doing this search without having to test every single pattern. The number of patterns for languages such as English range from 4000 to 10000. Thus, doing thousands of string comparisons for each word to hyphenate would be really slow without the tree. The tradeoff is memory, but using a ternary tree instead of a trie, almost halves the the memory used by Lout or TeX. It's also faster than using a hash table Declaration protected virtual void SearchPatterns(char[] word, int index, byte[] il) Parameters Type Name Description System.Char [] word null terminated word to match System.Int32 index start index from word System.Byte [] il interletter values array to update | Improve this Doc View Source UnpackValues(Int32) Declaration protected virtual string UnpackValues(int k) Parameters Type Name Description System.Int32 k Returns Type Description System.String Implements IPatternConsumer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html",
    "title": "Interface IPatternConsumer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPatternConsumer This interface is used to connect the XML pattern file parser to the hyphenation tree. This interface has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IPatternConsumer Methods | Improve this Doc View Source AddClass(String) Add a character class. A character class defines characters that are considered equivalent for the purpose of hyphenation (e.g. \"aA\"). It usually means to ignore case. Declaration void AddClass(string chargroup) Parameters Type Name Description System.String chargroup character group | Improve this Doc View Source AddException(String, IList<Object>) Add a hyphenation exception. An exception replaces the result obtained by the algorithm for cases for which this fails or the user wants to provide his own hyphenation. A hyphenatedword is a vector of alternating String's and Hyphen instances Declaration void AddException(string word, IList<object> hyphenatedword) Parameters Type Name Description System.String word System.Collections.Generic.IList < System.Object > hyphenatedword | Improve this Doc View Source AddPattern(String, String) Add hyphenation patterns. Declaration void AddPattern(string pattern, string values) Parameters Type Name Description System.String pattern the pattern System.String values interletter values expressed as a string of digit characters."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html",
    "title": "Class PatternParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternParser A XMLReader document handler to read and parse hyphenation patterns from a XML file. LUCENENET: This class has been refactored from its Java counterpart to use XmlReader rather than a SAX parser. Inheritance System.Object PatternParser 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.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternParser Constructors | Improve this Doc View Source PatternParser() Declaration public PatternParser() | Improve this Doc View Source PatternParser(IPatternConsumer) Declaration public PatternParser(IPatternConsumer consumer) Parameters Type Name Description IPatternConsumer consumer Properties | Improve this Doc View Source Consumer Declaration public virtual IPatternConsumer Consumer { get; set; } Property Value Type Description IPatternConsumer Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Receive notification of character data. The Parser will call this method to report each chunk of character data. Parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information. The application must not attempt to read from the array outside of the specified range. Declaration public virtual void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source EndElement(String, String, String) Receive notification of the end of an element. The parser will invoke this method at the end of every element in the XML document; there will be a corresponding StartElement(String, String, String, IDictionary<String, String>) event for every EndElement(String, String, String) event (even when the element is empty). Declaration public virtual void EndElement(string uri, string local, string raw) Parameters Type Name Description System.String uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String local the local name (without prefix), or the empty string if Namespace processing is not being performed System.String raw | Improve this Doc View Source GetExceptionWord<T1>(IList<T1>) Declaration protected virtual string GetExceptionWord<T1>(IList<T1> ex) Parameters Type Name Description System.Collections.Generic.IList <T1> ex Returns Type Description System.String Type Parameters Name Description T1 | Improve this Doc View Source GetInterletterValues(String) Declaration protected static string GetInterletterValues(string pat) Parameters Type Name Description System.String pat Returns Type Description System.String | Improve this Doc View Source GetPattern(String) Declaration protected static string GetPattern(string word) Parameters Type Name Description System.String word Returns Type Description System.String | Improve this Doc View Source NormalizeException<T1>(IList<T1>) Declaration protected virtual IList<object> NormalizeException<T1>(IList<T1> ex) Parameters Type Name Description System.Collections.Generic.IList <T1> ex Returns Type Description System.Collections.Generic.IList < System.Object > Type Parameters Name Description T1 | Improve this Doc View Source Parse(FileInfo) Parses a hyphenation pattern file. Declaration public virtual void Parse(FileInfo file) Parameters Type Name Description System.IO.FileInfo file a System.IO.FileInfo object representing the file Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(FileInfo, Encoding) Parses a hyphenation pattern file. Declaration public virtual void Parse(FileInfo file, Encoding encoding) Parameters Type Name Description System.IO.FileInfo file a System.IO.FileInfo object representing the file System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(Stream) Parses a hyphenation pattern file. Declaration public virtual void Parse(Stream xmlStream) Parameters Type Name Description System.IO.Stream xmlStream The stream containing the XML data. The PatternParser scans the first bytes of the stream looking for a byte order mark or other sign of encoding. When encoding is determined, the encoding is used to continue reading the stream, and processing continues parsing the input as a stream of (Unicode) characters. Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(String) Parses a hyphenation pattern file. Declaration public virtual void Parse(string path) Parameters Type Name Description System.String path The complete file path to be read. Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(String, Encoding) Parses a hyphenation pattern file. Declaration public virtual void Parse(string path, Encoding encoding) Parameters Type Name Description System.String path The complete file path to be read. System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(XmlReader) Parses a hyphenation pattern file. Declaration public virtual void Parse(XmlReader source) Parameters Type Name Description System.Xml.XmlReader source System.Xml.XmlReader input source for the file Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source ReadToken(StringBuilder) Declaration protected virtual string ReadToken(StringBuilder chars) Parameters Type Name Description System.Text.StringBuilder chars Returns Type Description System.String | Improve this Doc View Source StartElement(String, String, String, IDictionary<String, String>) Receive notification of the beginning of an element. The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding EndElement(String, String, String) event for every StartElement(String, String, String, IDictionary<String, String>) event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding endElement event. Declaration public virtual void StartElement(string uri, string local, string raw, IDictionary<string, string> attrs) Parameters Type Name Description System.String uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String local the local name (without prefix), or the empty string if Namespace processing is not being performed System.String raw System.Collections.Generic.IDictionary < System.String , System.String > attrs the attributes attached to the element. If there are no attributes, it shall be an empty Attributes object. The value of this object after startElement returns is undefined"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html",
    "title": "Class TernaryTree | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TernaryTree Ternary Search Tree. A ternary search tree is a hybrid between a binary tree and a digital search tree (trie). Keys are limited to strings. A data value of type char is stored in each leaf node. It can be used as an index (or pointer) to the data. Branches that only contain one key are compressed to one node by storing a pointer to the trailer substring of the key. This class is intended to serve as base class or helper class to implement Dictionary collections or the like. Ternary trees have some nice properties as the following: the tree can be traversed in sorted order, partial matches (wildcard) can be implemented, retrieval of all keys within a given distance from the target, etc. The storage requirements are higher than a binary tree but a lot less than a trie. Performance is comparable with a hash table, sometimes it outperforms a hash function (most of the time can determine a miss faster than a hash). The main purpose of this java port is to serve as a base for implementing TeX's hyphenation algorithm (see The TeXBook, appendix H). Each language requires from 5000 to 15000 hyphenation patterns which will be keys in this tree. The strings patterns are usually small (from 2 to 5 characters), but each char in the tree is stored in a node. Thus memory usage is the main concern. We will sacrifice 'elegance' to keep memory requirements to the minimum. Using java's char type as pointer (yes, I know pointer it is a forbidden word in java) we can keep the size of the node to be just 8 bytes (3 pointers and the data char). This gives room for about 65000 nodes. In my tests the english patterns took 7694 nodes and the german patterns 10055 nodes, so I think we are safe. All said, this is a map with strings as keys and char as value. Pretty limited!. It can be extended to a general map by using the string representation of an object and using the char value as an index to an array that contains the object values. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object TernaryTree HyphenationTree 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.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TernaryTree Fields | Improve this Doc View Source BLOCK_SIZE Declaration protected const int BLOCK_SIZE = 2048 Field Value Type Description System.Int32 | Improve this Doc View Source m_eq Pointer to equal branch and to data when this node is a string terminator. Declaration protected char[] m_eq Field Value Type Description System.Char [] | Improve this Doc View Source m_freenode Declaration protected char m_freenode Field Value Type Description System.Char | Improve this Doc View Source m_hi Pointer to high branch. Declaration protected char[] m_hi Field Value Type Description System.Char [] | Improve this Doc View Source m_kv This vector holds the trailing of the keys when the branch is compressed. Declaration protected CharVector m_kv Field Value Type Description CharVector | Improve this Doc View Source m_length Declaration protected int m_length Field Value Type Description System.Int32 | Improve this Doc View Source m_lo Pointer to low branch and to rest of the key when it is stored directly in this node, we don't have unions in java! Declaration protected char[] m_lo Field Value Type Description System.Char [] | Improve this Doc View Source m_root Declaration protected char m_root Field Value Type Description System.Char | Improve this Doc View Source m_sc The character stored in this node: splitchar. Two special values are reserved: 0x0000 as string terminator 0xFFFF to indicate that the branch starting at this node is compressed This shouldn't be a problem if we give the usual semantics to strings since 0xFFFF is guaranteed not to be an Unicode character. Declaration protected char[] m_sc Field Value Type Description System.Char [] Properties | Improve this Doc View Source Length Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Balance() Balance the tree for best search performance Declaration public virtual void Balance() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Find(Char[], Int32) Declaration public virtual int Find(char[] key, int start) Parameters Type Name Description System.Char [] key System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source Find(String) Declaration public virtual int Find(string key) Parameters Type Name Description System.String key Returns Type Description System.Int32 | Improve this Doc View Source Init() Declaration protected virtual void Init() | Improve this Doc View Source Insert(Char[], Int32, Char) Declaration public virtual void Insert(char[] key, int start, char val) Parameters Type Name Description System.Char [] key System.Int32 start System.Char val | Improve this Doc View Source Insert(String, Char) Branches are initially compressed, needing one node per key plus the size of the string key. They are decompressed as needed when another key with same prefix is inserted. This saves a lot of space, specially for long keys. Declaration public virtual void Insert(string key, char val) Parameters Type Name Description System.String key System.Char val | Improve this Doc View Source InsertBalanced(String[], Char[], Int32, Int32) Recursively insert the median first and then the median of the lower and upper halves, and so on in order to get a balanced tree. The array of keys is assumed to be sorted in ascending order. Declaration protected virtual void InsertBalanced(string[] k, char[] v, int offset, int n) Parameters Type Name Description System.String [] k System.Char [] v System.Int32 offset System.Int32 n | Improve this Doc View Source Keys() Declaration public virtual IEnumerator<string> Keys() Returns Type Description System.Collections.Generic.IEnumerator < System.String > | Improve this Doc View Source Knows(String) Declaration public virtual bool Knows(string key) Parameters Type Name Description System.String key Returns Type Description System.Boolean | Improve this Doc View Source PrintStats(TextWriter) Declaration public virtual void PrintStats(TextWriter out) Parameters Type Name Description System.IO.TextWriter out | Improve this Doc View Source StrCmp(Char[], Int32, Char[], Int32) Compares 2 null terminated char arrays Declaration public static int StrCmp(char[] a, int startA, char[] b, int startB) Parameters Type Name Description System.Char [] a System.Int32 startA System.Char [] b System.Int32 startB Returns Type Description System.Int32 | Improve this Doc View Source StrCmp(String, Char[], Int32) Compares a string with null terminated char array Declaration public static int StrCmp(string str, char[] a, int start) Parameters Type Name Description System.String str System.Char [] a System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source StrCpy(Char[], Int32, Char[], Int32) Declaration public static void StrCpy(char[] dst, int di, char[] src, int si) Parameters Type Name Description System.Char [] dst System.Int32 di System.Char [] src System.Int32 si | Improve this Doc View Source StrLen(Char[]) Declaration public static int StrLen(char[] a) Parameters Type Name Description System.Char [] a Returns Type Description System.Int32 | Improve this Doc View Source StrLen(Char[], Int32) Declaration public static int StrLen(char[] a, int start) Parameters Type Name Description System.Char [] a System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source TrimToSize() Each node stores a character (splitchar) which is part of some key(s). In a compressed branch (one that only contain a single string key) the trailer of the key which is not already in nodes is stored externally in the kv array. As items are inserted, key substrings decrease. Some substrings may completely disappear when the whole branch is totally decompressed. The tree is traversed to find the key substrings actually used. In addition, duplicate substrings are removed using a map (implemented with a TernaryTree!). Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html",
    "title": "Class TernaryTree.Iterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TernaryTree.Iterator Enumerator for TernaryTree LUCENENET NOTE: This differs a bit from its Java counterpart to adhere to .NET IEnumerator semantics. In Java, when the TernaryTree.Iterator is instantiated, it is already positioned at the first element. However, to act like a .NET IEnumerator, the initial state is undefined and considered to be before the first element until MoveNext() is called, and if a move took place it will return true ; Inheritance System.Object TernaryTree.Iterator Implements System.Collections.Generic.IEnumerator < System.String > System.Collections.IEnumerator 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.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Iterator : IEnumerator<string>, IEnumerator, IDisposable Constructors | Improve this Doc View Source Iterator(TernaryTree) Declaration public Iterator(TernaryTree outerInstance) Parameters Type Name Description TernaryTree outerInstance Properties | Improve this Doc View Source Current Declaration public string Current { get; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual char Value { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset() | Improve this Doc View Source Rewind() Declaration public virtual void Rewind() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html",
    "title": "Class HyphenationCompoundWordTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HyphenationCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a hyphenation grammar and a word dictionary to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase HyphenationCompoundWordTokenFilter Implements System.IDisposable Inherited Members CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE CompoundWordTokenFilterBase.m_matchVersion CompoundWordTokenFilterBase.m_dictionary CompoundWordTokenFilterBase.m_tokens CompoundWordTokenFilterBase.m_minWordSize CompoundWordTokenFilterBase.m_minSubwordSize CompoundWordTokenFilterBase.m_maxSubwordSize CompoundWordTokenFilterBase.m_onlyLongestMatch CompoundWordTokenFilterBase.m_termAtt CompoundWordTokenFilterBase.m_offsetAtt CompoundWordTokenFilterBase.IncrementToken() CompoundWordTokenFilterBase.Reset() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenationCompoundWordTokenFilter : CompoundWordTokenFilterBase, IDisposable Constructors | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree) Create a HyphenationCompoundWordTokenFilter with no dictionary. Calls HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, Int32, Int32, Int32) Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator) Parameters Type Name Description LuceneVersion matchVersion TokenStream input HyphenationTree hyphenator | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet) Creates a new HyphenationCompoundWordTokenFilter instance. Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process HyphenationTree hyphenator the hyphenation pattern tree to use for hyphenation CharArraySet dictionary the word dictionary to match against. | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet, Int32, Int32, Int32, Boolean) Creates a new HyphenationCompoundWordTokenFilter instance. Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process HyphenationTree hyphenator the hyphenation pattern tree to use for hyphenation CharArraySet dictionary the word dictionary to match against. System.Int32 minWordSize only words longer than this get processed System.Int32 minSubwordSize only subwords longer than this get to the output stream System.Int32 maxSubwordSize only subwords shorter than this get to the output stream System.Boolean onlyLongestMatch Add only the longest matching subword to the stream | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, Int32, Int32, Int32) Create a HyphenationCompoundWordTokenFilter with no dictionary. Calls HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet, Int32, Int32, Int32, Boolean) Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, int minWordSize, int minSubwordSize, int maxSubwordSize) Parameters Type Name Description LuceneVersion matchVersion TokenStream input HyphenationTree hyphenator System.Int32 minWordSize System.Int32 minSubwordSize System.Int32 maxSubwordSize Methods | Improve this Doc View Source Decompose() Declaration protected override void Decompose() Overrides CompoundWordTokenFilterBase.Decompose() | Improve this Doc View Source GetHyphenationTree(FileInfo) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(FileInfo hyphenationFile) Parameters Type Name Description System.IO.FileInfo hyphenationFile the file of the XML grammar to load Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(FileInfo, Encoding) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(FileInfo hyphenationFile, Encoding encoding) Parameters Type Name Description System.IO.FileInfo hyphenationFile the file of the XML grammar to load System.Text.Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(Stream) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(Stream hyphenationSource) Parameters Type Name Description System.IO.Stream hyphenationSource the InputSource pointing to the XML grammar Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(Stream, Encoding) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(Stream hyphenationSource, Encoding encoding) Parameters Type Name Description System.IO.Stream hyphenationSource the InputSource pointing to the XML grammar System.Text.Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(String) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(string hyphenationFilename) Parameters Type Name Description System.String hyphenationFilename the filename of the XML grammar to load Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(String, Encoding) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(string hyphenationFilename, Encoding encoding) Parameters Type Name Description System.String hyphenationFilename the filename of the XML grammar to load System.Text.Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html",
    "title": "Class HyphenationCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HyphenationCompoundWordTokenFilterFactory Factory for HyphenationCompoundWordTokenFilter . This factory accepts the following parameters: hyphenator (mandatory): path to the FOP xml hyphenation pattern. See http://offo.sourceforge.net/hyphenation/ . encoding (optional): encoding of the xml hyphenation file. defaults to UTF-8. dictionary (optional): dictionary of words. defaults to no dictionary. minWordSize (optional): minimal word length that gets decomposed. defaults to 5. minSubwordSize (optional): minimum length of subwords. defaults to 2. maxSubwordSize (optional): maximum length of subwords. defaults to 15. onlyLongestMatch (optional): if true, adds only the longest matching subword to the stream. defaults to false. <fieldType name=\"text_hyphncomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenationCompoundWordTokenFilterFactory\" hyphenator=\"hyphenator.xml\" encoding=\"UTF-8\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HyphenationCompoundWordTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenationCompoundWordTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source HyphenationCompoundWordTokenFilterFactory(IDictionary<String, String>) Creates a new HyphenationCompoundWordTokenFilterFactory Declaration public HyphenationCompoundWordTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware See Also HyphenationCompoundWordTokenFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.html",
    "title": "Namespace Lucene.Net.Analysis.Core | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Core <!-- 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. --> Basic, general-purpose analysis components. Classes KeywordAnalyzer \"Tokenizes\" the entire stream as a single token. This is useful for data like zip codes, ids, and some product names. KeywordTokenizer Emits the entire input as a single token. KeywordTokenizerFactory Factory for KeywordTokenizer . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> LetterTokenizer A LetterTokenizer is a tokenizer that divides text at non-letters. That's to say, it defines tokens as maximal strings of adjacent letters, as defined by System.Char.IsLetter(System.Char) predicate. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LetterTokenizer : As of 3.1, CharTokenizer uses an System.Int32 based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. LetterTokenizerFactory Factory for LetterTokenizer . <fieldType name=\"text_letter\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LetterTokenizerFactory\"/> </analyzer> </fieldType> LowerCaseFilter Normalizes token text to lower case. You must specify the required LuceneVersion compatibility when creating LowerCaseFilter: As of 3.1, supplementary characters are properly lowercased. LowerCaseFilterFactory Factory for LowerCaseFilter . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> </analyzer> </fieldType> LowerCaseTokenizer LowerCaseTokenizer performs the function of LetterTokenizer and LowerCaseFilter together. It divides text at non-letters and converts them to lower case. While it is functionally equivalent to the combination of LetterTokenizer and LowerCaseFilter , there is a performance advantage to doing the two tasks at once, hence this (redundant) implementation. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LowerCaseTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. LowerCaseTokenizerFactory Factory for LowerCaseTokenizer . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LowerCaseTokenizerFactory\"/> </analyzer> </fieldType> SimpleAnalyzer An Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, LowerCaseTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. StopAnalyzer Filters LetterTokenizer with LowerCaseFilter and StopFilter . You must specify the required LuceneVersion compatibility when creating StopAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, position increments are preserved StopFilter Removes stop words from a token stream. You must specify the required LuceneVersion compatibility when creating StopFilter : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords and position increments are preserved StopFilterFactory Factory for StopFilter . <fieldType name=\"text_stop\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"true\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\" words=\"stopwords.txt\" format=\"wordset\" /> </analyzer> </fieldType> All attributes are optional: ignoreCase defaults to false words should be the name of a stopwords file to parse, if not specified the factory will use ENGLISH_STOP_WORDS_SET format defines how the words file will be parsed, and defaults to wordset . If words is not specified, then format must not be specified. The valid values for the format option are: wordset - This is the default format, which supports one word per line (including any intra-word whitespace) and allows whole line comments begining with the \"#\" character. Blank lines are ignored. See GetLines(Stream, Encoding) for details. snowball - This format allows for multiple words specified on each line, and trailing comments may be specified using the vertical line (\"|\"). Blank lines are ignored. See GetSnowballWordSet(TextReader, LuceneVersion) for details. TypeTokenFilter Removes tokens whose types appear in a set of blocked types from a token stream. TypeTokenFilterFactory Factory class for TypeTokenFilter . <fieldType name=\"chars\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TypeTokenFilterFactory\" types=\"stoptypes.txt\" useWhitelist=\"false\"/> </analyzer> </fieldType> UpperCaseFilter Normalizes token text to UPPER CASE. You must specify the required LuceneVersion compatibility when creating UpperCaseFilter NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you Require uppercase tokens. Use the LowerCaseFilter for general search matching UpperCaseFilterFactory Factory for UpperCaseFilter . <fieldType name=\"text_uppercase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.UpperCaseFilterFactory\"/> </analyzer> </fieldType> NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you require uppercase tokens. Use the LowerCaseFilterFactory for general search matching WhitespaceAnalyzer An Analyzer that uses WhitespaceTokenizer . You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, WhitespaceTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. WhitespaceTokenizer A WhitespaceTokenizer is a tokenizer that divides text at whitespace. Adjacent sequences of non-Whitespace characters form tokens. You must specify the required LuceneVersion compatibility when creating WhitespaceTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. WhitespaceTokenizerFactory Factory for WhitespaceTokenizer . <fieldType name=\"text_ws\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordAnalyzer.html",
    "title": "Class KeywordAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordAnalyzer \"Tokenizes\" the entire stream as a single token. This is useful for data like zip codes, ids, and some product names. Inheritance System.Object Analyzer KeywordAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source KeywordAnalyzer() Declaration public KeywordAnalyzer() Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizer.html",
    "title": "Class KeywordTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordTokenizer Emits the entire input as a single token. Inheritance System.Object AttributeSource TokenStream Tokenizer KeywordTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source KeywordTokenizer(AttributeSource.AttributeFactory, TextReader, Int32) Declaration public KeywordTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Int32 bufferSize | Improve this Doc View Source KeywordTokenizer(TextReader) Declaration public KeywordTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source KeywordTokenizer(TextReader, Int32) Declaration public KeywordTokenizer(TextReader input, int bufferSize) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize Fields | Improve this Doc View Source DEFAULT_BUFFER_SIZE Default read buffer size Declaration public const int DEFAULT_BUFFER_SIZE = 256 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html",
    "title": "Class KeywordTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordTokenizerFactory Factory for KeywordTokenizer . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory KeywordTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KeywordTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source KeywordTokenizerFactory(IDictionary<String, String>) Creates a new KeywordTokenizerFactory Declaration public KeywordTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizer.html",
    "title": "Class LetterTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LetterTokenizer A LetterTokenizer is a tokenizer that divides text at non-letters. That's to say, it defines tokens as maximal strings of adjacent letters, as defined by System.Char.IsLetter(System.Char) predicate. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LetterTokenizer : As of 3.1, CharTokenizer uses an System.Int32 based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer LowerCaseTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LetterTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source LetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new LetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public LetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source LetterTokenizer(LuceneVersion, TextReader) Construct a new LetterTokenizer . Declaration public LetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which satisfy J2N.Character.IsLetter(System.Int32) . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizerFactory.html",
    "title": "Class LetterTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LetterTokenizerFactory Factory for LetterTokenizer . <fieldType name=\"text_letter\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LetterTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory LetterTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LetterTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source LetterTokenizerFactory(IDictionary<String, String>) Creates a new LetterTokenizerFactory Declaration public LetterTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilter.html",
    "title": "Class LowerCaseFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LowerCaseFilter Normalizes token text to lower case. You must specify the required LuceneVersion compatibility when creating LowerCaseFilter: As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object AttributeSource TokenStream TokenFilter LowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LowerCaseFilter(LuceneVersion, TokenStream) Create a new LowerCaseFilter , that normalizes token text to lower case. Declaration public LowerCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html",
    "title": "Class LowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LowerCaseFilterFactory Factory for LowerCaseFilter . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source LowerCaseFilterFactory(IDictionary<String, String>) Creates a new LowerCaseFilterFactory Declaration public LowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizer.html",
    "title": "Class LowerCaseTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LowerCaseTokenizer LowerCaseTokenizer performs the function of LetterTokenizer and LowerCaseFilter together. It divides text at non-letters and converts them to lower case. While it is functionally equivalent to the combination of LetterTokenizer and LowerCaseFilter , there is a performance advantage to doing the two tasks at once, hence this (redundant) implementation. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LowerCaseTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer LowerCaseTokenizer Implements System.IDisposable Inherited Members LetterTokenizer.IsTokenChar(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LowerCaseTokenizer : LetterTokenizer, IDisposable Constructors | Improve this Doc View Source LowerCaseTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new LowerCaseTokenizer using a given AttributeSource.AttributeFactory . Declaration public LowerCaseTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source LowerCaseTokenizer(LuceneVersion, TextReader) Construct a new LowerCaseTokenizer . Declaration public LowerCaseTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source Normalize(Int32) Converts char to lower case J2N.Character.ToLower(System.Int32) . Declaration protected override int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 Overrides CharTokenizer.Normalize(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html",
    "title": "Class LowerCaseTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LowerCaseTokenizerFactory Factory for LowerCaseTokenizer . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LowerCaseTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory LowerCaseTokenizerFactory Implements IMultiTermAwareComponent Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LowerCaseTokenizerFactory : TokenizerFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source LowerCaseTokenizerFactory(IDictionary<String, String>) Creates a new LowerCaseTokenizerFactory Declaration public LowerCaseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.SimpleAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.SimpleAnalyzer.html",
    "title": "Class SimpleAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleAnalyzer An Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, LowerCaseTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object Analyzer SimpleAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SimpleAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source SimpleAnalyzer(LuceneVersion) Creates a new SimpleAnalyzer Declaration public SimpleAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopAnalyzer.html",
    "title": "Class StopAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StopAnalyzer Filters LetterTokenizer with LowerCaseFilter and StopFilter . You must specify the required LuceneVersion compatibility when creating StopAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, position increments are preserved Inheritance System.Object Analyzer StopwordAnalyzerBase StopAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StopAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source StopAnalyzer(LuceneVersion) Builds an analyzer which removes words in ENGLISH_STOP_WORDS_SET . Declaration public StopAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion | Improve this Doc View Source StopAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the stop words from the given set. Declaration public StopAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion CharArraySet stopWords Set of stop words | Improve this Doc View Source StopAnalyzer(LuceneVersion, FileInfo) Builds an analyzer with the stop words from the given file. Declaration public StopAnalyzer(LuceneVersion matchVersion, FileInfo stopwordsFile) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion System.IO.FileInfo stopwordsFile File to load stop words from See Also GetWordSet(TextReader, LuceneVersion) | Improve this Doc View Source StopAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public StopAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion System.IO.TextReader stopwords System.IO.TextReader to load stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source ENGLISH_STOP_WORDS_SET An unmodifiable set containing some common English words that are not usually useful for searching. Declaration public static readonly CharArraySet ENGLISH_STOP_WORDS_SET Field Value Type Description CharArraySet Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a LowerCaseTokenizer filtered with StopFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilter.html",
    "title": "Class StopFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StopFilter Removes stop words from a token stream. You must specify the required LuceneVersion compatibility when creating StopFilter : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords and position increments are preserved Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter StopFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StopFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source StopFilter(LuceneVersion, TokenStream, CharArraySet) Constructs a filter which removes words from the input TokenStream that are named in the CharArraySet . Declaration public StopFilter(LuceneVersion matchVersion, TokenStream in, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the stop set if Version > 3.0. See LuceneVersion > for details. TokenStream in Input TokenStream CharArraySet stopWords A CharArraySet representing the stopwords. See Also MakeStopSet(LuceneVersion, String[]) Methods | Improve this Doc View Source Accept() Returns the next input Token whose Term is not a stop word. Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() | Improve this Doc View Source MakeStopSet(LuceneVersion, String[]) Builds a CharArraySet from an array of stop words, appropriate for passing into the StopFilter constructor. This permits this stopWords construction to be cached once when an Analyzer is constructed. Declaration public static CharArraySet MakeStopSet(LuceneVersion matchVersion, params string[] stopWords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.String [] stopWords An array of stopwords Returns Type Description CharArraySet See Also MakeStopSet(LuceneVersion, String[], Boolean) | Improve this Doc View Source MakeStopSet(LuceneVersion, String[], Boolean) Creates a stopword set from the given stopword array. Declaration public static CharArraySet MakeStopSet(LuceneVersion matchVersion, string[] stopWords, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.String [] stopWords An array of stopwords System.Boolean ignoreCase If true, all words are lower cased first. Returns Type Description CharArraySet a Set ( CharArraySet ) containing the words | Improve this Doc View Source MakeStopSet<T1>(LuceneVersion, IList<T1>) Builds a CharArraySet from an array of stop words, appropriate for passing into the StopFilter constructor. This permits this stopWords construction to be cached once when an Analyzer is constructed. Declaration public static CharArraySet MakeStopSet<T1>(LuceneVersion matchVersion, IList<T1> stopWords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.Collections.Generic.IList <T1> stopWords A List of System.String s or char[] or any other ToString()-able list representing the stopwords Returns Type Description CharArraySet A Set ( CharArraySet ) containing the words Type Parameters Name Description T1 See Also MakeStopSet(LuceneVersion, String[], Boolean) | Improve this Doc View Source MakeStopSet<T1>(LuceneVersion, IList<T1>, Boolean) Creates a stopword set from the given stopword list. Declaration public static CharArraySet MakeStopSet<T1>(LuceneVersion matchVersion, IList<T1> stopWords, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.Collections.Generic.IList <T1> stopWords A List of System.String s or char[] or any other ToString()-able list representing the stopwords System.Boolean ignoreCase if true, all words are lower cased first Returns Type Description CharArraySet A Set ( CharArraySet ) containing the words Type Parameters Name Description T1 Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilterFactory.html",
    "title": "Class StopFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StopFilterFactory Factory for StopFilter . <fieldType name=\"text_stop\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"true\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\" words=\"stopwords.txt\" format=\"wordset\" /> </analyzer> </fieldType> All attributes are optional: ignoreCase defaults to false words should be the name of a stopwords file to parse, if not specified the factory will use ENGLISH_STOP_WORDS_SET format defines how the words file will be parsed, and defaults to wordset . If words is not specified, then format must not be specified. The valid values for the format option are: wordset - This is the default format, which supports one word per line (including any intra-word whitespace) and allows whole line comments begining with the \"#\" character. Blank lines are ignored. See GetLines(Stream, Encoding) for details. snowball - This format allows for multiple words specified on each line, and trailing comments may be specified using the vertical line (\"|\"). Blank lines are ignored. See GetSnowballWordSet(TextReader, LuceneVersion) for details. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StopFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StopFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source StopFilterFactory(IDictionary<String, String>) Creates a new StopFilterFactory Declaration public StopFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source FORMAT_SNOWBALL Declaration public const string FORMAT_SNOWBALL = \"snowball\" Field Value Type Description System.String | Improve this Doc View Source FORMAT_WORDSET Declaration public const string FORMAT_WORDSET = \"wordset\" Field Value Type Description System.String Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StopWords Declaration public virtual CharArraySet StopWords { get; } Property Value Type Description CharArraySet Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilter.html",
    "title": "Class TypeTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TypeTokenFilter Removes tokens whose types appear in a set of blocked types from a token stream. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter TypeTokenFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TypeTokenFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>) Create a new TypeTokenFilter that filters tokens out (useWhiteList=false). Declaration public TypeTokenFilter(LuceneVersion version, TokenStream input, ICollection<string> stopTypes) Parameters Type Name Description LuceneVersion version TokenStream input System.Collections.Generic.ICollection < System.String > stopTypes See Also TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>, Boolean) | Improve this Doc View Source TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>, Boolean) Create a new TypeTokenFilter . Declaration public TypeTokenFilter(LuceneVersion version, TokenStream input, ICollection<string> stopTypes, bool useWhiteList) Parameters Type Name Description LuceneVersion version the LuceneVersion match version TokenStream input the TokenStream to consume System.Collections.Generic.ICollection < System.String > stopTypes the types to filter System.Boolean useWhiteList if true, then tokens whose type is in stopTypes will be kept, otherwise they will be filtered out | Improve this Doc View Source TypeTokenFilter(LuceneVersion, Boolean, TokenStream, ICollection<String>) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public TypeTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ICollection<string> stopTypes) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input System.Collections.Generic.ICollection < System.String > stopTypes | Improve this Doc View Source TypeTokenFilter(LuceneVersion, Boolean, TokenStream, ICollection<String>, Boolean) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public TypeTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ICollection<string> stopTypes, bool useWhiteList) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input System.Collections.Generic.ICollection < System.String > stopTypes System.Boolean useWhiteList Methods | Improve this Doc View Source Accept() By default accept the token if its type is not a stop type. When the Lucene.Net.Analysis.Core.TypeTokenFilter.useWhiteList parameter is set to true then accept the token if its type is contained in the Lucene.Net.Analysis.Core.TypeTokenFilter.stopTypes Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html",
    "title": "Class TypeTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TypeTokenFilterFactory Factory class for TypeTokenFilter . <fieldType name=\"chars\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TypeTokenFilterFactory\" types=\"stoptypes.txt\" useWhitelist=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TypeTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TypeTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source TypeTokenFilterFactory(IDictionary<String, String>) Creates a new TypeTokenFilterFactory Declaration public TypeTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StopTypes Declaration public virtual ICollection<string> StopTypes { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilter.html",
    "title": "Class UpperCaseFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UpperCaseFilter Normalizes token text to UPPER CASE. You must specify the required LuceneVersion compatibility when creating UpperCaseFilter NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you Require uppercase tokens. Use the LowerCaseFilter for general search matching Inheritance System.Object AttributeSource TokenStream TokenFilter UpperCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UpperCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source UpperCaseFilter(LuceneVersion, TokenStream) Create a new UpperCaseFilter , that normalizes token text to upper case. Declaration public UpperCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html",
    "title": "Class UpperCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UpperCaseFilterFactory Factory for UpperCaseFilter . <fieldType name=\"text_uppercase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.UpperCaseFilterFactory\"/> </analyzer> </fieldType> NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you require uppercase tokens. Use the LowerCaseFilterFactory for general search matching Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory UpperCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class UpperCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source UpperCaseFilterFactory(IDictionary<String, String>) Creates a new UpperCaseFilterFactory Declaration public UpperCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html",
    "title": "Class WhitespaceAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WhitespaceAnalyzer An Analyzer that uses WhitespaceTokenizer . You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, WhitespaceTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object Analyzer WhitespaceAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WhitespaceAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source WhitespaceAnalyzer(LuceneVersion) Creates a new WhitespaceAnalyzer Declaration public WhitespaceAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizer.html",
    "title": "Class WhitespaceTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WhitespaceTokenizer A WhitespaceTokenizer is a tokenizer that divides text at whitespace. Adjacent sequences of non-Whitespace characters form tokens. You must specify the required LuceneVersion compatibility when creating WhitespaceTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer WhitespaceTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WhitespaceTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source WhitespaceTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new WhitespaceTokenizer using a given AttributeSource.AttributeFactory . Declaration public WhitespaceTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source WhitespaceTokenizer(LuceneVersion, TextReader) Declaration public WhitespaceTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which do not satisfy System.Char.IsWhiteSpace(System.Char) . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html",
    "title": "Class WhitespaceTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WhitespaceTokenizerFactory Factory for WhitespaceTokenizer . <fieldType name=\"text_ws\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory WhitespaceTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WhitespaceTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source WhitespaceTokenizerFactory(IDictionary<String, String>) Creates a new WhitespaceTokenizerFactory Declaration public WhitespaceTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechAnalyzer.html",
    "title": "Class CzechAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CzechAnalyzer Analyzer for Czech language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating CzechAnalyzer : As of 3.1, words are stemmed with CzechStemFilter As of 2.9, StopFilter preserves position increments As of 2.4, Tokens incorrectly identified as acronyms are corrected (see LUCENE-1068 ) Inheritance System.Object Analyzer StopwordAnalyzerBase CzechAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CzechAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source CzechAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public CzechAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match | Improve this Doc View Source CzechAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public CzechAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match CharArraySet stopwords a stopword set | Improve this Doc View Source CzechAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and a set of work to be excluded from the CzechStemFilter . Declaration public CzechAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match CharArraySet stopwords a stopword set CharArraySet stemExclusionTable a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Czech stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default Czech-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default Czech-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , and CzechStemFilter (only if version is >= LUCENE_31). If a version is >= LUCENE_31 and a stem exclusion set is provided via CzechAnalyzer(LuceneVersion, CharArraySet, CharArraySet) a SetKeywordMarkerFilter is added before CzechStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilter.html",
    "title": "Class CzechStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CzechStemFilter A TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE : Input is expected to be in lowercase, but with diacritical marks Inheritance System.Object AttributeSource TokenStream TokenFilter CzechStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CzechStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CzechStemFilter(TokenStream) Declaration public CzechStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html",
    "title": "Class CzechStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CzechStemFilterFactory Factory for CzechStemFilter . <fieldType name=\"text_czstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CzechStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CzechStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CzechStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CzechStemFilterFactory(IDictionary<String, String>) Creates a new CzechStemFilterFactory Declaration public CzechStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemmer.html",
    "title": "Class CzechStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CzechStemmer Light Stemmer for Czech. Implements the algorithm described in: Indexing and stemming approaches for the Czech language http://portal.acm.org/citation.cfm?id=1598600 Inheritance System.Object CzechStemmer 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.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CzechStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Czech text. NOTE : Input is expected to be in lowercase, but with diacritical marks Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.html",
    "title": "Namespace Lucene.Net.Analysis.Cz | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cz <!-- 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. --> Analyzer for Czech. Classes CzechAnalyzer Analyzer for Czech language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating CzechAnalyzer : As of 3.1, words are stemmed with CzechStemFilter As of 2.9, StopFilter preserves position increments As of 2.4, Tokens incorrectly identified as acronyms are corrected (see LUCENE-1068 ) CzechStemFilter A TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE : Input is expected to be in lowercase, but with diacritical marks CzechStemFilterFactory Factory for CzechStemFilter . <fieldType name=\"text_czstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CzechStemFilterFactory\"/> </analyzer> </fieldType> CzechStemmer Light Stemmer for Czech. Implements the algorithm described in: Indexing and stemming approaches for the Czech language http://portal.acm.org/citation.cfm?id=1598600"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.DanishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.DanishAnalyzer.html",
    "title": "Class DanishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DanishAnalyzer Analyzer for Danish. Inheritance System.Object Analyzer StopwordAnalyzerBase DanishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Da Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DanishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source DanishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public DanishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source DanishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public DanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source DanishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public DanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Danish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"danish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.html",
    "title": "Namespace Lucene.Net.Analysis.Da | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Da <!-- 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. --> Analyzer for Danish. Classes DanishAnalyzer Analyzer for Danish."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanAnalyzer.html",
    "title": "Class GermanAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanAnalyzer Analyzer for German language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase GermanAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source GermanAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DefaultStopSet . Declaration public GermanAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source GermanAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public GermanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source GermanAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public GermanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default German stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"german_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default German-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default German-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, GermanNormalizationFilter and GermanLightStemFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilter.html",
    "title": "Class GermanLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanLightStemFilter A TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanLightStemFilter(TokenStream) Declaration public GermanLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html",
    "title": "Class GermanLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanLightStemFilterFactory Factory for GermanLightStemFilter . <fieldType name=\"text_delgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GermanLightStemFilterFactory(IDictionary<String, String>) Creates a new GermanLightStemFilterFactory Declaration public GermanLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemmer.html",
    "title": "Class GermanLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanLightStemmer Light Stemmer for German. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object GermanLightStemmer 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilter.html",
    "title": "Class GermanMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanMinimalStemFilter A TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanMinimalStemFilter(TokenStream) Declaration public GermanMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html",
    "title": "Class GermanMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanMinimalStemFilterFactory Factory for GermanMinimalStemFilter . <fieldType name=\"text_deminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GermanMinimalStemFilterFactory(IDictionary<String, String>) Creates a new GermanMinimalStemFilterFactory Declaration public GermanMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemmer.html",
    "title": "Class GermanMinimalStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanMinimalStemmer Minimal Stemmer for German. This stemmer implements the following algorithm: Morphologie et recherche d'information Jacques Savoy. Inheritance System.Object GermanMinimalStemmer 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanMinimalStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilter.html",
    "title": "Class GermanNormalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanNormalizationFilter Normalizes German characters according to the heuristics of the http://snowball.tartarus.org/algorithms/german2/stemmer.html German2 snowball algorithm . It allows for the fact that ä, ö and ü are sometimes written as ae, oe and ue. This is useful if you want this normalization without using the German2 stemmer, or perhaps no stemming at all. Inheritance System.Object AttributeSource TokenStream TokenFilter GermanNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanNormalizationFilter(TokenStream) Declaration public GermanNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html",
    "title": "Class GermanNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanNormalizationFilterFactory Factory for GermanNormalizationFilter . <fieldType name=\"text_denorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source GermanNormalizationFilterFactory(IDictionary<String, String>) Creates a new GermanNormalizationFilterFactory Declaration public GermanNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilter.html",
    "title": "Class GermanStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanStemFilter A TokenFilter that stems German words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a GermanStemmer ). To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanStemFilter(TokenStream) Creates a GermanStemFilter instance Declaration public GermanStemFilter(TokenStream in) Parameters Type Name Description TokenStream in the source TokenStream Properties | Improve this Doc View Source Stemmer Set a alternative/custom GermanStemmer for this filter. Declaration public GermanStemmer Stemmer { get; set; } Property Value Type Description GermanStemmer Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Returns true for next token in the stream, or false at EOS Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilterFactory.html",
    "title": "Class GermanStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanStemFilterFactory Factory for GermanStemFilter . <fieldType name=\"text_destem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GermanStemFilterFactory(IDictionary<String, String>) Creates a new GermanStemFilterFactory Declaration public GermanStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanStemmer A stemmer for German words. The algorithm is based on the report \"A Fast and Simple Stemming Algorithm for German Words\" by Jörg Caumanns (joerg.caumanns at isst.fhg.de). Inheritance System.Object GermanStemmer 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.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanStemmer Methods | Improve this Doc View Source Stem(String) Stemms the given term to an unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.html",
    "title": "Namespace Lucene.Net.Analysis.De | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.De <!-- 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. --> Analyzer for German. Classes GermanAnalyzer Analyzer for German language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . GermanLightStemFilter A TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanLightStemFilterFactory Factory for GermanLightStemFilter . <fieldType name=\"text_delgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanLightStemFilterFactory\"/> </analyzer> </fieldType> GermanLightStemmer Light Stemmer for German. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy GermanMinimalStemFilter A TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanMinimalStemFilterFactory Factory for GermanMinimalStemFilter . <fieldType name=\"text_deminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanMinimalStemFilterFactory\"/> </analyzer> </fieldType> GermanMinimalStemmer Minimal Stemmer for German. This stemmer implements the following algorithm: Morphologie et recherche d'information Jacques Savoy. GermanNormalizationFilter Normalizes German characters according to the heuristics of the http://snowball.tartarus.org/algorithms/german2/stemmer.html German2 snowball algorithm . It allows for the fact that ä, ö and ü are sometimes written as ae, oe and ue. This is useful if you want this normalization without using the German2 stemmer, or perhaps no stemming at all. GermanNormalizationFilterFactory Factory for GermanNormalizationFilter . <fieldType name=\"text_denorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanNormalizationFilterFactory\"/> </analyzer> </fieldType> GermanStemFilter A TokenFilter that stems German words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a GermanStemmer ). To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanStemFilterFactory Factory for GermanStemFilter . <fieldType name=\"text_destem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanStemFilterFactory\"/> </analyzer> </fieldType> GermanStemmer A stemmer for German words. The algorithm is based on the report \"A Fast and Simple Stemming Algorithm for German Words\" by Jörg Caumanns (joerg.caumanns at isst.fhg.de)."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekAnalyzer.html",
    "title": "Class GreekAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GreekAnalyzer Analyzer for the Greek language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating GreekAnalyzer : As of 3.1, StandardFilter and GreekStemmer are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase GreekAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source GreekAnalyzer(LuceneVersion) Builds an analyzer with the default stop words. Declaration public GreekAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion | Improve this Doc View Source GreekAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. NOTE: The stopwords set should be pre-processed with the logic of GreekLowerCaseFilter for best results. Declaration public GreekAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Greek stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default Greek-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default Greek-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with GreekLowerCaseFilter , StandardFilter , StopFilter , and GreekStemFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilter.html",
    "title": "Class GreekLowerCaseFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GreekLowerCaseFilter Normalizes token text to lower case, removes some Greek diacritics, and standardizes final sigma to sigma. You must specify the required LuceneVersion compatibility when creating GreekLowerCaseFilter : As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object AttributeSource TokenStream TokenFilter GreekLowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GreekLowerCaseFilter(LuceneVersion, TokenStream) Create a GreekLowerCaseFilter that normalizes Greek token text. Declaration public GreekLowerCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html",
    "title": "Class GreekLowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GreekLowerCaseFilterFactory Factory for GreekLowerCaseFilter . <fieldType name=\"text_glc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GreekLowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GreekLowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source GreekLowerCaseFilterFactory(IDictionary<String, String>) Creates a new GreekLowerCaseFilterFactory Declaration public GreekLowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilter.html",
    "title": "Class GreekStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GreekStemFilter A TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved by using either GreekLowerCaseFilter or ICUFoldingFilter before GreekStemFilter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter GreekStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GreekStemFilter(TokenStream) Declaration public GreekStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilterFactory.html",
    "title": "Class GreekStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GreekStemFilterFactory Factory for GreekStemFilter . <fieldType name=\"text_gstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> <filter class=\"solr.GreekStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GreekStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GreekStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GreekStemFilterFactory(IDictionary<String, String>) Creates a new GreekStemFilterFactory Declaration public GreekStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemmer.html",
    "title": "Class GreekStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GreekStemmer A stemmer for Greek words, according to: Development of a Stemmer for the Greek Language. Georgios Ntais NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved with either GreekLowerCaseFilter or ICUFoldingFilter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object GreekStemmer 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.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GreekStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stems a word contained in a leading portion of a char[] array. The word is passed through a number of rules that modify it's length. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s A char[] array that contains the word to be stemmed. System.Int32 len The length of the char[] array. Returns Type Description System.Int32 The new length of the stemmed word."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.html",
    "title": "Namespace Lucene.Net.Analysis.El | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.El <!-- 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. --> Analyzer for Greek. Classes GreekAnalyzer Analyzer for the Greek language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating GreekAnalyzer : As of 3.1, StandardFilter and GreekStemmer are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . GreekLowerCaseFilter Normalizes token text to lower case, removes some Greek diacritics, and standardizes final sigma to sigma. You must specify the required LuceneVersion compatibility when creating GreekLowerCaseFilter : As of 3.1, supplementary characters are properly lowercased. GreekLowerCaseFilterFactory Factory for GreekLowerCaseFilter . <fieldType name=\"text_glc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> </analyzer> </fieldType> GreekStemFilter A TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved by using either GreekLowerCaseFilter or ICUFoldingFilter before GreekStemFilter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk GreekStemFilterFactory Factory for GreekStemFilter . <fieldType name=\"text_gstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> <filter class=\"solr.GreekStemFilterFactory\"/> </analyzer> </fieldType> GreekStemmer A stemmer for Greek words, according to: Development of a Stemmer for the Greek Language. Georgios Ntais NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved with either GreekLowerCaseFilter or ICUFoldingFilter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishAnalyzer.html",
    "title": "Class EnglishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishAnalyzer Analyzer for English. Inheritance System.Object Analyzer StopwordAnalyzerBase EnglishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source EnglishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DefaultStopSet . Declaration public EnglishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source EnglishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public EnglishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source EnglishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public EnglishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , EnglishPossessiveFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and PorterStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html",
    "title": "Class EnglishMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishMinimalStemFilter A TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter EnglishMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source EnglishMinimalStemFilter(TokenStream) Declaration public EnglishMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html",
    "title": "Class EnglishMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishMinimalStemFilterFactory Factory for EnglishMinimalStemFilter . <fieldType name=\"text_enminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory EnglishMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source EnglishMinimalStemFilterFactory(IDictionary<String, String>) Creates a new EnglishMinimalStemFilterFactory Declaration public EnglishMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemmer.html",
    "title": "Class EnglishMinimalStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishMinimalStemmer Minimal plural stemmer for English. This stemmer implements the \"S-Stemmer\" from How Effective Is Suffixing? Donna Harman. Inheritance System.Object EnglishMinimalStemmer 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.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishMinimalStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilter.html",
    "title": "Class EnglishPossessiveFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishPossessiveFilter TokenFilter that removes possessives (trailing 's) from words. You must specify the required LuceneVersion compatibility when creating EnglishPossessiveFilter : As of 3.6, U+2019 RIGHT SINGLE QUOTATION MARK and U+FF07 FULLWIDTH APOSTROPHE are also treated as quotation marks. Inheritance System.Object AttributeSource TokenStream TokenFilter EnglishPossessiveFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishPossessiveFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source EnglishPossessiveFilter(TokenStream) Declaration [Obsolete(\"Use <see cref=\\\"#EnglishPossessiveFilter(org.apache.lucene.util.Version, org.apache.lucene.analysis.TokenStream)\\\"/> instead.\")] public EnglishPossessiveFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source EnglishPossessiveFilter(LuceneVersion, TokenStream) Declaration public EnglishPossessiveFilter(LuceneVersion version, TokenStream input) Parameters Type Name Description LuceneVersion version TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html",
    "title": "Class EnglishPossessiveFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishPossessiveFilterFactory Factory for EnglishPossessiveFilter . <fieldType name=\"text_enpossessive\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishPossessiveFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory EnglishPossessiveFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishPossessiveFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source EnglishPossessiveFilterFactory(IDictionary<String, String>) Creates a new EnglishPossessiveFilterFactory Declaration public EnglishPossessiveFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.html",
    "title": "Namespace Lucene.Net.Analysis.En | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.En <!-- 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. --> Analyzer for English. Classes EnglishAnalyzer Analyzer for English. EnglishMinimalStemFilter A TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . EnglishMinimalStemFilterFactory Factory for EnglishMinimalStemFilter . <fieldType name=\"text_enminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishMinimalStemFilterFactory\"/> </analyzer> </fieldType> EnglishMinimalStemmer Minimal plural stemmer for English. This stemmer implements the \"S-Stemmer\" from How Effective Is Suffixing? Donna Harman. EnglishPossessiveFilter TokenFilter that removes possessives (trailing 's) from words. You must specify the required LuceneVersion compatibility when creating EnglishPossessiveFilter : As of 3.6, U+2019 RIGHT SINGLE QUOTATION MARK and U+FF07 FULLWIDTH APOSTROPHE are also treated as quotation marks. EnglishPossessiveFilterFactory Factory for EnglishPossessiveFilter . <fieldType name=\"text_enpossessive\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishPossessiveFilterFactory\"/> </analyzer> </fieldType> KStemFilter A high-performance kstem filter for english. See \"Viewing Morphology as an Inference Process\" (Krovetz, R., Proceedings of the Sixteenth Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, 191-203, 1993). All terms must already be lowercased for this filter to work correctly. Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory KStemFilterFactory Factory for KStemFilter . <fieldType name=\"text_kstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.KStemFilterFactory\"/> </analyzer> </fieldType> KStemmer This class implements the Kstem algorithm PorterStemFilter Transforms the token stream as per the Porter stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! To use this filter with other analyzers, you'll want to write an Analyzer class that sets up the TokenStream chain as you want it. To use this with LowerCaseTokenizer, for example, you'd write an analyzer like this: class MyAnalyzer : Analyzer { protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) { Tokenizer source = new LowerCaseTokenizer(version, reader); return new TokenStreamComponents(source, new PorterStemFilter(source)); } } Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory PorterStemFilterFactory Factory for PorterStemFilter . <fieldType name=\"text_porterstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PorterStemFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilter.html",
    "title": "Class KStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KStemFilter A high-performance kstem filter for english. See \"Viewing Morphology as an Inference Process\" (Krovetz, R., Proceedings of the Sixteenth Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, 191-203, 1993). All terms must already be lowercased for this filter to work correctly. Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter KStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KStemFilter(TokenStream) Declaration public KStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Returns the next, stemmed, input Token. Declaration public override bool IncrementToken() Returns Type Description System.Boolean The stemmed form of a token. Overrides TokenStream.IncrementToken() Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilterFactory.html",
    "title": "Class KStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KStemFilterFactory Factory for KStemFilter . <fieldType name=\"text_kstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.KStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source KStemFilterFactory(IDictionary<String, String>) Creates a new KStemFilterFactory Declaration public KStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemmer.html",
    "title": "Class KStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KStemmer This class implements the Kstem algorithm Inheritance System.Object KStemmer 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.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KStemmer Remarks Title: Kstemmer Description: This is a java version of Bob Krovetz' kstem stemmer Copyright: Copyright 2008, Luicid Imagination, Inc. Copyright: Copyright 2003, CIIR University of Massachusetts Amherst ( http://ciir.cs.umass.edu )"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilter.html",
    "title": "Class PorterStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PorterStemFilter Transforms the token stream as per the Porter stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! To use this filter with other analyzers, you'll want to write an Analyzer class that sets up the TokenStream chain as you want it. To use this with LowerCaseTokenizer, for example, you'd write an analyzer like this: class MyAnalyzer : Analyzer { protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) { Tokenizer source = new LowerCaseTokenizer(version, reader); return new TokenStreamComponents(source, new PorterStemFilter(source)); } } Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter PorterStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PorterStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PorterStemFilter(TokenStream) Declaration public PorterStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilterFactory.html",
    "title": "Class PorterStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PorterStemFilterFactory Factory for PorterStemFilter . <fieldType name=\"text_porterstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PorterStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PorterStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PorterStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PorterStemFilterFactory(IDictionary<String, String>) Creates a new PorterStemFilterFactory Declaration public PorterStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.html",
    "title": "Namespace Lucene.Net.Analysis.Es | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Es <!-- 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. --> Analyzer for Spanish. Classes SpanishAnalyzer Analyzer for Spanish. You must specify the required LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. SpanishLightStemFilter A TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SpanishLightStemFilterFactory Factory for SpanishLightStemFilter . <fieldType name=\"text_eslgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SpanishLightStemFilterFactory\"/> </analyzer> </fieldType> SpanishLightStemmer Light Stemmer for Spanish This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishAnalyzer.html",
    "title": "Class SpanishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanishAnalyzer Analyzer for Spanish. You must specify the required LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. Inheritance System.Object Analyzer StopwordAnalyzerBase SpanishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SpanishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source SpanishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SpanishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SpanishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SpanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SpanishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SpanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Spanish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"spanish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SpanishLightStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilter.html",
    "title": "Class SpanishLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanishLightStemFilter A TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SpanishLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SpanishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SpanishLightStemFilter(TokenStream) Declaration public SpanishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html",
    "title": "Class SpanishLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanishLightStemFilterFactory Factory for SpanishLightStemFilter . <fieldType name=\"text_eslgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SpanishLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SpanishLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SpanishLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SpanishLightStemFilterFactory(IDictionary<String, String>) Creates a new SpanishLightStemFilterFactory Declaration public SpanishLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemmer.html",
    "title": "Class SpanishLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanishLightStemmer Light Stemmer for Spanish This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy Inheritance System.Object SpanishLightStemmer 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.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SpanishLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.BasqueAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.BasqueAnalyzer.html",
    "title": "Class BasqueAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasqueAnalyzer Analyzer for Basque. Inheritance System.Object Analyzer StopwordAnalyzerBase BasqueAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Eu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BasqueAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source BasqueAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public BasqueAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BasqueAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public BasqueAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source BasqueAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public BasqueAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Basque stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.html",
    "title": "Namespace Lucene.Net.Analysis.Eu | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Eu <!-- 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. --> Analyzer for Basque. Classes BasqueAnalyzer Analyzer for Basque."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.html",
    "title": "Namespace Lucene.Net.Analysis.Fa | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fa <!-- 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. --> Analyzer for Persian. Classes PersianAnalyzer Analyzer for Persian. This Analyzer uses PersianCharFilter which implies tokenizing around zero-width non-joiner in addition to whitespace. Some persian-specific variant forms (such as farsi yeh and keheh) are standardized. \"Stemming\" is accomplished via stopwords. PersianCharFilter CharFilter that replaces instances of Zero-width non-joiner with an ordinary space. PersianCharFilterFactory Factory for PersianCharFilter . <fieldType name=\"text_fa\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> </analyzer> </fieldType> PersianNormalizationFilter A TokenFilter that applies PersianNormalizer to normalize the orthography. PersianNormalizationFilterFactory Factory for PersianNormalizationFilter . <fieldType name=\"text_fanormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.PersianNormalizationFilterFactory\"/> </analyzer> </fieldType> PersianNormalizer Normalizer for Persian. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of various heh + hamza forms and heh goal to heh. Normalization of farsi yeh and yeh barree to arabic yeh Normalization of persian keheh to arabic kaf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianAnalyzer.html",
    "title": "Class PersianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PersianAnalyzer Analyzer for Persian. This Analyzer uses PersianCharFilter which implies tokenizing around zero-width non-joiner in addition to whitespace. Some persian-specific variant forms (such as farsi yeh and keheh) are standardized. \"Stemming\" is accomplished via stopwords. Inheritance System.Object Analyzer StopwordAnalyzerBase PersianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PersianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source PersianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PersianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source PersianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public PersianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Persian stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html . The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String | Improve this Doc View Source STOPWORDS_COMMENT The comment character in the stopwords file. All lines prefixed with this will be ignored Declaration public const string STOPWORDS_COMMENT = \"#\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , ArabicNormalizationFilter , PersianNormalizationFilter and Persian Stop words Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source InitReader(String, TextReader) Wraps the System.IO.TextReader with PersianCharFilter Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description System.IO.TextReader Overrides Analyzer.InitReader(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilter.html",
    "title": "Class PersianCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PersianCharFilter CharFilter that replaces instances of Zero-width non-joiner with an ordinary space. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter PersianCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianCharFilter : CharFilter, IDisposable Constructors | Improve this Doc View Source PersianCharFilter(TextReader) Declaration public PersianCharFilter(TextReader in) Parameters Type Name Description System.IO.TextReader in Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html",
    "title": "Class PersianCharFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PersianCharFilterFactory Factory for PersianCharFilter . <fieldType name=\"text_fa\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory PersianCharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianCharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source PersianCharFilterFactory(IDictionary<String, String>) Creates a new PersianCharFilterFactory Declaration public PersianCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html",
    "title": "Class PersianNormalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PersianNormalizationFilter A TokenFilter that applies PersianNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter PersianNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PersianNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PersianNormalizationFilter(TokenStream) Declaration public PersianNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html",
    "title": "Class PersianNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PersianNormalizationFilterFactory Factory for PersianNormalizationFilter . <fieldType name=\"text_fanormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.PersianNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PersianNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source PersianNormalizationFilterFactory(IDictionary<String, String>) Creates a new PersianNormalizationFilterFactory Declaration public PersianNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizer.html",
    "title": "Class PersianNormalizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PersianNormalizer Normalizer for Persian. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of various heh + hamza forms and heh goal to heh. Normalization of farsi yeh and yeh barree to arabic yeh Normalization of persian keheh to arabic kaf Inheritance System.Object PersianNormalizer 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.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianNormalizer Fields | Improve this Doc View Source FARSI_YEH Declaration public const char FARSI_YEH = 'ی' Field Value Type Description System.Char | Improve this Doc View Source HAMZA_ABOVE Declaration public const char HAMZA_ABOVE = 'ٔ' Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = 'ه' Field Value Type Description System.Char | Improve this Doc View Source HEH_GOAL Declaration public const char HEH_GOAL = 'ہ' Field Value Type Description System.Char | Improve this Doc View Source HEH_YEH Declaration public const char HEH_YEH = 'ۀ' Field Value Type Description System.Char | Improve this Doc View Source KAF Declaration public const char KAF = 'ك' Field Value Type Description System.Char | Improve this Doc View Source KEHEH Declaration public const char KEHEH = 'ک' Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = 'ي' Field Value Type Description System.Char | Improve this Doc View Source YEH_BARREE Declaration public const char YEH_BARREE = 'ے' Field Value Type Description System.Char Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Persian text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishAnalyzer.html",
    "title": "Class FinnishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FinnishAnalyzer Analyzer for Finnish. Inheritance System.Object Analyzer StopwordAnalyzerBase FinnishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FinnishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source FinnishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public FinnishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source FinnishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public FinnishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source FinnishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public FinnishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Italian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"finnish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html",
    "title": "Class FinnishLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FinnishLightStemFilter A TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FinnishLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FinnishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FinnishLightStemFilter(TokenStream) Declaration public FinnishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html",
    "title": "Class FinnishLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FinnishLightStemFilterFactory Factory for FinnishLightStemFilter . <fieldType name=\"text_filgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.FinnishLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory FinnishLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FinnishLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source FinnishLightStemFilterFactory(IDictionary<String, String>) Creates a new FinnishLightStemFilterFactory Declaration public FinnishLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemmer.html",
    "title": "Class FinnishLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FinnishLightStemmer Light Stemmer for Finnish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy Inheritance System.Object FinnishLightStemmer 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.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FinnishLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.html",
    "title": "Namespace Lucene.Net.Analysis.Fi | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fi <!-- 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. --> Analyzer for Finnish. Classes FinnishAnalyzer Analyzer for Finnish. FinnishLightStemFilter A TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FinnishLightStemFilterFactory Factory for FinnishLightStemFilter . <fieldType name=\"text_filgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.FinnishLightStemFilterFactory\"/> </analyzer> </fieldType> FinnishLightStemmer Light Stemmer for Finnish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchAnalyzer.html",
    "title": "Class FrenchAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchAnalyzer Analyzer for French language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating FrenchAnalyzer: As of 3.6, FrenchLightStemFilter is used for less aggressive stemming. As of 3.1, Snowball stemming is done with SnowballFilter , LowerCaseFilter is used prior to StopFilter , and ElisionFilter and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase FrenchAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source FrenchAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public FrenchAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source FrenchAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public FrenchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source FrenchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public FrenchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclutionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclutionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_ARTICLES Default set of articles for ElisionFilter Declaration public static readonly CharArraySet DEFAULT_ARTICLES Field Value Type Description CharArraySet | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default French stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"french_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, and FrenchLightStemFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html",
    "title": "Class FrenchLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchLightStemFilter A TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchLightStemFilter(TokenStream) Declaration public FrenchLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html",
    "title": "Class FrenchLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchLightStemFilterFactory Factory for FrenchLightStemFilter . <fieldType name=\"text_frlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory FrenchLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source FrenchLightStemFilterFactory(IDictionary<String, String>) Creates a new FrenchLightStemFilterFactory Declaration public FrenchLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemmer.html",
    "title": "Class FrenchLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchLightStemmer Light Stemmer for French. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object FrenchLightStemmer 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.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html",
    "title": "Class FrenchMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchMinimalStemFilter A TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchMinimalStemFilter(TokenStream) Declaration public FrenchMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html",
    "title": "Class FrenchMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchMinimalStemFilterFactory Factory for FrenchMinimalStemFilter . <fieldType name=\"text_frminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory FrenchMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source FrenchMinimalStemFilterFactory(IDictionary<String, String>) Creates a new FrenchMinimalStemFilterFactory Declaration public FrenchMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html",
    "title": "Class FrenchMinimalStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchMinimalStemmer Light Stemmer for French. This stemmer implements the following algorithm: A Stemming procedure and stopword list for general French corpora. Jacques Savoy. Inheritance System.Object FrenchMinimalStemmer 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.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchMinimalStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemFilter.html",
    "title": "Class FrenchStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchStemFilter A TokenFilter that stems french words. The used stemmer can be changed at runtime after the filter object is created (as long as it is a FrenchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use SnowballFilter with FrenchStemmer instead, which has the same functionality. This filter will be removed in Lucene 5.0\")] public sealed class FrenchStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchStemFilter(TokenStream) Declaration public FrenchStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Properties | Improve this Doc View Source Stemmer Set a alternative/custom FrenchStemmer for this filter. Declaration public FrenchStemmer Stemmer { get; set; } Property Value Type Description FrenchStemmer Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Returns true for the next token in the stream, or false at EOS Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also KeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchStemmer A stemmer for French words. The algorithm is based on the work of Dr Martin Porter on his snowball project refer to http://snowball.sourceforge.net/french/stemmer.html (French stemming algorithm) for details Inheritance System.Object FrenchStemmer 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.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use FrenchStemmer instead, which has the same functionality.\")] public class FrenchStemmer Methods | Improve this Doc View Source Stem(String) Stems the given term to a unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.html",
    "title": "Namespace Lucene.Net.Analysis.Fr | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fr <!-- 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. --> Analyzer for French. Classes FrenchAnalyzer Analyzer for French language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating FrenchAnalyzer: As of 3.6, FrenchLightStemFilter is used for less aggressive stemming. As of 3.1, Snowball stemming is done with SnowballFilter , LowerCaseFilter is used prior to StopFilter , and ElisionFilter and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . FrenchLightStemFilter A TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchLightStemFilterFactory Factory for FrenchLightStemFilter . <fieldType name=\"text_frlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchLightStemFilterFactory\"/> </analyzer> </fieldType> FrenchLightStemmer Light Stemmer for French. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy FrenchMinimalStemFilter A TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchMinimalStemFilterFactory Factory for FrenchMinimalStemFilter . <fieldType name=\"text_frminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchMinimalStemFilterFactory\"/> </analyzer> </fieldType> FrenchMinimalStemmer Light Stemmer for French. This stemmer implements the following algorithm: A Stemming procedure and stopword list for general French corpora. Jacques Savoy. FrenchStemFilter A TokenFilter that stems french words. The used stemmer can be changed at runtime after the filter object is created (as long as it is a FrenchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchStemmer A stemmer for French words. The algorithm is based on the work of Dr Martin Porter on his snowball project refer to http://snowball.sourceforge.net/french/stemmer.html (French stemming algorithm) for details"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.html",
    "title": "Namespace Lucene.Net.Analysis.Ga | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ga <!-- 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. --> Analysis for Irish. Classes IrishAnalyzer Analyzer for Irish. IrishLowerCaseFilter Normalises token text to lower case, handling t-prothesis and n-eclipsis (i.e., that 'nAthair' should become 'n-athair') IrishLowerCaseFilterFactory Factory for IrishLowerCaseFilter . <fieldType name=\"text_ga\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IrishLowerCaseFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishAnalyzer.html",
    "title": "Class IrishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IrishAnalyzer Analyzer for Irish. Inheritance System.Object Analyzer StopwordAnalyzerBase IrishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IrishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source IrishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public IrishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source IrishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public IrishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source IrishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public IrishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Irish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , IrishLowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html",
    "title": "Class IrishLowerCaseFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IrishLowerCaseFilter Normalises token text to lower case, handling t-prothesis and n-eclipsis (i.e., that 'nAthair' should become 'n-athair') Inheritance System.Object AttributeSource TokenStream TokenFilter IrishLowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IrishLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IrishLowerCaseFilter(TokenStream) Create an IrishLowerCaseFilter that normalises Irish token text. Declaration public IrishLowerCaseFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html",
    "title": "Class IrishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IrishLowerCaseFilterFactory Factory for IrishLowerCaseFilter . <fieldType name=\"text_ga\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IrishLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory IrishLowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IrishLowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source IrishLowerCaseFilterFactory(IDictionary<String, String>) Creates a new IrishLowerCaseFilterFactory Declaration public IrishLowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianAnalyzer.html",
    "title": "Class GalicianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GalicianAnalyzer Analyzer for Galician. Inheritance System.Object Analyzer StopwordAnalyzerBase GalicianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source GalicianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public GalicianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source GalicianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public GalicianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source GalicianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public GalicianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Galician stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and GalicianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html",
    "title": "Class GalicianMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GalicianMinimalStemFilter A TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GalicianMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GalicianMinimalStemFilter(TokenStream) Declaration public GalicianMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html",
    "title": "Class GalicianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GalicianMinimalStemFilterFactory Factory for GalicianMinimalStemFilter . <fieldType name=\"text_glplural\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GalicianMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GalicianMinimalStemFilterFactory(IDictionary<String, String>) Creates a new GalicianMinimalStemFilterFactory Declaration public GalicianMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html",
    "title": "Class GalicianMinimalStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GalicianMinimalStemmer Minimal Stemmer for Galician This follows the \"RSLP-S\" algorithm, but modified for Galician. Hence this stemmer only applies the plural reduction step of: \"Regras do lematizador para o galego\" Inheritance System.Object RSLPStemmerBase GalicianMinimalStemmer Inherited Members RSLPStemmerBase.Parse(Type, 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.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianMinimalStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilter.html",
    "title": "Class GalicianStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GalicianStemFilter A TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GalicianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GalicianStemFilter(TokenStream) Declaration public GalicianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html",
    "title": "Class GalicianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GalicianStemFilterFactory Factory for GalicianStemFilter . <fieldType name=\"text_glstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GalicianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GalicianStemFilterFactory(IDictionary<String, String>) Creates a new GalicianStemFilterFactory Declaration public GalicianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemmer.html",
    "title": "Class GalicianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GalicianStemmer Galician stemmer implementing \"Regras do lematizador para o galego\". Inheritance System.Object RSLPStemmerBase GalicianStemmer Inherited Members RSLPStemmerBase.Parse(Type, 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.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s buffer, oversized to at least len+1 System.Int32 len initial valid length of buffer Returns Type Description System.Int32 new valid length, stemmed See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.html",
    "title": "Namespace Lucene.Net.Analysis.Gl | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Gl <!-- 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. --> Analyzer for Galician. Classes GalicianAnalyzer Analyzer for Galician. GalicianMinimalStemFilter A TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GalicianMinimalStemFilterFactory Factory for GalicianMinimalStemFilter . <fieldType name=\"text_glplural\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianMinimalStemFilterFactory\"/> </analyzer> </fieldType> GalicianMinimalStemmer Minimal Stemmer for Galician This follows the \"RSLP-S\" algorithm, but modified for Galician. Hence this stemmer only applies the plural reduction step of: \"Regras do lematizador para o galego\" GalicianStemFilter A TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GalicianStemFilterFactory Factory for GalicianStemFilter . <fieldType name=\"text_glstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianStemFilterFactory\"/> </analyzer> </fieldType> GalicianStemmer Galician stemmer implementing \"Regras do lematizador para o galego\"."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiAnalyzer.html",
    "title": "Class HindiAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HindiAnalyzer Analyzer for Hindi. You must specify the required LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization Inheritance System.Object Analyzer StopwordAnalyzerBase HindiAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source HindiAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public HindiAnalyzer(LuceneVersion version) Parameters Type Name Description LuceneVersion version | Improve this Doc View Source HindiAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public HindiAnalyzer(LuceneVersion version, CharArraySet stopwords) Parameters Type Name Description LuceneVersion version lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source HindiAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public HindiAnalyzer(LuceneVersion version, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion version lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Hindi stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , IndicNormalizationFilter , HindiNormalizationFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, HindiStemFilter , and Hindi Stop words Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html",
    "title": "Class HindiNormalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HindiNormalizationFilter A TokenFilter that applies HindiNormalizer to normalize the orthography. In some cases the normalization may cause unrelated terms to conflate, so to prevent terms from being normalized use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter HindiNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HindiNormalizationFilter(TokenStream) Declaration public HindiNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also HindiNormalizer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html",
    "title": "Class HindiNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HindiNormalizationFilterFactory Factory for HindiNormalizationFilter . <fieldType name=\"text_hinormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HindiNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source HindiNormalizationFilterFactory(IDictionary<String, String>) Creates a new HindiNormalizationFilterFactory Declaration public HindiNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizer.html",
    "title": "Class HindiNormalizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HindiNormalizer Normalizer for Hindi. Normalizes text to remove some differences in spelling variations. Implements the Hindi-language specific algorithm specified in: Word normalization in Indian languages Prasad Pingali and Vasudeva Varma. http://web2py.iiit.ac.in/publications/default/download/inproceedings.pdf.3fe5b38c-02ee-41ce-9a8f-3e745670be32.pdf with the following additions from Hindi CLIR in Thirty Days Leah S. Larkey, Margaret E. Connell, and Nasreen AbdulJaleel. http://maroo.cs.umass.edu/pub/web/getpdf.php?id=454 : Internal Zero-width joiner and Zero-width non-joiners are removed In addition to chandrabindu, NA+halant is normalized to anusvara Inheritance System.Object HindiNormalizer 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.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiNormalizer Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Hindi text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilter.html",
    "title": "Class HindiStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HindiStemFilter A TokenFilter that applies HindiStemmer to stem Hindi words. Inheritance System.Object AttributeSource TokenStream TokenFilter HindiStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HindiStemFilter(TokenStream) Declaration public HindiStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html",
    "title": "Class HindiStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HindiStemFilterFactory Factory for HindiStemFilter . <fieldType name=\"text_histem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HindiStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source HindiStemFilterFactory(IDictionary<String, String>) Creates a new HindiStemFilterFactory Declaration public HindiStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemmer.html",
    "title": "Class HindiStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HindiStemmer Light Stemmer for Hindi. Implements the algorithm specified in: A Lightweight Stemmer for Hindi Ananthakrishnan Ramanathan and Durgesh D Rao. http://computing.open.ac.uk/Sites/EACLSouthAsia/Papers/p6-Ramanathan.pdf Inheritance System.Object HindiStemmer 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.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] buffer, int len) Parameters Type Name Description System.Char [] buffer System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.html",
    "title": "Namespace Lucene.Net.Analysis.Hi | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hi <!-- 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. --> Analyzer for Hindi. Classes HindiAnalyzer Analyzer for Hindi. You must specify the required LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization HindiNormalizationFilter A TokenFilter that applies HindiNormalizer to normalize the orthography. In some cases the normalization may cause unrelated terms to conflate, so to prevent terms from being normalized use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . HindiNormalizationFilterFactory Factory for HindiNormalizationFilter . <fieldType name=\"text_hinormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiNormalizationFilterFactory\"/> </analyzer> </fieldType> HindiNormalizer Normalizer for Hindi. Normalizes text to remove some differences in spelling variations. Implements the Hindi-language specific algorithm specified in: Word normalization in Indian languages Prasad Pingali and Vasudeva Varma. http://web2py.iiit.ac.in/publications/default/download/inproceedings.pdf.3fe5b38c-02ee-41ce-9a8f-3e745670be32.pdf with the following additions from Hindi CLIR in Thirty Days Leah S. Larkey, Margaret E. Connell, and Nasreen AbdulJaleel. http://maroo.cs.umass.edu/pub/web/getpdf.php?id=454 : Internal Zero-width joiner and Zero-width non-joiners are removed In addition to chandrabindu, NA+halant is normalized to anusvara HindiStemFilter A TokenFilter that applies HindiStemmer to stem Hindi words. HindiStemFilterFactory Factory for HindiStemFilter . <fieldType name=\"text_histem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiStemFilterFactory\"/> </analyzer> </fieldType> HindiStemmer Light Stemmer for Hindi. Implements the algorithm specified in: A Lightweight Stemmer for Hindi Ananthakrishnan Ramanathan and Durgesh D Rao. http://computing.open.ac.uk/Sites/EACLSouthAsia/Papers/p6-Ramanathan.pdf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.html",
    "title": "Namespace Lucene.Net.Analysis.Hu | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hu <!-- 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. --> Analyzer for Hungarian. Classes HungarianAnalyzer Analyzer for Hungarian. HungarianLightStemFilter A TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . HungarianLightStemFilterFactory Factory for HungarianLightStemFilter . <fieldType name=\"text_hulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.HungarianLightStemFilterFactory\"/> </analyzer> </fieldType> HungarianLightStemmer Light Stemmer for Hungarian. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianAnalyzer.html",
    "title": "Class HungarianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HungarianAnalyzer Analyzer for Hungarian. Inheritance System.Object Analyzer StopwordAnalyzerBase HungarianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HungarianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source HungarianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public HungarianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source HungarianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public HungarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source HungarianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public HungarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Hungarian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"hungarian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html",
    "title": "Class HungarianLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HungarianLightStemFilter A TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter HungarianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HungarianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HungarianLightStemFilter(TokenStream) Declaration public HungarianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html",
    "title": "Class HungarianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HungarianLightStemFilterFactory Factory for HungarianLightStemFilter . <fieldType name=\"text_hulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.HungarianLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HungarianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HungarianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source HungarianLightStemFilterFactory(IDictionary<String, String>) Creates a new HungarianLightStemFilterFactory Declaration public HungarianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemmer.html",
    "title": "Class HungarianLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HungarianLightStemmer Light Stemmer for Hungarian. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object HungarianLightStemmer 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.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HungarianLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.Dictionary.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Dictionary In-memory structure for the dictionary (.dic) and affix (.aff) data of a hunspell dictionary. Inheritance System.Object Dictionary 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.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Dictionary Constructors | Improve this Doc View Source Dictionary(Stream, IList<Stream>, Boolean) Creates a new Dictionary containing the information read from the provided System.IO.Stream s to hunspell affix and dictionary files. You have to dispose the provided System.IO.Stream s yourself. Declaration public Dictionary(Stream affix, IList<Stream> dictionaries, bool ignoreCase) Parameters Type Name Description System.IO.Stream affix System.IO.Stream for reading the hunspell affix file (won't be disposed). System.Collections.Generic.IList < System.IO.Stream > dictionaries System.IO.Stream for reading the hunspell dictionary files (won't be disposed). System.Boolean ignoreCase ignore case? Exceptions Type Condition System.IO.IOException Can be thrown while reading from the System.IO.Stream s System.Exception Can be thrown if the content of the files does not meet expected formats | Improve this Doc View Source Dictionary(Stream, Stream) Creates a new Dictionary containing the information read from the provided System.IO.Stream s to hunspell affix and dictionary files. You have to dispose the provided System.IO.Stream s yourself. Declaration public Dictionary(Stream affix, Stream dictionary) Parameters Type Name Description System.IO.Stream affix System.IO.Stream for reading the hunspell affix file (won't be disposed). System.IO.Stream dictionary System.IO.Stream for reading the hunspell dictionary file (won't be disposed). Exceptions Type Condition System.IO.IOException Can be thrown while reading from the System.IO.Stream s System.Exception Can be thrown if the content of the files does not meet expected formats"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.html",
    "title": "Namespace Lucene.Net.Analysis.Hunspell | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hunspell <!-- 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. --> Stemming TokenFilter using a Java implementation of the Hunspell stemming algorithm. Dictionaries can be found on OpenOffice's wiki Classes Dictionary In-memory structure for the dictionary (.dic) and affix (.aff) data of a hunspell dictionary. HunspellStemFilter TokenFilter that uses hunspell affix rules and words to stem tokens. Since hunspell supports a word having multiple stems, this filter can emit multiple tokens for each consumed token Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory This is a Lucene.NET EXPERIMENTAL API, use at your own risk HunspellStemFilterFactory TokenFilterFactory that creates instances of HunspellStemFilter . Example config for British English: <filter class=\"solr.HunspellStemFilterFactory\" dictionary=\"en_GB.dic,my_custom.dic\" affix=\"en_GB.aff\" ignoreCase=\"false\" longestOnly=\"false\" /> Both parameters dictionary and affix are mandatory. Dictionaries for many languages are available through the OpenOffice project. See http://wiki.apache.org/solr/Hunspell This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html",
    "title": "Class HunspellStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HunspellStemFilter TokenFilter that uses hunspell affix rules and words to stem tokens. Since hunspell supports a word having multiple stems, this filter can emit multiple tokens for each consumed token Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter HunspellStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HunspellStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary) Create a HunspellStemFilter outputting all possible stems. Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary) Parameters Type Name Description TokenStream input Dictionary dictionary See Also HunspellStemFilter(TokenStream, Dictionary, Boolean) | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary, Boolean) Create a HunspellStemFilter outputting all possible stems. Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary, bool dedup) Parameters Type Name Description TokenStream input Dictionary dictionary System.Boolean dedup See Also HunspellStemFilter(TokenStream, Dictionary, Boolean, Boolean) | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary, Boolean, Boolean) Creates a new HunspellStemFilter that will stem tokens from the given TokenStream using affix rules in the provided Dictionary Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary, bool dedup, bool longestOnly) Parameters Type Name Description TokenStream input TokenStream whose tokens will be stemmed Dictionary dictionary Hunspell Dictionary containing the affix rules and words that will be used to stem the tokens System.Boolean dedup remove duplicates System.Boolean longestOnly true if only the longest term should be output. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html",
    "title": "Class HunspellStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HunspellStemFilterFactory TokenFilterFactory that creates instances of HunspellStemFilter . Example config for British English: <filter class=\"solr.HunspellStemFilterFactory\" dictionary=\"en_GB.dic,my_custom.dic\" affix=\"en_GB.aff\" ignoreCase=\"false\" longestOnly=\"false\" /> Both parameters dictionary and affix are mandatory. Dictionaries for many languages are available through the OpenOffice project. See http://wiki.apache.org/solr/Hunspell This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HunspellStemFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HunspellStemFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source HunspellStemFilterFactory(IDictionary<String, String>) Creates a new HunspellStemFilterFactory Declaration public HunspellStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html",
    "title": "Class ArmenianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArmenianAnalyzer Analyzer for Armenian. Inheritance System.Object Analyzer StopwordAnalyzerBase ArmenianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Hy Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArmenianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ArmenianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ArmenianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public ArmenianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Armenian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.html",
    "title": "Namespace Lucene.Net.Analysis.Hy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hy <!-- 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. --> Analyzer for Armenian. Classes ArmenianAnalyzer Analyzer for Armenian."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.html",
    "title": "Namespace Lucene.Net.Analysis.Id | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Id <!-- 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. --> Analyzer for Indonesian. Classes IndonesianAnalyzer Analyzer for Indonesian (Bahasa) IndonesianStemFilter A TokenFilter that applies IndonesianStemmer to stem Indonesian words. IndonesianStemFilterFactory Factory for IndonesianStemFilter . <fieldType name=\"text_idstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.IndonesianStemFilterFactory\" stemDerivational=\"true\"/> </analyzer> </fieldType> IndonesianStemmer Stemmer for Indonesian. Stems Indonesian words with the algorithm presented in: A Study of Stemming Effects on Information Retrieval in Bahasa Indonesia , Fadillah Z Tala. http://www.illc.uva.nl/Publications/ResearchReports/MoL-2003-02.text.pdf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianAnalyzer.html",
    "title": "Class IndonesianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndonesianAnalyzer Analyzer for Indonesian (Bahasa) Inheritance System.Object Analyzer StopwordAnalyzerBase IndonesianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndonesianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public IndonesianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public IndonesianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop word. If a none-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before IndonesianStemFilter . Declaration public IndonesianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Indonesian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and IndonesianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilter.html",
    "title": "Class IndonesianStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndonesianStemFilter A TokenFilter that applies IndonesianStemmer to stem Indonesian words. Inheritance System.Object AttributeSource TokenStream TokenFilter IndonesianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndonesianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IndonesianStemFilter(TokenStream) Calls IndonesianStemFilter(TokenStream, Boolean) Declaration public IndonesianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source IndonesianStemFilter(TokenStream, Boolean) Create a new IndonesianStemFilter . If stemDerivational is false, only inflectional suffixes (particles and possessive pronouns) are stemmed. Declaration public IndonesianStemFilter(TokenStream input, bool stemDerivational) Parameters Type Name Description TokenStream input System.Boolean stemDerivational Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html",
    "title": "Class IndonesianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndonesianStemFilterFactory Factory for IndonesianStemFilter . <fieldType name=\"text_idstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.IndonesianStemFilterFactory\" stemDerivational=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory IndonesianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndonesianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source IndonesianStemFilterFactory(IDictionary<String, String>) Creates a new IndonesianStemFilterFactory Declaration public IndonesianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemmer.html",
    "title": "Class IndonesianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndonesianStemmer Stemmer for Indonesian. Stems Indonesian words with the algorithm presented in: A Study of Stemming Effects on Information Retrieval in Bahasa Indonesia , Fadillah Z Tala. http://www.illc.uva.nl/Publications/ResearchReports/MoL-2003-02.text.pdf Inheritance System.Object IndonesianStemmer 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.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndonesianStemmer Methods | Improve this Doc View Source Stem(Char[], Int32, Boolean) Stem a term (returning its new length). Use stemDerivational to control whether full stemming or only light inflectional stemming is done. Declaration public virtual int Stem(char[] text, int length, bool stemDerivational) Parameters Type Name Description System.Char [] text System.Int32 length System.Boolean stemDerivational Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.html",
    "title": "Namespace Lucene.Net.Analysis.In | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.In <!-- 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. --> Analysis components for Indian languages. Classes IndicNormalizationFilter A TokenFilter that applies IndicNormalizer to normalize text in Indian Languages. IndicNormalizationFilterFactory Factory for IndicNormalizationFilter . <fieldType name=\"text_innormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IndicNormalizationFilterFactory\"/> </analyzer> </fieldType> IndicNormalizer Normalizes the Unicode representation of text in Indian languages. Follows guidelines from Unicode 5.2, chapter 6, South Asian Scripts I and graphical decompositions from http://ldc.upenn.edu/myl/IndianScriptsUnicode.html IndicTokenizer Simple Tokenizer for text in Indian Languages."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilter.html",
    "title": "Class IndicNormalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndicNormalizationFilter A TokenFilter that applies IndicNormalizer to normalize text in Indian Languages. Inheritance System.Object AttributeSource TokenStream TokenFilter IndicNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndicNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IndicNormalizationFilter(TokenStream) Declaration public IndicNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html",
    "title": "Class IndicNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndicNormalizationFilterFactory Factory for IndicNormalizationFilter . <fieldType name=\"text_innormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IndicNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory IndicNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndicNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source IndicNormalizationFilterFactory(IDictionary<String, String>) Creates a new IndicNormalizationFilterFactory Declaration public IndicNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizer.html",
    "title": "Class IndicNormalizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndicNormalizer Normalizes the Unicode representation of text in Indian languages. Follows guidelines from Unicode 5.2, chapter 6, South Asian Scripts I and graphical decompositions from http://ldc.upenn.edu/myl/IndianScriptsUnicode.html Inheritance System.Object IndicNormalizer 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.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndicNormalizer Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalizes input text, and returns the new length. The length will always be less than or equal to the existing length. Declaration public virtual int Normalize(char[] text, int len) Parameters Type Name Description System.Char [] text input text System.Int32 len valid length Returns Type Description System.Int32 normalized length"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicTokenizer.html",
    "title": "Class IndicTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndicTokenizer Simple Tokenizer for text in Indian Languages. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer IndicTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.6) Use StandardTokenizer instead.\")] public sealed class IndicTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source IndicTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Declaration public IndicTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source IndicTokenizer(LuceneVersion, TextReader) Declaration public IndicTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion System.IO.TextReader input Methods | Improve this Doc View Source IsTokenChar(Int32) Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.html",
    "title": "Namespace Lucene.Net.Analysis.It | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.It <!-- 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. --> Analyzer for Italian. Classes ItalianAnalyzer Analyzer for Italian. You must specify the required LuceneVersion compatibility when creating ItalianAnalyzer : As of 3.6, ItalianLightStemFilter is used for less aggressive stemming. As of 3.2, ElisionFilter with a set of Italian contractions is used by default. ItalianLightStemFilter A TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . ItalianLightStemFilterFactory Factory for ItalianLightStemFilter . <fieldType name=\"text_itlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ItalianLightStemFilterFactory\"/> </analyzer> </fieldType> ItalianLightStemmer Light Stemmer for Italian. This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianAnalyzer.html",
    "title": "Class ItalianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ItalianAnalyzer Analyzer for Italian. You must specify the required LuceneVersion compatibility when creating ItalianAnalyzer : As of 3.6, ItalianLightStemFilter is used for less aggressive stemming. As of 3.2, ElisionFilter with a set of Italian contractions is used by default. Inheritance System.Object Analyzer StopwordAnalyzerBase ItalianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ItalianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ItalianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ItalianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ItalianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ItalianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ItalianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public ItalianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Italian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"italian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and ItalianLightStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilter.html",
    "title": "Class ItalianLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ItalianLightStemFilter A TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter ItalianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ItalianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ItalianLightStemFilter(TokenStream) Declaration public ItalianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html",
    "title": "Class ItalianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ItalianLightStemFilterFactory Factory for ItalianLightStemFilter . <fieldType name=\"text_itlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ItalianLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ItalianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ItalianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ItalianLightStemFilterFactory(IDictionary<String, String>) Creates a new ItalianLightStemFilterFactory Declaration public ItalianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemmer.html",
    "title": "Class ItalianLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ItalianLightStemmer Light Stemmer for Italian. This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy Inheritance System.Object ItalianLightStemmer 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.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ItalianLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.html",
    "title": "Namespace Lucene.Net.Analysis.Lv | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Lv <!-- 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. --> Analyzer for Latvian. Classes LatvianAnalyzer Analyzer for Latvian. LatvianStemFilter A TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . LatvianStemFilterFactory Factory for LatvianStemFilter . <fieldType name=\"text_lvstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.LatvianStemFilterFactory\"/> </analyzer> </fieldType> LatvianStemmer Light stemmer for Latvian. This is a light version of the algorithm in Karlis Kreslin's PhD thesis A stemming algorithm for Latvian with the following modifications: Only explicitly stems noun and adjective morphology Stricter length/vowel checks for the resulting stems (verb etc suffix stripping is removed) Removes only the primary inflectional suffixes: case and number for nouns ; case, number, gender, and definitiveness for adjectives. Palatalization is only handled when a declension II,V,VI noun suffix is removed."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianAnalyzer.html",
    "title": "Class LatvianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LatvianAnalyzer Analyzer for Latvian. Inheritance System.Object Analyzer StopwordAnalyzerBase LatvianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LatvianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source LatvianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public LatvianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source LatvianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public LatvianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source LatvianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public LatvianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Latvian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and LatvianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilter.html",
    "title": "Class LatvianStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LatvianStemFilter A TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter LatvianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LatvianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LatvianStemFilter(TokenStream) Declaration public LatvianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html",
    "title": "Class LatvianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LatvianStemFilterFactory Factory for LatvianStemFilter . <fieldType name=\"text_lvstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.LatvianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LatvianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LatvianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LatvianStemFilterFactory(IDictionary<String, String>) Creates a new LatvianStemFilterFactory Declaration public LatvianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemmer.html",
    "title": "Class LatvianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LatvianStemmer Light stemmer for Latvian. This is a light version of the algorithm in Karlis Kreslin's PhD thesis A stemming algorithm for Latvian with the following modifications: Only explicitly stems noun and adjective morphology Stricter length/vowel checks for the resulting stems (verb etc suffix stripping is removed) Removes only the primary inflectional suffixes: case and number for nouns ; case, number, gender, and definitiveness for adjectives. Palatalization is only handled when a declension II,V,VI noun suffix is removed. Inheritance System.Object LatvianStemmer 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.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LatvianStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem a latvian word. returns the new adjusted length. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html",
    "title": "Class ASCIIFoldingFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ASCIIFoldingFilter This class converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the \"Basic Latin\" Unicode block) into their ASCII equivalents, if one exists. Characters from the following Unicode blocks are converted; however, only those characters with reasonable ASCII alternatives are converted: C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode For example, '&agrave;' will be replaced by 'a'. Inheritance System.Object AttributeSource TokenStream TokenFilter ASCIIFoldingFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ASCIIFoldingFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ASCIIFoldingFilter(TokenStream) Declaration public ASCIIFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source ASCIIFoldingFilter(TokenStream, Boolean) Create a new ASCIIFoldingFilter . Declaration public ASCIIFoldingFilter(TokenStream input, bool preserveOriginal) Parameters Type Name Description TokenStream input TokenStream to filter System.Boolean preserveOriginal should the original tokens be kept on the input stream with a 0 position increment from the folded tokens? Properties | Improve this Doc View Source PreserveOriginal Does the filter preserve the original tokens? Declaration public bool PreserveOriginal { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source FoldToASCII(Char[], Int32) Converts characters above ASCII to their ASCII equivalents. For example, accents are removed from accented characters. Declaration public void FoldToASCII(char[] input, int length) Parameters Type Name Description System.Char [] input The string to fold System.Int32 length The number of characters in the input string | Improve this Doc View Source FoldToASCII(Char[], Int32, Char[], Int32, Int32) Converts characters above ASCII to their ASCII equivalents. For example, accents are removed from accented characters. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int FoldToASCII(char[] input, int inputPos, char[] output, int outputPos, int length) Parameters Type Name Description System.Char [] input The characters to fold System.Int32 inputPos Index of the first character to fold System.Char [] output The result of the folding. Should be of size >= length * 4 . System.Int32 outputPos Index of output where to put the result of the folding System.Int32 length The number of characters to fold Returns Type Description System.Int32 length of output | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html",
    "title": "Class ASCIIFoldingFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ASCIIFoldingFilterFactory Factory for ASCIIFoldingFilter . <fieldType name=\"text_ascii\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ASCIIFoldingFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ASCIIFoldingFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source ASCIIFoldingFilterFactory(IDictionary<String, String>) Creates a new ASCIIFoldingFilterFactory Declaration public ASCIIFoldingFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html",
    "title": "Class CapitalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CapitalizationFilter A filter to apply normal capitalization rules to Tokens. It will make the first letter capital and the rest lower case. This filter is particularly useful to build nice looking facet parameters. This filter is not appropriate if you intend to use a prefix query. Inheritance System.Object AttributeSource TokenStream TokenFilter CapitalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CapitalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CapitalizationFilter(TokenStream) Creates a CapitalizationFilter with the default parameters using the culture from the current thread. Calls CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Declaration public CapitalizationFilter(TokenStream in) Parameters Type Name Description TokenStream in | Improve this Doc View Source CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Creates a CapitalizationFilter with the specified parameters using the culture from the current thread. Declaration public CapitalizationFilter(TokenStream in, bool onlyFirstWord, CharArraySet keep, bool forceFirstLetter, ICollection<char[]> okPrefix, int minWordLength, int maxWordCount, int maxTokenLength) Parameters Type Name Description TokenStream in input tokenstream System.Boolean onlyFirstWord should each word be capitalized or all of the words? CharArraySet keep a keep word list. Each word that should be kept separated by whitespace. System.Boolean forceFirstLetter Force the first letter to be capitalized even if it is in the keep list. System.Collections.Generic.ICollection < System.Char []> okPrefix do not change word capitalization if a word begins with something in this list. System.Int32 minWordLength how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\". System.Int32 maxWordCount if the token contains more then maxWordCount words, the capitalization is assumed to be correct. System.Int32 maxTokenLength The maximum length for an individual token. Tokens that exceed this length will not have the capitalization operation performed. | Improve this Doc View Source CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32, CultureInfo) Creates a CapitalizationFilter with the specified parameters and the specified culture . Declaration public CapitalizationFilter(TokenStream in, bool onlyFirstWord, CharArraySet keep, bool forceFirstLetter, ICollection<char[]> okPrefix, int minWordLength, int maxWordCount, int maxTokenLength, CultureInfo culture) Parameters Type Name Description TokenStream in input tokenstream System.Boolean onlyFirstWord should each word be capitalized or all of the words? CharArraySet keep a keep word list. Each word that should be kept separated by whitespace. System.Boolean forceFirstLetter Force the first letter to be capitalized even if it is in the keep list. System.Collections.Generic.ICollection < System.Char []> okPrefix do not change word capitalization if a word begins with something in this list. System.Int32 minWordLength how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\". System.Int32 maxWordCount if the token contains more then maxWordCount words, the capitalization is assumed to be correct. System.Int32 maxTokenLength The maximum length for an individual token. Tokens that exceed this length will not have the capitalization operation performed. System.Globalization.CultureInfo culture The culture to use for the casing operation. If null, the culture of the current thread will be used. | Improve this Doc View Source CapitalizationFilter(TokenStream, CultureInfo) Creates a CapitalizationFilter with the default parameters and the specified culture . Calls CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Declaration public CapitalizationFilter(TokenStream in, CultureInfo culture) Parameters Type Name Description TokenStream in input tokenstream System.Globalization.CultureInfo culture The culture to use for the casing operation. If null, the culture of the current thread will be used. Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Declaration public static readonly int DEFAULT_MAX_TOKEN_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_WORD_COUNT Declaration public static readonly int DEFAULT_MAX_WORD_COUNT Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html",
    "title": "Class CapitalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CapitalizationFilterFactory Factory for CapitalizationFilter . The factory takes parameters: \"onlyFirstWord\" - should each word be capitalized or all of the words? \"keep\" - a keep word list. Each word that should be kept separated by whitespace. \"keepIgnoreCase - true or false. If true, the keep list will be considered case-insensitive. \"forceFirstLetter\" - Force the first letter to be capitalized even if it is in the keep list \"okPrefix\" - do not change word capitalization if a word begins with something in this list. for example if \"McK\" is on the okPrefix list, the word \"McKinley\" should not be changed to \"Mckinley\" \"minWordLength\" - how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\" \"maxWordCount\" - if the token contains more then maxWordCount words, the capitalization is assumed to be correct. <fieldType name=\"text_cptlztn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CapitalizationFilterFactory\" onlyFirstWord=\"true\" keep=\"java solr lucene\" keepIgnoreCase=\"false\" okPrefix=\"McK McD McA\"/> </analyzer> </fieldType> @since solr 1.3 Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CapitalizationFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CapitalizationFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CapitalizationFilterFactory(IDictionary<String, String>) Creates a new CapitalizationFilterFactory Declaration public CapitalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CULTURE Declaration public const string CULTURE = \"culture\" Field Value Type Description System.String | Improve this Doc View Source FORCE_FIRST_LETTER Declaration public const string FORCE_FIRST_LETTER = \"forceFirstLetter\" Field Value Type Description System.String | Improve this Doc View Source KEEP Declaration public const string KEEP = \"keep\" Field Value Type Description System.String | Improve this Doc View Source KEEP_IGNORE_CASE Declaration public const string KEEP_IGNORE_CASE = \"keepIgnoreCase\" Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_LENGTH Declaration public const string MAX_TOKEN_LENGTH = \"maxTokenLength\" Field Value Type Description System.String | Improve this Doc View Source MAX_WORD_COUNT Declaration public const string MAX_WORD_COUNT = \"maxWordCount\" Field Value Type Description System.String | Improve this Doc View Source MIN_WORD_LENGTH Declaration public const string MIN_WORD_LENGTH = \"minWordLength\" Field Value Type Description System.String | Improve this Doc View Source OK_PREFIX Declaration public const string OK_PREFIX = \"okPrefix\" Field Value Type Description System.String | Improve this Doc View Source ONLY_FIRST_WORD Declaration public const string ONLY_FIRST_WORD = \"onlyFirstWord\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html",
    "title": "Class CodepointCountFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CodepointCountFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of Unicode codepoints. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter CodepointCountFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CodepointCountFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source CodepointCountFilter(LuceneVersion, TokenStream, Int32, Int32) Create a new CodepointCountFilter . This will filter out tokens whose CharTermAttribute is either too short ( J2N.Character.CodePointCount(System.Char[],System.Int32,System.Int32) < min) or too long ( J2N.Character.CodePointCount(System.Char[],System.Int32,System.Int32) > max). Declaration public CodepointCountFilter(LuceneVersion version, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume System.Int32 min the minimum length System.Int32 max the maximum length Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html",
    "title": "Class CodepointCountFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CodepointCountFilterFactory Factory for CodepointCountFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CodepointCountFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CodepointCountFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CodepointCountFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CodepointCountFilterFactory(IDictionary<String, String>) Creates a new CodepointCountFilterFactory Declaration public CodepointCountFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source MAX_KEY Declaration public const string MAX_KEY = \"max\" Field Value Type Description System.String | Improve this Doc View Source MIN_KEY Declaration public const string MIN_KEY = \"min\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html",
    "title": "Class EmptyTokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EmptyTokenStream An always exhausted token stream. Inheritance System.Object AttributeSource TokenStream EmptyTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Reset() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EmptyTokenStream : TokenStream, IDisposable Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.html",
    "title": "Namespace Lucene.Net.Analysis.Miscellaneous | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Miscellaneous <!-- 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. --> Miscellaneous TokenStreams Classes ASCIIFoldingFilter This class converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the \"Basic Latin\" Unicode block) into their ASCII equivalents, if one exists. Characters from the following Unicode blocks are converted; however, only those characters with reasonable ASCII alternatives are converted: C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode For example, '&agrave;' will be replaced by 'a'. ASCIIFoldingFilterFactory Factory for ASCIIFoldingFilter . <fieldType name=\"text_ascii\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"false\"/> </analyzer> </fieldType> CapitalizationFilter A filter to apply normal capitalization rules to Tokens. It will make the first letter capital and the rest lower case. This filter is particularly useful to build nice looking facet parameters. This filter is not appropriate if you intend to use a prefix query. CapitalizationFilterFactory Factory for CapitalizationFilter . The factory takes parameters: \"onlyFirstWord\" - should each word be capitalized or all of the words? \"keep\" - a keep word list. Each word that should be kept separated by whitespace. \"keepIgnoreCase - true or false. If true, the keep list will be considered case-insensitive. \"forceFirstLetter\" - Force the first letter to be capitalized even if it is in the keep list \"okPrefix\" - do not change word capitalization if a word begins with something in this list. for example if \"McK\" is on the okPrefix list, the word \"McKinley\" should not be changed to \"Mckinley\" \"minWordLength\" - how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\" \"maxWordCount\" - if the token contains more then maxWordCount words, the capitalization is assumed to be correct. <fieldType name=\"text_cptlztn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CapitalizationFilterFactory\" onlyFirstWord=\"true\" keep=\"java solr lucene\" keepIgnoreCase=\"false\" okPrefix=\"McK McD McA\"/> </analyzer> </fieldType> @since solr 1.3 CodepointCountFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of Unicode codepoints. CodepointCountFilterFactory Factory for CodepointCountFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CodepointCountFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> EmptyTokenStream An always exhausted token stream. HyphenatedWordsFilter When the plain text is extracted from documents, we will often have many words hyphenated and broken into two lines. This is often the case with documents where narrow text columns are used, such as newsletters. In order to increase search efficiency, this filter puts hyphenated words broken into two lines back together. This filter should be used on indexing time only. Example field definition in schema.xml: <fieldtype name=\"text\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer type=\"index\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"index_synonyms.txt\" ignoreCase=\"true\" expand=\"false\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"1\" catenateNumbers=\"1\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" ignoreCase=\"true\" expand=\"true\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldtype> HyphenatedWordsFilterFactory Factory for HyphenatedWordsFilter . <fieldType name=\"text_hyphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> </analyzer> </fieldType> KeepWordFilter A TokenFilter that only keeps tokens with text contained in the required words. This filter behaves like the inverse of StopFilter . @since solr 1.3 KeepWordFilterFactory Factory for KeepWordFilter . <fieldType name=\"text_keepword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeepWordFilterFactory\" words=\"keepwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> KeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . KeywordMarkerFilterFactory Factory for KeywordMarkerFilter . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeywordMarkerFilterFactory\" protected=\"protectedkeyword.txt\" pattern=\"^.+er$\" ignoreCase=\"false\"/> </analyzer> </fieldType> KeywordRepeatFilter This TokenFilter emits each incoming token twice once as keyword and once non-keyword, in other words once with IsKeyword set to true and once set to false . This is useful if used with a stem filter that respects the KeywordAttribute to index the stemmed and the un-stemmed version of a term into the same field. KeywordRepeatFilterFactory Factory for KeywordRepeatFilter . Since KeywordRepeatFilter emits two tokens for every input token, and any tokens that aren't transformed later in the analysis chain will be in the document twice. Therefore, consider adding RemoveDuplicatesTokenFilterFactory later in the analysis chain. LengthFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of UTF-16 code units. LengthFilterFactory Factory for LengthFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LengthFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> LimitTokenCountAnalyzer This Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . LimitTokenCountFilter This TokenFilter limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenCountFilter(TokenStream, Int32, Boolean) consumeAllTokens option. LimitTokenCountFilterFactory Factory for LimitTokenCountFilter . <fieldType name=\"text_lngthcnt\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenCountFilterFactory\" maxTokenCount=\"10\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenCountFilter for an explanation of it's use. LimitTokenPositionFilter This TokenFilter limits its emitted tokens to those with positions that are not greater than the configured limit. By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenPositionFilter(TokenStream, Int32, Boolean) consumeAllTokens option. LimitTokenPositionFilterFactory Factory for LimitTokenPositionFilter . <fieldType name=\"text_limit_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenPositionFilterFactory\" maxTokenPosition=\"3\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenPositionFilter for an explanation of its use. Lucene47WordDelimiterFilter Old Broken version of WordDelimiterFilter PatternAnalyzer Efficient Lucene analyzer/tokenizer that preferably operates on a System.String rather than a System.IO.TextReader , that can flexibly separate text into terms via a regular expression System.Text.RegularExpressions.Regex (with behaviour similar to System.Text.RegularExpressions.Regex.Split(System.String) ), and that combines the functionality of LetterTokenizer , LowerCaseTokenizer , WhitespaceTokenizer , StopFilter into a single efficient multi-purpose class. If you are unsure how exactly a regular expression should look like, consider prototyping by simply trying various expressions on some test texts via System.Text.RegularExpressions.Regex.Split(System.String) . Once you are satisfied, give that regex to PatternAnalyzer . Also see Regular Expression Tutorial . This class can be considerably faster than the \"normal\" Lucene tokenizers. It can also serve as a building block in a compound Lucene TokenFilter chain. For example as in this stemming example: PatternAnalyzer pat = ... TokenStream tokenStream = new SnowballFilter( pat.GetTokenStream(\"content\", \"James is running round in the woods\"), \"English\")); PatternKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token that matches the provided pattern is marked as a keyword by setting IsKeyword to true . PerFieldAnalyzerWrapper This analyzer is used to facilitate scenarios where different fields Require different analysis techniques. Use the Map argument in PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) to add non-default analyzers for fields. Example usage: IDictionary<string, Analyzer> analyzerPerField = new Dictionary<string, Analyzer>(); analyzerPerField[\"firstname\"] = new KeywordAnalyzer(); analyzerPerField[\"lastname\"] = new KeywordAnalyzer(); PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), analyzerPerField); In this example, StandardAnalyzer will be used for all fields except \"firstname\" and \"lastname\", for which KeywordAnalyzer will be used. A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing. PrefixAndSuffixAwareTokenFilter Links two PrefixAwareTokenFilter . NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. PrefixAwareTokenFilter Joins two token streams and leaves the last token of the first stream available to be used when updating the token values in the second stream based on that token. The default implementation adds last prefix token end offset to the suffix token start and end offsets. NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. RemoveDuplicatesTokenFilter A TokenFilter which filters out Token s at the same position and Term text as the previous token in the stream. RemoveDuplicatesTokenFilterFactory Factory for RemoveDuplicatesTokenFilter . <fieldType name=\"text_rmdup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> ScandinavianFoldingFilter This filter folds Scandinavian characters åÅäæÄÆ->a and öÖøØ->o. It also discriminate against use of double vowels aa, ae, ao, oe and oo, leaving just the first one. It's is a semantically more destructive solution than ScandinavianNormalizationFilter but can in addition help with matching raksmorgas as räksmörgås. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej == blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas == raksmorgas Background: Swedish åäö are in fact the same letters as Norwegian and Danish åæø and thus interchangeable when used between these languages. They are however folded differently when people type them on a keyboard lacking these characters. In that situation almost all Swedish people use a, a, o instead of å, ä, ö. Norwegians and Danes on the other hand usually type aa, ae and oe instead of å, æ and ø. Some do however use a, a, o, oo, ao and sometimes permutations of everything above. This filter solves that mismatch problem, but might also cause new. ScandinavianFoldingFilterFactory Factory for ScandinavianFoldingFilter . <fieldType name=\"text_scandfold\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianFoldingFilterFactory\"/> </analyzer> </fieldType> ScandinavianNormalizationFilter This filter normalize use of the interchangeable Scandinavian characters æÆäÄöÖøØ and folded variants (aa, ao, ae, oe and oo) by transforming them to åÅæÆøØ. It's a semantically less destructive solution than ScandinavianFoldingFilter , most useful when a person with a Norwegian or Danish keyboard queries a Swedish index and vice versa. This filter does not the common Swedish folds of å and ä to a nor ö to o. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej but not blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas but not raksmorgas ScandinavianNormalizationFilterFactory Factory for ScandinavianNormalizationFilter . <fieldType name=\"text_scandnorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianNormalizationFilterFactory\"/> </analyzer> </fieldType> SetKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token contained in the provided set is marked as a keyword by setting IsKeyword to true . SingleTokenTokenStream A TokenStream containing a single token. StemmerOverrideFilter Provides the ability to override any KeywordAttribute aware stemmer with custom dictionary-based stemming. StemmerOverrideFilter.Builder This builder builds an FST for the StemmerOverrideFilter StemmerOverrideFilter.StemmerOverrideMap A read-only 4-byte FST backed map that allows fast case-insensitive key value lookups for StemmerOverrideFilter StemmerOverrideFilterFactory Factory for StemmerOverrideFilter . <fieldType name=\"text_dicstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StemmerOverrideFilterFactory\" dictionary=\"dictionary.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> TrimFilter Trims leading and trailing whitespace from Tokens in the stream. As of Lucene 4.4, this filter does not support updateOffsets=true anymore as it can lead to broken token streams. TrimFilterFactory Factory for TrimFilter . <fieldType name=\"text_trm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\"/> <filter class=\"solr.TrimFilterFactory\" /> </analyzer> </fieldType> TruncateTokenFilter A token filter for truncating the terms into a specific length. Fixed prefix truncation, as a stemming method, produces good results on Turkish language. It is reported that F5, using first 5 characters, produced best results in Information Retrieval on Turkish Texts TruncateTokenFilterFactory Factory for TruncateTokenFilter . The following type is recommended for \" diacritics-insensitive search \" for Turkish. <fieldType name=\"text_tr_ascii_f5\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"true\"/> <filter class=\"solr.KeywordRepeatFilterFactory\"/> <filter class=\"solr.TruncateTokenFilterFactory\" prefixLength=\"5\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> WordDelimiterFilter Splits words into subwords and performs optional transformations on subword groups. Words are split into subwords with the following rules: split on intra-word delimiters (by default, all non alpha-numeric characters): \"Wi-Fi\" → \"Wi\", \"Fi\" split on case transitions: \"PowerShot\" → \"Power\", \"Shot\" split on letter-number transitions: \"SD500\" → \"SD\", \"500\" leading and trailing intra-word delimiters on each subword are ignored: \"//hello---there, 'dude'\" → \"hello\", \"there\", \"dude\" trailing \"'s\" are removed for each subword: \"O'Neil's\" → \"O\", \"Neil\" Note: this step isn't performed in a separate filter because of possible subword combinations. The combinations parameter affects how subwords are combined: combinations=\"0\" causes no subword combinations: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" (0 and 1 are the token positions) combinations=\"1\" means that in addition to the subwords, maximum runs of non-numeric subwords are catenated and produced at the same position of the last subword in the run: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" 1:\"PowerShot\" \"A's+B's&C's\" -gt; 0:\"A\", 1:\"B\", 2:\"C\", 2:\"ABC\" \"Super-Duper-XL500-42-AutoCoder!\" → 0:\"Super\", 1:\"Duper\", 2:\"XL\", 2:\"SuperDuperXL\", 3:\"500\" 4:\"42\", 5:\"Auto\", 6:\"Coder\", 6:\"AutoCoder\" One use for WordDelimiterFilter is to help match words with different subword delimiters. For example, if the source text contained \"wi-fi\" one may want \"wifi\" \"WiFi\" \"wi-fi\" \"wi+fi\" queries to all match. One way of doing so is to specify combinations=\"1\" in the analyzer used for indexing, and combinations=\"0\" (the default) in the analyzer used for querying. Given that the current StandardTokenizer immediately removes many intra-word delimiters, it is recommended that this filter be used after a tokenizer that does not do this (such as WhitespaceTokenizer ). WordDelimiterFilterFactory Factory for WordDelimiterFilter . <fieldType name=\"text_wd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" protected=\"protectedword.txt\" preserveOriginal=\"0\" splitOnNumerics=\"1\" splitOnCaseChange=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\" generateWordParts=\"1\" generateNumberParts=\"1\" stemEnglishPossessive=\"1\" types=\"wdfftypes.txt\" /> </analyzer> </fieldType> WordDelimiterIterator A BreakIterator-like API for iterating over subwords in text, according to WordDelimiterFilter rules. This is a Lucene.NET INTERNAL API, use at your own risk Enums WordDelimiterFlags Configuration options for the WordDelimiterFilter . LUCENENET specific - these options were passed as int constant flags in Lucene."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html",
    "title": "Class HyphenatedWordsFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HyphenatedWordsFilter When the plain text is extracted from documents, we will often have many words hyphenated and broken into two lines. This is often the case with documents where narrow text columns are used, such as newsletters. In order to increase search efficiency, this filter puts hyphenated words broken into two lines back together. This filter should be used on indexing time only. Example field definition in schema.xml: <fieldtype name=\"text\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer type=\"index\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"index_synonyms.txt\" ignoreCase=\"true\" expand=\"false\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"1\" catenateNumbers=\"1\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" ignoreCase=\"true\" expand=\"true\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldtype> Inheritance System.Object AttributeSource TokenStream TokenFilter HyphenatedWordsFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HyphenatedWordsFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HyphenatedWordsFilter(TokenStream) Creates a new HyphenatedWordsFilter Declaration public HyphenatedWordsFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream that will be filtered Methods | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate Attribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all Attribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public override bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html",
    "title": "Class HyphenatedWordsFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HyphenatedWordsFilterFactory Factory for HyphenatedWordsFilter . <fieldType name=\"text_hyphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HyphenatedWordsFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenatedWordsFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source HyphenatedWordsFilterFactory(IDictionary<String, String>) Creates a new HyphenatedWordsFilterFactory Declaration public HyphenatedWordsFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html",
    "title": "Class KeepWordFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeepWordFilter A TokenFilter that only keeps tokens with text contained in the required words. This filter behaves like the inverse of StopFilter . @since solr 1.3 Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter KeepWordFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeepWordFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source KeepWordFilter(LuceneVersion, TokenStream, CharArraySet) Create a new KeepWordFilter . NOTE : The words set passed to this constructor will be directly used by this filter and should not be modified. Declaration public KeepWordFilter(LuceneVersion version, TokenStream in, CharArraySet words) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume CharArraySet words the words to keep | Improve this Doc View Source KeepWordFilter(LuceneVersion, Boolean, TokenStream, CharArraySet) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public KeepWordFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream in, CharArraySet words) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream in CharArraySet words Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html",
    "title": "Class KeepWordFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeepWordFilterFactory Factory for KeepWordFilter . <fieldType name=\"text_keepword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeepWordFilterFactory\" words=\"keepwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KeepWordFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KeepWordFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source KeepWordFilterFactory(IDictionary<String, String>) Creates a new KeepWordFilterFactory Declaration public KeepWordFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Words Declaration public virtual CharArraySet Words { get; } Property Value Type Description CharArraySet Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html",
    "title": "Class KeywordMarkerFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter SetKeywordMarkerFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class KeywordMarkerFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KeywordMarkerFilter(TokenStream) Creates a new KeywordMarkerFilter Declaration protected KeywordMarkerFilter(TokenStream in) Parameters Type Name Description TokenStream in the input stream Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsKeyword() Declaration protected abstract bool IsKeyword() Returns Type Description System.Boolean Implements System.IDisposable See Also KeywordAttribute"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html",
    "title": "Class KeywordMarkerFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordMarkerFilterFactory Factory for KeywordMarkerFilter . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeywordMarkerFilterFactory\" protected=\"protectedkeyword.txt\" pattern=\"^.+er$\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KeywordMarkerFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KeywordMarkerFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source KeywordMarkerFilterFactory(IDictionary<String, String>) Creates a new KeywordMarkerFilterFactory Declaration public KeywordMarkerFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PATTERN Declaration public const string PATTERN = \"pattern\" Field Value Type Description System.String | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = \"protected\" Field Value Type Description System.String Properties | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html",
    "title": "Class KeywordRepeatFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordRepeatFilter This TokenFilter emits each incoming token twice once as keyword and once non-keyword, in other words once with IsKeyword set to true and once set to false . This is useful if used with a stem filter that respects the KeywordAttribute to index the stemmed and the un-stemmed version of a term into the same field. Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordRepeatFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordRepeatFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KeywordRepeatFilter(TokenStream) Construct a token stream filtering the given input. Declaration public KeywordRepeatFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html",
    "title": "Class KeywordRepeatFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordRepeatFilterFactory Factory for KeywordRepeatFilter . Since KeywordRepeatFilter emits two tokens for every input token, and any tokens that aren't transformed later in the analysis chain will be in the document twice. Therefore, consider adding RemoveDuplicatesTokenFilterFactory later in the analysis chain. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KeywordRepeatFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordRepeatFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source KeywordRepeatFilterFactory(IDictionary<String, String>) Creates a new KeywordRepeatFilterFactory Declaration public KeywordRepeatFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilter.html",
    "title": "Class LengthFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LengthFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of UTF-16 code units. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter LengthFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LengthFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source LengthFilter(LuceneVersion, TokenStream, Int32, Int32) Create a new LengthFilter . This will filter out tokens whose CharTermAttribute is either too short ( Length < min) or too long ( Length > max). Declaration public LengthFilter(LuceneVersion version, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume System.Int32 min the minimum length System.Int32 max the maximum length | Improve this Doc View Source LengthFilter(LuceneVersion, Boolean, TokenStream, Int32, Int32) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public LengthFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream in System.Int32 min System.Int32 max Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html",
    "title": "Class LengthFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LengthFilterFactory Factory for LengthFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LengthFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LengthFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LengthFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LengthFilterFactory(IDictionary<String, String>) Creates a new LengthFilterFactory Declaration public LengthFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source MAX_KEY Declaration public const string MAX_KEY = \"max\" Field Value Type Description System.String | Improve this Doc View Source MIN_KEY Declaration public const string MIN_KEY = \"min\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html",
    "title": "Class LimitTokenCountAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LimitTokenCountAnalyzer This Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . Inheritance System.Object Analyzer AnalyzerWrapper LimitTokenCountAnalyzer Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenCountAnalyzer : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source LimitTokenCountAnalyzer(Analyzer, Int32) Build an analyzer that limits the maximum number of tokens per field. This analyzer will not consume any tokens beyond the maxTokenCount limit Declaration public LimitTokenCountAnalyzer(Analyzer delegate, int maxTokenCount) Parameters Type Name Description Analyzer delegate System.Int32 maxTokenCount See Also LimitTokenCountAnalyzer(Analyzer, Int32, Boolean) | Improve this Doc View Source LimitTokenCountAnalyzer(Analyzer, Int32, Boolean) Build an analyzer that limits the maximum number of tokens per field. Declaration public LimitTokenCountAnalyzer(Analyzer delegate, int maxTokenCount, bool consumeAllTokens) Parameters Type Name Description Analyzer delegate the analyzer to wrap System.Int32 maxTokenCount max number of tokens to produce System.Boolean consumeAllTokens whether all tokens from the delegate should be consumed even if maxTokenCount is reached. Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable See Also LimitTokenCountFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html",
    "title": "Class LimitTokenCountFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LimitTokenCountFilter This TokenFilter limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenCountFilter(TokenStream, Int32, Boolean) consumeAllTokens option. Inheritance System.Object AttributeSource TokenStream TokenFilter LimitTokenCountFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenCountFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LimitTokenCountFilter(TokenStream, Int32) Build a filter that only accepts tokens up to a maximum number. This filter will not consume any tokens beyond the maxTokenCount limit Declaration public LimitTokenCountFilter(TokenStream in, int maxTokenCount) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenCount max number of tokens to produce See Also LimitTokenCountFilter(TokenStream, Int32, Boolean) | Improve this Doc View Source LimitTokenCountFilter(TokenStream, Int32, Boolean) Build an filter that limits the maximum number of tokens per field. Declaration public LimitTokenCountFilter(TokenStream in, int maxTokenCount, bool consumeAllTokens) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenCount max number of tokens to produce System.Boolean consumeAllTokens whether all tokens from the input must be consumed even if maxTokenCount is reached. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html",
    "title": "Class LimitTokenCountFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LimitTokenCountFilterFactory Factory for LimitTokenCountFilter . <fieldType name=\"text_lngthcnt\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenCountFilterFactory\" maxTokenCount=\"10\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenCountFilter for an explanation of it's use. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LimitTokenCountFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LimitTokenCountFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LimitTokenCountFilterFactory(IDictionary<String, String>) Creates a new LimitTokenCountFilterFactory Declaration public LimitTokenCountFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CONSUME_ALL_TOKENS_KEY Declaration public const string CONSUME_ALL_TOKENS_KEY = \"consumeAllTokens\" Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_COUNT_KEY Declaration public const string MAX_TOKEN_COUNT_KEY = \"maxTokenCount\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html",
    "title": "Class LimitTokenPositionFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LimitTokenPositionFilter This TokenFilter limits its emitted tokens to those with positions that are not greater than the configured limit. By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenPositionFilter(TokenStream, Int32, Boolean) consumeAllTokens option. Inheritance System.Object AttributeSource TokenStream TokenFilter LimitTokenPositionFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenPositionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LimitTokenPositionFilter(TokenStream, Int32) Build a filter that only accepts tokens up to and including the given maximum position. This filter will not consume any tokens with position greater than the maxTokenPosition limit. Declaration public LimitTokenPositionFilter(TokenStream in, int maxTokenPosition) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenPosition max position of tokens to produce (1st token always has position 1) See Also LimitTokenPositionFilter(TokenStream, Int32, Boolean) | Improve this Doc View Source LimitTokenPositionFilter(TokenStream, Int32, Boolean) Build a filter that limits the maximum position of tokens to emit. Declaration public LimitTokenPositionFilter(TokenStream in, int maxTokenPosition, bool consumeAllTokens) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenPosition max position of tokens to produce (1st token always has position 1) System.Boolean consumeAllTokens whether all tokens from the wrapped input stream must be consumed even if maxTokenPosition is exceeded. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html",
    "title": "Class LimitTokenPositionFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LimitTokenPositionFilterFactory Factory for LimitTokenPositionFilter . <fieldType name=\"text_limit_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenPositionFilterFactory\" maxTokenPosition=\"3\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenPositionFilter for an explanation of its use. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LimitTokenPositionFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LimitTokenPositionFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LimitTokenPositionFilterFactory(IDictionary<String, String>) Creates a new LimitTokenPositionFilterFactory Declaration public LimitTokenPositionFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CONSUME_ALL_TOKENS_KEY Declaration public const string CONSUME_ALL_TOKENS_KEY = \"consumeAllTokens\" Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_POSITION_KEY Declaration public const string MAX_TOKEN_POSITION_KEY = \"maxTokenPosition\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html",
    "title": "Class Lucene47WordDelimiterFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene47WordDelimiterFilter Old Broken version of WordDelimiterFilter Inheritance System.Object AttributeSource TokenStream TokenFilter Lucene47WordDelimiterFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete] public sealed class Lucene47WordDelimiterFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source Lucene47WordDelimiterFilter(TokenStream, WordDelimiterFlags, CharArraySet) Creates a new Lucene47WordDelimiterFilter using DEFAULT_WORD_DELIM_TABLE as its charTypeTable Declaration public Lucene47WordDelimiterFilter(TokenStream in, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description TokenStream in TokenStream to be filtered WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited | Improve this Doc View Source Lucene47WordDelimiterFilter(TokenStream, Byte[], WordDelimiterFlags, CharArraySet) Creates a new Lucene47WordDelimiterFilter Declaration public Lucene47WordDelimiterFilter(TokenStream in, byte[] charTypeTable, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description TokenStream in TokenStream to be filtered System.Byte [] charTypeTable table containing character types WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited Fields | Improve this Doc View Source ALPHA Declaration public const int ALPHA = 3 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 7 Field Value Type Description System.Int32 | Improve this Doc View Source DIGIT Declaration public const int DIGIT = 4 Field Value Type Description System.Int32 | Improve this Doc View Source LOWER Declaration public const int LOWER = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SUBWORD_DELIM Declaration public const int SUBWORD_DELIM = 8 Field Value Type Description System.Int32 | Improve this Doc View Source UPPER Declaration public const int UPPER = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html",
    "title": "Class PatternAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternAnalyzer Efficient Lucene analyzer/tokenizer that preferably operates on a System.String rather than a System.IO.TextReader , that can flexibly separate text into terms via a regular expression System.Text.RegularExpressions.Regex (with behaviour similar to System.Text.RegularExpressions.Regex.Split(System.String) ), and that combines the functionality of LetterTokenizer , LowerCaseTokenizer , WhitespaceTokenizer , StopFilter into a single efficient multi-purpose class. If you are unsure how exactly a regular expression should look like, consider prototyping by simply trying various expressions on some test texts via System.Text.RegularExpressions.Regex.Split(System.String) . Once you are satisfied, give that regex to PatternAnalyzer . Also see Regular Expression Tutorial . This class can be considerably faster than the \"normal\" Lucene tokenizers. It can also serve as a building block in a compound Lucene TokenFilter chain. For example as in this stemming example: PatternAnalyzer pat = ... TokenStream tokenStream = new SnowballFilter( pat.GetTokenStream(\"content\", \"James is running round in the woods\"), \"English\")); Inheritance System.Object Analyzer PatternAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(4.0) use the pattern-based analysis in the analysis/pattern package instead.\")] public sealed class PatternAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source PatternAnalyzer(LuceneVersion, Regex, Boolean, CharArraySet) Constructs a new instance with the given parameters. Declaration public PatternAnalyzer(LuceneVersion matchVersion, Regex pattern, bool toLowerCase, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion currently does nothing System.Text.RegularExpressions.Regex pattern a regular expression delimiting tokens System.Boolean toLowerCase if true returns tokens after applying String.toLowerCase() CharArraySet stopWords if non-null, ignores all tokens that are contained in the given stop set (after previously having applied toLowerCase() if applicable). For example, created via MakeStopSet(LuceneVersion, String[]) and/or WordlistLoader as in WordlistLoader.getWordSet(new File(\"samples/fulltext/stopwords.txt\") or other stop words lists . Fields | Improve this Doc View Source DEFAULT_ANALYZER A lower-casing word analyzer with English stop words (can be shared freely across threads without harm); global per class loader. Declaration public static readonly PatternAnalyzer DEFAULT_ANALYZER Field Value Type Description PatternAnalyzer | Improve this Doc View Source EXTENDED_ANALYZER A lower-casing word analyzer with extended English stop words (can be shared freely across threads without harm); global per class loader. The stop words are borrowed from http://thomas.loc.gov/home/stopwords.html , see http://thomas.loc.gov/home/all.about.inquery.html Declaration public static readonly PatternAnalyzer EXTENDED_ANALYZER Field Value Type Description PatternAnalyzer | Improve this Doc View Source NON_WORD_PATTERN \"\\W+\" ; Divides text at non-letters (NOT Character.isLetter(c)) Declaration public static readonly Regex NON_WORD_PATTERN Field Value Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source WHITESPACE_PATTERN \"\\s+\" ; Divides text at whitespaces (Character.isWhitespace(c)) Declaration public static readonly Regex WHITESPACE_PATTERN Field Value Type Description System.Text.RegularExpressions.Regex Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a token stream that tokenizes all the text in the given SetReader; This implementation forwards to GetTokenStream(String, TextReader) and is less efficient than GetTokenStream(String, TextReader) . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the field to tokenize (currently ignored). System.IO.TextReader reader the reader delivering the text Returns Type Description TokenStreamComponents a new token stream Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source CreateComponents(String, TextReader, String) Creates a token stream that tokenizes the given string into token terms (aka words). Declaration public TokenStreamComponents CreateComponents(string fieldName, TextReader reader, string text) Parameters Type Name Description System.String fieldName the name of the field to tokenize (currently ignored). System.IO.TextReader reader reader (e.g. charfilter) of the original text. can be null. System.String text the string to tokenize Returns Type Description TokenStreamComponents a new token stream | Improve this Doc View Source Equals(Object) Indicates whether some other object is \"equal to\" this one. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other the reference object with which to compare. Returns Type Description System.Boolean true if equal, false otherwise Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for the object. Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code. Overrides System.Object.GetHashCode() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html",
    "title": "Class PatternKeywordMarkerFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token that matches the provided pattern is marked as a keyword by setting IsKeyword to true . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter Implements System.IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternKeywordMarkerFilter : KeywordMarkerFilter, IDisposable Constructors | Improve this Doc View Source PatternKeywordMarkerFilter(TokenStream, Regex) Create a new PatternKeywordMarkerFilter , that marks the current token as a keyword if the tokens term buffer matches the provided System.Text.RegularExpressions.Regex via the KeywordAttribute . Declaration public PatternKeywordMarkerFilter(TokenStream in, Regex pattern) Parameters Type Name Description TokenStream in TokenStream to filter System.Text.RegularExpressions.Regex pattern the pattern to apply to the incoming term buffer Methods | Improve this Doc View Source IsKeyword() Declaration protected override bool IsKeyword() Returns Type Description System.Boolean Overrides KeywordMarkerFilter.IsKeyword() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html",
    "title": "Class PerFieldAnalyzerWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PerFieldAnalyzerWrapper This analyzer is used to facilitate scenarios where different fields Require different analysis techniques. Use the Map argument in PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) to add non-default analyzers for fields. Example usage: IDictionary<string, Analyzer> analyzerPerField = new Dictionary<string, Analyzer>(); analyzerPerField[\"firstname\"] = new KeywordAnalyzer(); analyzerPerField[\"lastname\"] = new KeywordAnalyzer(); PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), analyzerPerField); In this example, StandardAnalyzer will be used for all fields except \"firstname\" and \"lastname\", for which KeywordAnalyzer will be used. A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing. Inheritance System.Object Analyzer AnalyzerWrapper PerFieldAnalyzerWrapper Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PerFieldAnalyzerWrapper : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source PerFieldAnalyzerWrapper(Analyzer) Constructs with default analyzer. Declaration public PerFieldAnalyzerWrapper(Analyzer defaultAnalyzer) Parameters Type Name Description Analyzer defaultAnalyzer Any fields not specifically defined to use a different analyzer will use the one provided here. | Improve this Doc View Source PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) Constructs with default analyzer and a map of analyzers to use for specific fields. The type of System.Collections.Generic.IDictionary<TKey, TValue> supplied will determine the type of behavior. System.Collections.Generic.Dictionary`2 General use. null keys are not supported. System.Collections.Generic.SortedDictionary`2 Use when sorted keys are required. null keys are not supported. J2N.Collections.Generic.Dictionary`2 Similar behavior as System.Collections.Generic.Dictionary`2 . null keys are supported. J2N.Collections.Generic.SortedDictionary`2 Use when sorted keys are required. null keys are supported. J2N.Collections.Generic.LinkedDictionary<TKey, TValue> Use when insertion order must be preserved ( System.Collections.Generic.Dictionary`2 preserves insertion order only until items are removed). null keys are supported. Or, use a 3rd party or custom System.Collections.Generic.IDictionary<TKey, TValue> if other behavior is desired. Declaration public PerFieldAnalyzerWrapper(Analyzer defaultAnalyzer, IDictionary<string, Analyzer> fieldAnalyzers) Parameters Type Name Description Analyzer defaultAnalyzer Any fields not specifically defined to use a different analyzer will use the one provided here. System.Collections.Generic.IDictionary < System.String , Analyzer > fieldAnalyzers A System.Collections.Generic.IDictionary<TKey, TValue> (String field name to the Analyzer) to be used for those fields. Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html",
    "title": "Class PrefixAndSuffixAwareTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixAndSuffixAwareTokenFilter Links two PrefixAwareTokenFilter . NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. Inheritance System.Object AttributeSource TokenStream PrefixAndSuffixAwareTokenFilter Implements System.IDisposable Inherited Members TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PrefixAndSuffixAwareTokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source PrefixAndSuffixAwareTokenFilter(TokenStream, TokenStream, TokenStream) Declaration public PrefixAndSuffixAwareTokenFilter(TokenStream prefix, TokenStream input, TokenStream suffix) Parameters Type Name Description TokenStream prefix TokenStream input TokenStream suffix Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source UpdateInputToken(Token, Token) Declaration public virtual Token UpdateInputToken(Token inputToken, Token lastPrefixToken) Parameters Type Name Description Token inputToken Token lastPrefixToken Returns Type Description Token | Improve this Doc View Source UpdateSuffixToken(Token, Token) Declaration public virtual Token UpdateSuffixToken(Token suffixToken, Token lastInputToken) Parameters Type Name Description Token suffixToken Token lastInputToken Returns Type Description Token Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html",
    "title": "Class PrefixAwareTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixAwareTokenFilter Joins two token streams and leaves the last token of the first stream available to be used when updating the token values in the second stream based on that token. The default implementation adds last prefix token end offset to the suffix token start and end offsets. NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. Inheritance System.Object AttributeSource TokenStream PrefixAwareTokenFilter Implements System.IDisposable Inherited Members TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PrefixAwareTokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source PrefixAwareTokenFilter(TokenStream, TokenStream) Declaration public PrefixAwareTokenFilter(TokenStream prefix, TokenStream suffix) Parameters Type Name Description TokenStream prefix TokenStream suffix Properties | Improve this Doc View Source Prefix Declaration public virtual TokenStream Prefix { get; set; } Property Value Type Description TokenStream | Improve this Doc View Source Suffix Declaration public virtual TokenStream Suffix { get; set; } Property Value Type Description TokenStream Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source UpdateSuffixToken(Token, Token) The default implementation adds last prefix token end offset to the suffix token start and end offsets. Declaration public virtual Token UpdateSuffixToken(Token suffixToken, Token lastPrefixToken) Parameters Type Name Description Token suffixToken a token from the suffix stream Token lastPrefixToken the last token from the prefix stream Returns Type Description Token consumer token Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html",
    "title": "Class RemoveDuplicatesTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RemoveDuplicatesTokenFilter A TokenFilter which filters out Token s at the same position and Term text as the previous token in the stream. Inheritance System.Object AttributeSource TokenStream TokenFilter RemoveDuplicatesTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RemoveDuplicatesTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source RemoveDuplicatesTokenFilter(TokenStream) Creates a new RemoveDuplicatesTokenFilter Declaration public RemoveDuplicatesTokenFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream that will be filtered Methods | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate IAttribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all IAttribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html",
    "title": "Class RemoveDuplicatesTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RemoveDuplicatesTokenFilterFactory Factory for RemoveDuplicatesTokenFilter . <fieldType name=\"text_rmdup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory RemoveDuplicatesTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RemoveDuplicatesTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source RemoveDuplicatesTokenFilterFactory(IDictionary<String, String>) Creates a new RemoveDuplicatesTokenFilterFactory Declaration public RemoveDuplicatesTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html",
    "title": "Class ScandinavianFoldingFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScandinavianFoldingFilter This filter folds Scandinavian characters åÅäæÄÆ->a and öÖøØ->o. It also discriminate against use of double vowels aa, ae, ao, oe and oo, leaving just the first one. It's is a semantically more destructive solution than ScandinavianNormalizationFilter but can in addition help with matching raksmorgas as räksmörgås. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej == blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas == raksmorgas Background: Swedish åäö are in fact the same letters as Norwegian and Danish åæø and thus interchangeable when used between these languages. They are however folded differently when people type them on a keyboard lacking these characters. In that situation almost all Swedish people use a, a, o instead of å, ä, ö. Norwegians and Danes on the other hand usually type aa, ae and oe instead of å, æ and ø. Some do however use a, a, o, oo, ao and sometimes permutations of everything above. This filter solves that mismatch problem, but might also cause new. Inheritance System.Object AttributeSource TokenStream TokenFilter ScandinavianFoldingFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ScandinavianFoldingFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ScandinavianFoldingFilter(TokenStream) Declaration public ScandinavianFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also ScandinavianNormalizationFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html",
    "title": "Class ScandinavianFoldingFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScandinavianFoldingFilterFactory Factory for ScandinavianFoldingFilter . <fieldType name=\"text_scandfold\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianFoldingFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ScandinavianFoldingFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ScandinavianFoldingFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ScandinavianFoldingFilterFactory(IDictionary<String, String>) Creates a new ScandinavianFoldingFilterFactory Declaration public ScandinavianFoldingFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html",
    "title": "Class ScandinavianNormalizationFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScandinavianNormalizationFilter This filter normalize use of the interchangeable Scandinavian characters æÆäÄöÖøØ and folded variants (aa, ao, ae, oe and oo) by transforming them to åÅæÆøØ. It's a semantically less destructive solution than ScandinavianFoldingFilter , most useful when a person with a Norwegian or Danish keyboard queries a Swedish index and vice versa. This filter does not the common Swedish folds of å and ä to a nor ö to o. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej but not blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas but not raksmorgas Inheritance System.Object AttributeSource TokenStream TokenFilter ScandinavianNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ScandinavianNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ScandinavianNormalizationFilter(TokenStream) Declaration public ScandinavianNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also ScandinavianFoldingFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html",
    "title": "Class ScandinavianNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScandinavianNormalizationFilterFactory Factory for ScandinavianNormalizationFilter . <fieldType name=\"text_scandnorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ScandinavianNormalizationFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ScandinavianNormalizationFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ScandinavianNormalizationFilterFactory(IDictionary<String, String>) Creates a new ScandinavianNormalizationFilterFactory Declaration public ScandinavianNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html",
    "title": "Class SetKeywordMarkerFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SetKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token contained in the provided set is marked as a keyword by setting IsKeyword to true . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter SetKeywordMarkerFilter Implements System.IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SetKeywordMarkerFilter : KeywordMarkerFilter, IDisposable Constructors | Improve this Doc View Source SetKeywordMarkerFilter(TokenStream, CharArraySet) Create a new SetKeywordMarkerFilter , that marks the current token as a keyword if the tokens term buffer is contained in the given set via the KeywordAttribute . Declaration public SetKeywordMarkerFilter(TokenStream in, CharArraySet keywordSet) Parameters Type Name Description TokenStream in TokenStream to filter CharArraySet keywordSet the keywords set to lookup the current termbuffer Methods | Improve this Doc View Source IsKeyword() Declaration protected override bool IsKeyword() Returns Type Description System.Boolean Overrides KeywordMarkerFilter.IsKeyword() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html",
    "title": "Class SingleTokenTokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleTokenTokenStream A TokenStream containing a single token. Inheritance System.Object AttributeSource TokenStream SingleTokenTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SingleTokenTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source SingleTokenTokenStream(Token) Declaration public SingleTokenTokenStream(Token token) Parameters Type Name Description Token token Methods | Improve this Doc View Source GetToken() Declaration public Token GetToken() Returns Type Description Token | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetToken(Token) Declaration public void SetToken(Token token) Parameters Type Name Description Token token Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html",
    "title": "Class StemmerOverrideFilter.Builder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StemmerOverrideFilter.Builder This builder builds an FST for the StemmerOverrideFilter Inheritance System.Object StemmerOverrideFilter.Builder 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder Constructors | Improve this Doc View Source Builder() Creates a new StemmerOverrideFilter.Builder with Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.ignoreCase set to false Declaration public Builder() | Improve this Doc View Source Builder(Boolean) Creates a new StemmerOverrideFilter.Builder Declaration public Builder(bool ignoreCase) Parameters Type Name Description System.Boolean ignoreCase if the input case should be ignored. Methods | Improve this Doc View Source Add(String, String) Adds an input string and it's stemmer override output to this builder. Declaration public virtual bool Add(string input, string output) Parameters Type Name Description System.String input the input char sequence System.String output the stemmer override output char sequence Returns Type Description System.Boolean false if the input has already been added to this builder otherwise true . | Improve this Doc View Source Build() Returns a StemmerOverrideFilter.StemmerOverrideMap to be used with the StemmerOverrideFilter Declaration public virtual StemmerOverrideFilter.StemmerOverrideMap Build() Returns Type Description StemmerOverrideFilter.StemmerOverrideMap a StemmerOverrideFilter.StemmerOverrideMap to be used with the StemmerOverrideFilter Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs;"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html",
    "title": "Class StemmerOverrideFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StemmerOverrideFilter Provides the ability to override any KeywordAttribute aware stemmer with custom dictionary-based stemming. Inheritance System.Object AttributeSource TokenStream TokenFilter StemmerOverrideFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StemmerOverrideFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StemmerOverrideFilter(TokenStream, StemmerOverrideFilter.StemmerOverrideMap) Create a new StemmerOverrideFilter , performing dictionary-based stemming with the provided dictionary ( stemmerOverrideMap ). Any dictionary-stemmed terms will be marked with KeywordAttribute so that they will not be stemmed with stemmers down the chain. Declaration public StemmerOverrideFilter(TokenStream input, StemmerOverrideFilter.StemmerOverrideMap stemmerOverrideMap) Parameters Type Name Description TokenStream input StemmerOverrideFilter.StemmerOverrideMap stemmerOverrideMap Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html",
    "title": "Class StemmerOverrideFilter.StemmerOverrideMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StemmerOverrideFilter.StemmerOverrideMap A read-only 4-byte FST backed map that allows fast case-insensitive key value lookups for StemmerOverrideFilter Inheritance System.Object StemmerOverrideFilter.StemmerOverrideMap 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StemmerOverrideMap Constructors | Improve this Doc View Source StemmerOverrideMap(FST<BytesRef>, Boolean) Creates a new StemmerOverrideFilter.StemmerOverrideMap Declaration public StemmerOverrideMap(FST<BytesRef> fst, bool ignoreCase) Parameters Type Name Description FST < BytesRef > fst the fst to lookup the overrides System.Boolean ignoreCase if the keys case should be ingored Methods | Improve this Doc View Source Get(Char[], Int32, FST.Arc<BytesRef>, FST.BytesReader) Returns the value mapped to the given key or null if the key is not in the FST dictionary. Declaration public BytesRef Get(char[] buffer, int bufferLen, FST.Arc<BytesRef> scratchArc, FST.BytesReader fstReader) Parameters Type Name Description System.Char [] buffer System.Int32 bufferLen FST.Arc < BytesRef > scratchArc FST.BytesReader fstReader Returns Type Description BytesRef | Improve this Doc View Source GetBytesReader() Returns a FST.BytesReader to pass to the Get(Char[], Int32, FST.Arc<BytesRef>, FST.BytesReader) method. Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html",
    "title": "Class StemmerOverrideFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StemmerOverrideFilterFactory Factory for StemmerOverrideFilter . <fieldType name=\"text_dicstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StemmerOverrideFilterFactory\" dictionary=\"dictionary.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StemmerOverrideFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StemmerOverrideFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source StemmerOverrideFilterFactory(IDictionary<String, String>) Creates a new StemmerOverrideFilterFactory Declaration public StemmerOverrideFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilter.html",
    "title": "Class TrimFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrimFilter Trims leading and trailing whitespace from Tokens in the stream. As of Lucene 4.4, this filter does not support updateOffsets=true anymore as it can lead to broken token streams. Inheritance System.Object AttributeSource TokenStream TokenFilter TrimFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TrimFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TrimFilter(LuceneVersion, TokenStream) Create a new TrimFilter on top of in . Declaration public TrimFilter(LuceneVersion version, TokenStream in) Parameters Type Name Description LuceneVersion version TokenStream in | Improve this Doc View Source TrimFilter(LuceneVersion, TokenStream, Boolean) Create a new TrimFilter . Declaration [Obsolete(\"Offset updates are not supported anymore as of Lucene 4.4.\")] public TrimFilter(LuceneVersion version, TokenStream in, bool updateOffsets) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the stream to consume System.Boolean updateOffsets whether to update offsets Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html",
    "title": "Class TrimFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrimFilterFactory Factory for TrimFilter . <fieldType name=\"text_trm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\"/> <filter class=\"solr.TrimFilterFactory\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TrimFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TrimFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TrimFilterFactory(IDictionary<String, String>) Creates a new TrimFilterFactory Declaration public TrimFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source m_updateOffsets Declaration protected readonly bool m_updateOffsets Field Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also TrimFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html",
    "title": "Class TruncateTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TruncateTokenFilter A token filter for truncating the terms into a specific length. Fixed prefix truncation, as a stemming method, produces good results on Turkish language. It is reported that F5, using first 5 characters, produced best results in Information Retrieval on Turkish Texts Inheritance System.Object AttributeSource TokenStream TokenFilter TruncateTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TruncateTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TruncateTokenFilter(TokenStream, Int32) Declaration public TruncateTokenFilter(TokenStream input, int length) Parameters Type Name Description TokenStream input System.Int32 length Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html",
    "title": "Class TruncateTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TruncateTokenFilterFactory Factory for TruncateTokenFilter . The following type is recommended for \" diacritics-insensitive search \" for Turkish. <fieldType name=\"text_tr_ascii_f5\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"true\"/> <filter class=\"solr.KeywordRepeatFilterFactory\"/> <filter class=\"solr.TruncateTokenFilterFactory\" prefixLength=\"5\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TruncateTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TruncateTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TruncateTokenFilterFactory(IDictionary<String, String>) Creates a new TruncateTokenFilterFactory Declaration public TruncateTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PREFIX_LENGTH_KEY Declaration public const string PREFIX_LENGTH_KEY = \"prefixLength\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html",
    "title": "Class WordDelimiterFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WordDelimiterFilter Splits words into subwords and performs optional transformations on subword groups. Words are split into subwords with the following rules: split on intra-word delimiters (by default, all non alpha-numeric characters): \"Wi-Fi\" → \"Wi\", \"Fi\" split on case transitions: \"PowerShot\" → \"Power\", \"Shot\" split on letter-number transitions: \"SD500\" → \"SD\", \"500\" leading and trailing intra-word delimiters on each subword are ignored: \"//hello---there, 'dude'\" → \"hello\", \"there\", \"dude\" trailing \"'s\" are removed for each subword: \"O'Neil's\" → \"O\", \"Neil\" Note: this step isn't performed in a separate filter because of possible subword combinations. The combinations parameter affects how subwords are combined: combinations=\"0\" causes no subword combinations: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" (0 and 1 are the token positions) combinations=\"1\" means that in addition to the subwords, maximum runs of non-numeric subwords are catenated and produced at the same position of the last subword in the run: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" 1:\"PowerShot\" \"A's+B's&C's\" -gt; 0:\"A\", 1:\"B\", 2:\"C\", 2:\"ABC\" \"Super-Duper-XL500-42-AutoCoder!\" → 0:\"Super\", 1:\"Duper\", 2:\"XL\", 2:\"SuperDuperXL\", 3:\"500\" 4:\"42\", 5:\"Auto\", 6:\"Coder\", 6:\"AutoCoder\" One use for WordDelimiterFilter is to help match words with different subword delimiters. For example, if the source text contained \"wi-fi\" one may want \"wifi\" \"WiFi\" \"wi-fi\" \"wi+fi\" queries to all match. One way of doing so is to specify combinations=\"1\" in the analyzer used for indexing, and combinations=\"0\" (the default) in the analyzer used for querying. Given that the current StandardTokenizer immediately removes many intra-word delimiters, it is recommended that this filter be used after a tokenizer that does not do this (such as WhitespaceTokenizer ). Inheritance System.Object AttributeSource TokenStream TokenFilter WordDelimiterFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WordDelimiterFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source WordDelimiterFilter(LuceneVersion, TokenStream, WordDelimiterFlags, CharArraySet) Creates a new WordDelimiterFilter using DEFAULT_WORD_DELIM_TABLE as its charTypeTable Declaration public WordDelimiterFilter(LuceneVersion matchVersion, TokenStream in, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to be filtered WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited | Improve this Doc View Source WordDelimiterFilter(LuceneVersion, TokenStream, Byte[], WordDelimiterFlags, CharArraySet) Creates a new WordDelimiterFilter Declaration public WordDelimiterFilter(LuceneVersion matchVersion, TokenStream in, byte[] charTypeTable, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to be filtered System.Byte [] charTypeTable table containing character types WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited Fields | Improve this Doc View Source ALPHA Declaration public const int ALPHA = 3 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 7 Field Value Type Description System.Int32 | Improve this Doc View Source DIGIT Declaration public const int DIGIT = 4 Field Value Type Description System.Int32 | Improve this Doc View Source LOWER Declaration public const int LOWER = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SUBWORD_DELIM Declaration public const int SUBWORD_DELIM = 8 Field Value Type Description System.Int32 | Improve this Doc View Source UPPER Declaration public const int UPPER = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html",
    "title": "Class WordDelimiterFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WordDelimiterFilterFactory Factory for WordDelimiterFilter . <fieldType name=\"text_wd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" protected=\"protectedword.txt\" preserveOriginal=\"0\" splitOnNumerics=\"1\" splitOnCaseChange=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\" generateWordParts=\"1\" generateNumberParts=\"1\" stemEnglishPossessive=\"1\" types=\"wdfftypes.txt\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory WordDelimiterFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordDelimiterFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source WordDelimiterFilterFactory(IDictionary<String, String>) Creates a new WordDelimiterFilterFactory Declaration public WordDelimiterFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = \"protected\" Field Value Type Description System.String | Improve this Doc View Source TYPES Declaration public const string TYPES = \"types\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html",
    "title": "Enum WordDelimiterFlags | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum WordDelimiterFlags Configuration options for the WordDelimiterFilter . LUCENENET specific - these options were passed as int constant flags in Lucene. Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax [Flags] public enum WordDelimiterFlags Fields Name Description CATENATE_ALL Causes all subword parts to be catenated: \"wi-fi-4000\" => \"wifi4000\" CATENATE_NUMBERS Causes maximum runs of word parts to be catenated: \"wi-fi\" => \"wifi\" CATENATE_WORDS Causes maximum runs of word parts to be catenated: \"wi-fi\" => \"wifi\" GENERATE_NUMBER_PARTS Causes number subwords to be generated: \"500-42\" => \"500\" \"42\" GENERATE_WORD_PARTS Causes parts of words to be generated: \"PowerShot\" => \"Power\" \"Shot\" PRESERVE_ORIGINAL Causes original words are preserved and added to the subword list (Defaults to false) \"500-42\" => \"500\" \"42\" \"500-42\" SPLIT_ON_CASE_CHANGE If not set, causes case changes to be ignored (subwords will only be generated given SUBWORD_DELIM tokens) SPLIT_ON_NUMERICS If not set, causes numeric changes to be ignored (subwords will only be generated given SUBWORD_DELIM tokens). STEM_ENGLISH_POSSESSIVE Causes trailing \"'s\" to be removed for each subword \"O'Neil's\" => \"O\", \"Neil\""
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html",
    "title": "Class WordDelimiterIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WordDelimiterIterator A BreakIterator-like API for iterating over subwords in text, according to WordDelimiterFilter rules. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object WordDelimiterIterator 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.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WordDelimiterIterator Fields | Improve this Doc View Source DEFAULT_WORD_DELIM_TABLE Declaration public static readonly byte[] DEFAULT_WORD_DELIM_TABLE Field Value Type Description System.Byte [] | Improve this Doc View Source DONE Indicates the end of iteration Declaration public const int DONE = -1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetType(Int32) Computes the type of the given character Declaration public static byte GetType(int ch) Parameters Type Name Description System.Int32 ch Character whose type is to be determined Returns Type Description System.Byte Type of the character"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html",
    "title": "Class EdgeNGramFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EdgeNGramFilterFactory Creates new instances of EdgeNGramTokenFilter . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.EdgeNGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory EdgeNGramFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EdgeNGramFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source EdgeNGramFilterFactory(IDictionary<String, String>) Creates a new EdgeNGramFilterFactory Declaration public EdgeNGramFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html",
    "title": "Class EdgeNGramTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EdgeNGramTokenFilter Tokenizes the given token into n-grams of given size(s). This TokenFilter create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this filter does not support BACK (you can use ReverseStringFilter up-front and afterward to get the same behavior), handles supplementary characters correctly and does not update offsets anymore. Inheritance System.Object AttributeSource TokenStream TokenFilter EdgeNGramTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EdgeNGramTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, EdgeNGramTokenFilter.Side, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration [Obsolete] public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, EdgeNGramTokenFilter.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized EdgeNGramTokenFilter.Side side the EdgeNGramTokenFilter.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, String, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration [Obsolete] public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized System.String sideLabel the name of the EdgeNGramTokenFilter.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_GRAM_SIZE Declaration public const int DEFAULT_MAX_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SIDE Declaration public const EdgeNGramTokenFilter.Side DEFAULT_SIDE = EdgeNGramTokenFilter.Side.FRONT Field Value Type Description EdgeNGramTokenFilter.Side Methods | Improve this Doc View Source GetSide(String) Get the appropriate EdgeNGramTokenFilter.Side from a string Declaration public static EdgeNGramTokenFilter.Side GetSide(string sideName) Parameters Type Name Description System.String sideName Returns Type Description EdgeNGramTokenFilter.Side | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html",
    "title": "Enum EdgeNGramTokenFilter.Side | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum EdgeNGramTokenFilter.Side Specifies which side of the input the n-gram should be generated from Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public enum Side Fields Name Description BACK Get the n-gram from the end of the input FRONT Get the n-gram from the front of the input"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html",
    "title": "Class EdgeNGramTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EdgeNGramTokenizer Tokenizes the input from an edge into n-grams of given size(s). This Tokenizer create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this tokenizer can handle maxGram larger than 1024 chars, but beware that this will result in increased memory usage doesn't trim the input, sets position increments equal to 1 instead of 1 for the first token and 0 for all other ones doesn't support backward n-grams anymore. supports IsTokenChar(Int32) pre-tokenization, correctly handles supplementary characters. Although highly discouraged, it is still possible to use the old behavior through Lucene43EdgeNGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer NGramTokenizer EdgeNGramTokenizer Implements System.IDisposable Inherited Members NGramTokenizer.DEFAULT_MIN_NGRAM_SIZE NGramTokenizer.DEFAULT_MAX_NGRAM_SIZE NGramTokenizer.IncrementToken() NGramTokenizer.IsTokenChar(Int32) NGramTokenizer.End() NGramTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EdgeNGramTokenizer : NGramTokenizer, IDisposable Constructors | Improve this Doc View Source EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_GRAM_SIZE Declaration public const int DEFAULT_MAX_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = 1 Field Value Type Description System.Int32 Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html",
    "title": "Class EdgeNGramTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EdgeNGramTokenizerFactory Creates new instances of EdgeNGramTokenizer . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.EdgeNGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory EdgeNGramTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EdgeNGramTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source EdgeNGramTokenizerFactory(IDictionary<String, String>) Creates a new EdgeNGramTokenizerFactory Declaration public EdgeNGramTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.html",
    "title": "Namespace Lucene.Net.Analysis.NGram | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.NGram <!-- 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. --> Character n-gram tokenizers and filters. Classes EdgeNGramFilterFactory Creates new instances of EdgeNGramTokenFilter . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.EdgeNGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> EdgeNGramTokenFilter Tokenizes the given token into n-grams of given size(s). This TokenFilter create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this filter does not support BACK (you can use ReverseStringFilter up-front and afterward to get the same behavior), handles supplementary characters correctly and does not update offsets anymore. EdgeNGramTokenizer Tokenizes the input from an edge into n-grams of given size(s). This Tokenizer create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this tokenizer can handle maxGram larger than 1024 chars, but beware that this will result in increased memory usage doesn't trim the input, sets position increments equal to 1 instead of 1 for the first token and 0 for all other ones doesn't support backward n-grams anymore. supports IsTokenChar(Int32) pre-tokenization, correctly handles supplementary characters. Although highly discouraged, it is still possible to use the old behavior through Lucene43EdgeNGramTokenizer . EdgeNGramTokenizerFactory Creates new instances of EdgeNGramTokenizer . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.EdgeNGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> Lucene43EdgeNGramTokenizer Old version of EdgeNGramTokenizer which doesn't handle correctly supplementary characters. Lucene43NGramTokenizer Old broken version of NGramTokenizer . NGramFilterFactory Factory for NGramTokenFilter . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> NGramTokenFilter Tokenizes the input into n-grams of the given size(s). You must specify the required LuceneVersion compatibility when creating a NGramTokenFilter . As of Lucene 4.4, this token filters: handles supplementary characters correctly, emits all n-grams for the same token at the same position, does not modify offsets, sorts n-grams by their offset in the original token first, then increasing length (meaning that \"abc\" will give \"a\", \"ab\", \"abc\", \"b\", \"bc\", \"c\"). You can make this filter use the old behavior by providing a version < LUCENE_44 in the constructor but this is not recommended as it will lead to broken TokenStream s that will cause highlighting bugs. If you were using this TokenFilter to perform partial highlighting, this won't work anymore since this filter doesn't update offsets. You should modify your analysis chain to use NGramTokenizer , and potentially override IsTokenChar(Int32) to perform pre-tokenization. NGramTokenizer Tokenizes the input into n-grams of the given size(s). On the contrary to NGramTokenFilter , this class sets offsets so that characters between startOffset and endOffset in the original stream are the same as the term chars. For example, \"abcde\" would be tokenized as (minGram=2, maxGram=3): TermPosition incrementPosition lengthOffsets ab11[0,2[ abc11[0,3[ bc11[1,3[ bcd11[1,4[ cd11[2,4[ cde11[2,5[ de11[3,5[ This tokenizer changed a lot in Lucene 4.4 in order to: tokenize in a streaming fashion to support streams which are larger than 1024 chars (limit of the previous version), count grams based on unicode code points instead of java chars (and never split in the middle of surrogate pairs), give the ability to pre-tokenize the stream ( IsTokenChar(Int32) ) before computing n-grams. Additionally, this class doesn't trim trailing whitespaces and emits tokens in a different order, tokens are now emitted by increasing start offsets while they used to be emitted by increasing lengths (which prevented from supporting large input streams). Although highly discouraged, it is still possible to use the old behavior through Lucene43NGramTokenizer . NGramTokenizerFactory Factory for NGramTokenizer . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> Enums EdgeNGramTokenFilter.Side Specifies which side of the input the n-gram should be generated from Lucene43EdgeNGramTokenizer.Side Specifies which side of the input the n-gram should be generated from"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html",
    "title": "Class Lucene43EdgeNGramTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene43EdgeNGramTokenizer Old version of EdgeNGramTokenizer which doesn't handle correctly supplementary characters. Inheritance System.Object AttributeSource TokenStream Tokenizer Lucene43EdgeNGramTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete] public sealed class Lucene43EdgeNGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Lucene43EdgeNGramTokenizer.Side, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, Lucene43EdgeNGramTokenizer.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized Lucene43EdgeNGramTokenizer.Side side the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, String, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.String sideLabel the name of the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, TextReader, Lucene43EdgeNGramTokenizer.Side, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, Lucene43EdgeNGramTokenizer.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized Lucene43EdgeNGramTokenizer.Side side the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, TextReader, String, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.String sideLabel the name of the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_GRAM_SIZE Declaration public const int DEFAULT_MAX_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SIDE Declaration public const Lucene43EdgeNGramTokenizer.Side DEFAULT_SIDE = Lucene43EdgeNGramTokenizer.Side.FRONT Field Value Type Description Lucene43EdgeNGramTokenizer.Side Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source GetSide(String) Declaration public static Lucene43EdgeNGramTokenizer.Side GetSide(string sideName) Parameters Type Name Description System.String sideName Returns Type Description Lucene43EdgeNGramTokenizer.Side | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html",
    "title": "Enum Lucene43EdgeNGramTokenizer.Side | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Lucene43EdgeNGramTokenizer.Side Specifies which side of the input the n-gram should be generated from Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public enum Side Fields Name Description BACK Get the n-gram from the end of the input FRONT Get the n-gram from the front of the input"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html",
    "title": "Class Lucene43NGramTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene43NGramTokenizer Old broken version of NGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer Lucene43NGramTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete] public sealed class Lucene43NGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source Lucene43NGramTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates Lucene43NGramTokenizer with given min and max n-grams. Declaration public Lucene43NGramTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43NGramTokenizer(TextReader) Creates Lucene43NGramTokenizer with default min and max n-grams. Declaration public Lucene43NGramTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader holding the input to be tokenized | Improve this Doc View Source Lucene43NGramTokenizer(TextReader, Int32, Int32) Creates Lucene43NGramTokenizer with given min and max n-grams. Declaration public Lucene43NGramTokenizer(TextReader input, int minGram, int maxGram) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_NGRAM_SIZE Declaration public const int DEFAULT_MAX_NGRAM_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramFilterFactory.html",
    "title": "Class NGramFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NGramFilterFactory Factory for NGramTokenFilter . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NGramFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NGramFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NGramFilterFactory(IDictionary<String, String>) Creates a new NGramFilterFactory Declaration public NGramFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenFilter.html",
    "title": "Class NGramTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NGramTokenFilter Tokenizes the input into n-grams of the given size(s). You must specify the required LuceneVersion compatibility when creating a NGramTokenFilter . As of Lucene 4.4, this token filters: handles supplementary characters correctly, emits all n-grams for the same token at the same position, does not modify offsets, sorts n-grams by their offset in the original token first, then increasing length (meaning that \"abc\" will give \"a\", \"ab\", \"abc\", \"b\", \"bc\", \"c\"). You can make this filter use the old behavior by providing a version < LUCENE_44 in the constructor but this is not recommended as it will lead to broken TokenStream s that will cause highlighting bugs. If you were using this TokenFilter to perform partial highlighting, this won't work anymore since this filter doesn't update offsets. You should modify your analysis chain to use NGramTokenizer , and potentially override IsTokenChar(Int32) to perform pre-tokenization. Inheritance System.Object AttributeSource TokenStream TokenFilter NGramTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NGramTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NGramTokenFilter(LuceneVersion, TokenStream) Creates NGramTokenFilter with default min and max n-grams. Declaration public NGramTokenFilter(LuceneVersion version, TokenStream input) Parameters Type Name Description LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. TokenStream input TokenStream holding the input to be tokenized | Improve this Doc View Source NGramTokenFilter(LuceneVersion, TokenStream, Int32, Int32) Creates NGramTokenFilter with given min and max n-grams. Declaration public NGramTokenFilter(LuceneVersion version, TokenStream input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. TokenStream input TokenStream holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_NGRAM_SIZE Declaration public const int DEFAULT_MAX_NGRAM_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizer.html",
    "title": "Class NGramTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NGramTokenizer Tokenizes the input into n-grams of the given size(s). On the contrary to NGramTokenFilter , this class sets offsets so that characters between startOffset and endOffset in the original stream are the same as the term chars. For example, \"abcde\" would be tokenized as (minGram=2, maxGram=3): TermPosition incrementPosition lengthOffsets ab11[0,2[ abc11[0,3[ bc11[1,3[ bcd11[1,4[ cd11[2,4[ cde11[2,5[ de11[3,5[ This tokenizer changed a lot in Lucene 4.4 in order to: tokenize in a streaming fashion to support streams which are larger than 1024 chars (limit of the previous version), count grams based on unicode code points instead of java chars (and never split in the middle of surrogate pairs), give the ability to pre-tokenize the stream ( IsTokenChar(Int32) ) before computing n-grams. Additionally, this class doesn't trim trailing whitespaces and emits tokens in a different order, tokens are now emitted by increasing start offsets while they used to be emitted by increasing lengths (which prevented from supporting large input streams). Although highly discouraged, it is still possible to use the old behavior through Lucene43NGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer NGramTokenizer EdgeNGramTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source NGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates NGramTokenizer with given min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the lucene compatibility version AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source NGramTokenizer(LuceneVersion, TextReader) Creates NGramTokenizer with default min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, TextReader input) Parameters Type Name Description LuceneVersion version the lucene compatibility version System.IO.TextReader input System.IO.TextReader holding the input to be tokenized | Improve this Doc View Source NGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates NGramTokenizer with given min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the lucene compatibility version System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_NGRAM_SIZE Declaration public const int DEFAULT_MAX_NGRAM_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsTokenChar(Int32) Only collect characters which satisfy this condition. Declaration protected virtual bool IsTokenChar(int chr) Parameters Type Name Description System.Int32 chr Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override sealed void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html",
    "title": "Class NGramTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NGramTokenizerFactory Factory for NGramTokenizer . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory NGramTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NGramTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source NGramTokenizerFactory(IDictionary<String, String>) Creates a new NGramTokenizerFactory Declaration public NGramTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Creates the TokenStream of n-grams from the given System.IO.TextReader and AttributeSource.AttributeFactory . Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchAnalyzer.html",
    "title": "Class DutchAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DutchAnalyzer Analyzer for Dutch language. Supports an external list of stopwords (words that will not be indexed at all), an external list of exclusions (word that will not be stemmed, but indexed) and an external list of word-stem pairs that overrule the algorithm (dictionary stemming). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating DutchAnalyzer : As of 3.6, DutchAnalyzer(LuceneVersion, CharArraySet) and DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) also populate the default entries for the stem override dictionary As of 3.1, Snowball stemming is done with SnowballFilter, LowerCaseFilter is used prior to StopFilter, and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer DutchAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DutchAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source DutchAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ) and a few default entries for the stem exclusion table. Declaration public DutchAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionTable | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet, CharArrayMap<String>) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable, CharArrayMap<string> stemOverrideDict) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionTable CharArrayMap < System.String > stemOverrideDict Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Dutch stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"dutch_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Returns a (possibly reused) TokenStream which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader aReader) Parameters Type Name Description System.String fieldName System.IO.TextReader aReader Returns Type Description TokenStreamComponents A TokenStream built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, StemmerOverrideFilter , and SnowballFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemFilter.html",
    "title": "Class DutchStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DutchStemFilter A TokenFilter that stems Dutch words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a DutchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter DutchStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use Snowball.SnowballFilter with Tartarus.Snowball.Ext.DutchStemmer instead, which has the same functionality. This filter will be removed in Lucene 5.0\")] public sealed class DutchStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DutchStemFilter(TokenStream) Declaration public DutchStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Input TokenStream | Improve this Doc View Source DutchStemFilter(TokenStream, IDictionary<String, String>) Declaration public DutchStemFilter(TokenStream in, IDictionary<string, string> stemdictionary) Parameters Type Name Description TokenStream in Input TokenStream System.Collections.Generic.IDictionary < System.String , System.String > stemdictionary Dictionary of word stem pairs, that overrule the algorithm Properties | Improve this Doc View Source StemDictionary Set dictionary for stemming, this dictionary overrules the algorithm, so you can correct for a particular unwanted word-stem pair. Declaration public CharArrayMap<string> StemDictionary { get; set; } Property Value Type Description CharArrayMap < System.String > | Improve this Doc View Source Stemmer Set a alternative/custom DutchStemmer for this filter. Declaration public DutchStemmer Stemmer { get; set; } Property Value Type Description DutchStemmer Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also KeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DutchStemmer A stemmer for Dutch words. The algorithm is an implementation of the dutch stemming algorithm in Martin Porter's snowball project. Inheritance System.Object DutchStemmer 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.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use Tartarus.Snowball.Ext.DutchStemmer instead, which has the same functionality. This filter will be removed in Lucene 5.0\")] public class DutchStemmer Methods | Improve this Doc View Source Stem(String) Stems the given term to an unique discriminator . Declaration public virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.html",
    "title": "Namespace Lucene.Net.Analysis.Nl | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Nl <!-- 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. --> Analyzer for Dutch. Classes DutchAnalyzer Analyzer for Dutch language. Supports an external list of stopwords (words that will not be indexed at all), an external list of exclusions (word that will not be stemmed, but indexed) and an external list of word-stem pairs that overrule the algorithm (dictionary stemming). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating DutchAnalyzer : As of 3.6, DutchAnalyzer(LuceneVersion, CharArraySet) and DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) also populate the default entries for the stem override dictionary As of 3.1, Snowball stemming is done with SnowballFilter, LowerCaseFilter is used prior to StopFilter, and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . DutchStemFilter A TokenFilter that stems Dutch words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a DutchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . DutchStemmer A stemmer for Dutch words. The algorithm is an implementation of the dutch stemming algorithm in Martin Porter's snowball project."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.html",
    "title": "Namespace Lucene.Net.Analysis.No | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.No <!-- 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. --> Analyzer for Norwegian. Classes NorwegianAnalyzer Analyzer for Norwegian. NorwegianLightStemFilter A TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NorwegianLightStemFilterFactory Factory for NorwegianLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianLightStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> NorwegianLightStemmer Light Stemmer for Norwegian. Parts of this stemmer is adapted from SwedishLightStemFilter , except that while the Swedish one has a pre-defined rule set and a corresponding corpus to validate against whereas the Norwegian one is hand crafted. NorwegianMinimalStemFilter A TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NorwegianMinimalStemFilterFactory Factory for NorwegianMinimalStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianMinimalStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> NorwegianMinimalStemmer Minimal Stemmer for Norwegian Bokmål (no-nb) and Nynorsk (no-nn) Stems known plural forms for Norwegian nouns only, together with genitiv -s Enums NorwegianStandard"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianAnalyzer.html",
    "title": "Class NorwegianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianAnalyzer Analyzer for Norwegian. Inheritance System.Object Analyzer StopwordAnalyzerBase NorwegianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public NorwegianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public NorwegianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public NorwegianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Norwegian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"norwegian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilter.html",
    "title": "Class NorwegianLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianLightStemFilter A TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter NorwegianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NorwegianLightStemFilter(TokenStream) Calls NorwegianLightStemFilter(TokenStream, NorwegianStandard) NorwegianLightStemFilter(input, BOKMAAL) Declaration public NorwegianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input the source TokenStream to filter | Improve this Doc View Source NorwegianLightStemFilter(TokenStream, NorwegianStandard) Creates a new NorwegianLightStemFilter Declaration public NorwegianLightStemFilter(TokenStream input, NorwegianStandard flags) Parameters Type Name Description TokenStream input the source TokenStream to filter NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html",
    "title": "Class NorwegianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianLightStemFilterFactory Factory for NorwegianLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianLightStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NorwegianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NorwegianLightStemFilterFactory(IDictionary<String, String>) Creates a new NorwegianLightStemFilterFactory Declaration public NorwegianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemmer.html",
    "title": "Class NorwegianLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianLightStemmer Light Stemmer for Norwegian. Parts of this stemmer is adapted from SwedishLightStemFilter , except that while the Swedish one has a pre-defined rule set and a corresponding corpus to validate against whereas the Norwegian one is hand crafted. Inheritance System.Object NorwegianLightStemmer 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.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianLightStemmer Constructors | Improve this Doc View Source NorwegianLightStemmer(NorwegianStandard) Creates a new NorwegianLightStemmer Declaration public NorwegianLightStemmer(NorwegianStandard flags) Parameters Type Name Description NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html",
    "title": "Class NorwegianMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianMinimalStemFilter A TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter NorwegianMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NorwegianMinimalStemFilter(TokenStream) Calls NorwegianLightStemFilter(TokenStream, NorwegianStandard) - NorwegianMinimalStemFilter(input, BOKMAAL) Declaration public NorwegianMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source NorwegianMinimalStemFilter(TokenStream, NorwegianStandard) Creates a new NorwegianLightStemFilter Declaration public NorwegianMinimalStemFilter(TokenStream input, NorwegianStandard flags) Parameters Type Name Description TokenStream input the source TokenStream to filter NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html",
    "title": "Class NorwegianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianMinimalStemFilterFactory Factory for NorwegianMinimalStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianMinimalStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NorwegianMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NorwegianMinimalStemFilterFactory(IDictionary<String, String>) Creates a new NorwegianMinimalStemFilterFactory Declaration public NorwegianMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html",
    "title": "Class NorwegianMinimalStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianMinimalStemmer Minimal Stemmer for Norwegian Bokmål (no-nb) and Nynorsk (no-nn) Stems known plural forms for Norwegian nouns only, together with genitiv -s Inheritance System.Object NorwegianMinimalStemmer 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.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianMinimalStemmer Constructors | Improve this Doc View Source NorwegianMinimalStemmer(NorwegianStandard) Creates a new NorwegianMinimalStemmer Declaration public NorwegianMinimalStemmer(NorwegianStandard flags) Parameters Type Name Description NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianStandard.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianStandard.html",
    "title": "Enum NorwegianStandard | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum NorwegianStandard Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax [Flags] public enum NorwegianStandard Fields Name Description BOKMAAL Constant to remove Bokmål-specific endings NYNORSK Constant to remove Nynorsk-specific endings"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.html",
    "title": "Namespace Lucene.Net.Analysis.Path | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Path <!-- 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. --> Analysis components for path-like strings such as filenames. Classes PathHierarchyTokenizer Tokenizer for path-like hierarchies. Take something like: /something/something/else and make: /something /something/something /something/something/else PathHierarchyTokenizerFactory Factory for PathHierarchyTokenizer . This factory is typically configured for use only in the index Analyzer (or only in the query Analyzer, but never both). For example, in the configuration below a query for Books/NonFic will match documents indexed with values like Books/NonFic , Books/NonFic/Law , Books/NonFic/Science/Physics , etc. But it will not match documents indexed with values like Books , or Books/Fic ... <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> </fieldType> In this example however we see the oposite configuration, so that a query for Books/NonFic/Science/Physics would match documents containing Books/NonFic , Books/NonFic/Science , or Books/NonFic/Science/Physics , but not Books/NonFic/Science/Physics/Theory or Books/NonFic/Law . <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> </fieldType> ReversePathHierarchyTokenizer Tokenizer for domain-like hierarchies. Take something like: www.site.co.uk and make: www.site.co.uk site.co.uk co.uk uk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html",
    "title": "Class PathHierarchyTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PathHierarchyTokenizer Tokenizer for path-like hierarchies. Take something like: /something/something/else and make: /something /something/something /something/something/else Inheritance System.Object AttributeSource TokenStream Tokenizer PathHierarchyTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PathHierarchyTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source PathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Char, Char, Int32) Declaration public PathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Char, Char, Int32) Declaration public PathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(TextReader) Declaration public PathHierarchyTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Char, Char) Declaration public PathHierarchyTokenizer(TextReader input, char delimiter, char replacement) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Char, Char, Int32) Declaration public PathHierarchyTokenizer(TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Int32) Declaration public PathHierarchyTokenizer(TextReader input, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Int32, Char) Declaration public PathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Int32, Char, Char, Int32) Declaration public PathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip Fields | Improve this Doc View Source DEFAULT_DELIMITER Declaration public const char DEFAULT_DELIMITER = '/' Field Value Type Description System.Char | Improve this Doc View Source DEFAULT_SKIP Declaration public const int DEFAULT_SKIP = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html",
    "title": "Class PathHierarchyTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PathHierarchyTokenizerFactory Factory for PathHierarchyTokenizer . This factory is typically configured for use only in the index Analyzer (or only in the query Analyzer, but never both). For example, in the configuration below a query for Books/NonFic will match documents indexed with values like Books/NonFic , Books/NonFic/Law , Books/NonFic/Science/Physics , etc. But it will not match documents indexed with values like Books , or Books/Fic ... <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> </fieldType> In this example however we see the oposite configuration, so that a query for Books/NonFic/Science/Physics would match documents containing Books/NonFic , Books/NonFic/Science , or Books/NonFic/Science/Physics , but not Books/NonFic/Science/Physics/Theory or Books/NonFic/Law . <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory PathHierarchyTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PathHierarchyTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source PathHierarchyTokenizerFactory(IDictionary<String, String>) Creates a new PathHierarchyTokenizerFactory Declaration public PathHierarchyTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html",
    "title": "Class ReversePathHierarchyTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReversePathHierarchyTokenizer Tokenizer for domain-like hierarchies. Take something like: www.site.co.uk and make: www.site.co.uk site.co.uk co.uk uk Inheritance System.Object AttributeSource TokenStream Tokenizer ReversePathHierarchyTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ReversePathHierarchyTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader) Declaration public ReversePathHierarchyTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Char, Char) Declaration public ReversePathHierarchyTokenizer(TextReader input, char delimiter, char replacement) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Char, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, char delimiter, int skip) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32, Char) Declaration public ReversePathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32, Char, Char) Declaration public ReversePathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter, char replacement) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip Fields | Improve this Doc View Source DEFAULT_DELIMITER Declaration public const char DEFAULT_DELIMITER = '/' Field Value Type Description System.Char | Improve this Doc View Source DEFAULT_SKIP Declaration public const int DEFAULT_SKIP = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.html",
    "title": "Namespace Lucene.Net.Analysis.Pattern | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pattern <!-- 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. --> Set of components for pattern-based (regex) analysis. Classes PatternCaptureGroupFilterFactory Factory for PatternCaptureGroupTokenFilter . <fieldType name=\"text_ptncapturegroup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternCaptureGroupFilterFactory\" pattern=\"([^a-z])\" preserve_original=\"true\"/> </analyzer> </fieldType> PatternCaptureGroupTokenFilter CaptureGroup uses .NET regexes to emit multiple tokens - one for each capture group in one or more patterns. For example, a pattern like: \"(https?://([a-zA-Z-_0-9.]+))\" when matched against the string \" http://www.foo.com/index&quot ; would return the tokens \"https://www.foo.com\" and \"www.foo.com\". If none of the patterns match, or if preserveOriginal is true, the original token will be preserved. Each pattern is matched as often as it can be, so the pattern \"(...)\" , when matched against \"abcdefghi\" would produce [\"abc\",\"def\",\"ghi\"] A camelCaseFilter could be written as: \"([A-Z]{2,})\", \"(?<![A-Z])([A-Z][a-z]+)\", \"(?:^|\\\\b|(?<=[0-9_])|(?<=[A-Z]{2}))([a-z]+)\", \"([0-9]+)\" plus if Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.preserveOriginal is true, it would also return camelCaseFilter PatternReplaceCharFilter CharFilter that uses a regular expression for the target of replace string. The pattern match will be done in each \"block\" in char stream. ex1) source=\"aa bb aa bb\", pattern=\"(aa)\\s+(bb)\" replacement=\"$1#$2\" output=\"aa#bb aa#bb\" NOTE: If you produce a phrase that has different length to source string and the field is used for highlighting for a term of the phrase, you will face a trouble. ex2) source=\"aa123bb\", pattern=\"(aa)\\d+(bb)\" replacement=\"$1 $2\" output=\"aa bb\" and you want to search bb and highlight it, you will get highlight snippet=\"aa1<em>23bb</em>\" @since Solr 1.5 PatternReplaceCharFilterFactory Factory for PatternReplaceCharFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PatternReplaceCharFilterFactory\" pattern=\"([^a-z])\" replacement=\"\"/> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 3.1 PatternReplaceFilter A TokenFilter which applies a System.Text.RegularExpressions.Regex to each token in the stream, replacing match occurances with the specified replacement string. Note: Depending on the input and the pattern used and the input TokenStream , this TokenFilter may produce Token s whose text is the empty string. PatternReplaceFilterFactory Factory for PatternReplaceFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternReplaceFilterFactory\" pattern=\"([^a-z])\" replacement=\"\" replace=\"all\"/> </analyzer> </fieldType> PatternTokenizer This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. PatternTokenizerFactory Factory for PatternTokenizer . This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. <fieldType name=\"text_ptn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.PatternTokenizerFactory\" pattern=\"\\'([^\\']+)\\'\" group=\"1\"/> </analyzer> </fieldType> @since solr1.2"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html",
    "title": "Class PatternCaptureGroupFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternCaptureGroupFilterFactory Factory for PatternCaptureGroupTokenFilter . <fieldType name=\"text_ptncapturegroup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternCaptureGroupFilterFactory\" pattern=\"([^a-z])\" preserve_original=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PatternCaptureGroupFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternCaptureGroupFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PatternCaptureGroupFilterFactory(IDictionary<String, String>) Declaration public PatternCaptureGroupFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternCaptureGroupTokenFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html",
    "title": "Class PatternCaptureGroupTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternCaptureGroupTokenFilter CaptureGroup uses .NET regexes to emit multiple tokens - one for each capture group in one or more patterns. For example, a pattern like: \"(https?://([a-zA-Z-_0-9.]+))\" when matched against the string \" http://www.foo.com/index&quot ; would return the tokens \"https://www.foo.com\" and \"www.foo.com\". If none of the patterns match, or if preserveOriginal is true, the original token will be preserved. Each pattern is matched as often as it can be, so the pattern \"(...)\" , when matched against \"abcdefghi\" would produce [\"abc\",\"def\",\"ghi\"] A camelCaseFilter could be written as: \"([A-Z]{2,})\", \"(?<![A-Z])([A-Z][a-z]+)\", \"(?:^|\\\\b|(?<=[0-9_])|(?<=[A-Z]{2}))([a-z]+)\", \"([0-9]+)\" plus if Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.preserveOriginal is true, it would also return camelCaseFilter Inheritance System.Object AttributeSource TokenStream TokenFilter PatternCaptureGroupTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternCaptureGroupTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PatternCaptureGroupTokenFilter(TokenStream, Boolean, Regex[]) Creates a new PatternCaptureGroupTokenFilter Declaration public PatternCaptureGroupTokenFilter(TokenStream input, bool preserveOriginal, params Regex[] patterns) Parameters Type Name Description TokenStream input the input TokenStream System.Boolean preserveOriginal set to true to return the original token even if one of the patterns matches System.Text.RegularExpressions.Regex [] patterns an array of Lucene.Net.Analysis.Pattern objects to match against each token Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html",
    "title": "Class PatternReplaceCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternReplaceCharFilter CharFilter that uses a regular expression for the target of replace string. The pattern match will be done in each \"block\" in char stream. ex1) source=\"aa bb aa bb\", pattern=\"(aa)\\s+(bb)\" replacement=\"$1#$2\" output=\"aa#bb aa#bb\" NOTE: If you produce a phrase that has different length to source string and the field is used for highlighting for a term of the phrase, you will face a trouble. ex2) source=\"aa123bb\", pattern=\"(aa)\\d+(bb)\" replacement=\"$1 $2\" output=\"aa bb\" and you want to search bb and highlight it, you will get highlight snippet=\"aa1<em>23bb</em>\" @since Solr 1.5 Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter BaseCharFilter PatternReplaceCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternReplaceCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source PatternReplaceCharFilter(Regex, String, Int32, String, TextReader) Declaration [Obsolete] public PatternReplaceCharFilter(Regex pattern, string replacement, int maxBlockChars, string blockDelimiter, TextReader in) Parameters Type Name Description System.Text.RegularExpressions.Regex pattern System.String replacement System.Int32 maxBlockChars System.String blockDelimiter System.IO.TextReader in | Improve this Doc View Source PatternReplaceCharFilter(Regex, String, TextReader) Declaration public PatternReplaceCharFilter(Regex pattern, string replacement, TextReader in) Parameters Type Name Description System.Text.RegularExpressions.Regex pattern System.String replacement System.IO.TextReader in Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_CHARS Declaration [Obsolete] public const int DEFAULT_MAX_BLOCK_CHARS = 10000 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides BaseCharFilter.Correct(Int32) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html",
    "title": "Class PatternReplaceCharFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternReplaceCharFilterFactory Factory for PatternReplaceCharFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PatternReplaceCharFilterFactory\" pattern=\"([^a-z])\" replacement=\"\"/> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 3.1 Inheritance System.Object AbstractAnalysisFactory CharFilterFactory PatternReplaceCharFilterFactory Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternReplaceCharFilterFactory : CharFilterFactory Constructors | Improve this Doc View Source PatternReplaceCharFilterFactory(IDictionary<String, String>) Creates a new PatternReplaceCharFilterFactory Declaration public PatternReplaceCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html",
    "title": "Class PatternReplaceFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternReplaceFilter A TokenFilter which applies a System.Text.RegularExpressions.Regex to each token in the stream, replacing match occurances with the specified replacement string. Note: Depending on the input and the pattern used and the input TokenStream , this TokenFilter may produce Token s whose text is the empty string. Inheritance System.Object AttributeSource TokenStream TokenFilter PatternReplaceFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternReplaceFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PatternReplaceFilter(TokenStream, Regex, String, Boolean) Constructs an instance to replace either the first, or all occurances Declaration public PatternReplaceFilter(TokenStream in, Regex pattern, string replacement, bool all) Parameters Type Name Description TokenStream in the TokenStream to process System.Text.RegularExpressions.Regex pattern the pattern (a System.Text.RegularExpressions.Regex object) to apply to each Token System.String replacement the \"replacement string\" to substitute, if null a blank string will be used. Note that this is not the literal string that will be used, '$' and '&apos; have special meaning. System.Boolean all if true, all matches will be replaced otherwise just the first match. See Also System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also System.Text.RegularExpressions.Regex"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html",
    "title": "Class PatternReplaceFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternReplaceFilterFactory Factory for PatternReplaceFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternReplaceFilterFactory\" pattern=\"([^a-z])\" replacement=\"\" replace=\"all\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PatternReplaceFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternReplaceFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PatternReplaceFilterFactory(IDictionary<String, String>) Creates a new PatternReplaceFilterFactory Declaration public PatternReplaceFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternReplaceFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizer.html",
    "title": "Class PatternTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternTokenizer This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. Inheritance System.Object AttributeSource TokenStream Tokenizer PatternTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source PatternTokenizer(AttributeSource.AttributeFactory, TextReader, Regex, Int32) creates a new PatternTokenizer returning tokens from group (-1 for split functionality) Declaration public PatternTokenizer(AttributeSource.AttributeFactory factory, TextReader input, Regex pattern, int group) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Text.RegularExpressions.Regex pattern System.Int32 group | Improve this Doc View Source PatternTokenizer(TextReader, Regex, Int32) creates a new PatternTokenizer returning tokens from group (-1 for split functionality) Declaration public PatternTokenizer(TextReader input, Regex pattern, int group) Parameters Type Name Description System.IO.TextReader input System.Text.RegularExpressions.Regex pattern System.Int32 group Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable See Also System.Text.RegularExpressions.Regex"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html",
    "title": "Class PatternTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PatternTokenizerFactory Factory for PatternTokenizer . This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. <fieldType name=\"text_ptn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.PatternTokenizerFactory\" pattern=\"\\'([^\\']+)\\'\" group=\"1\"/> </analyzer> </fieldType> @since solr1.2 Inheritance System.Object AbstractAnalysisFactory TokenizerFactory PatternTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source PatternTokenizerFactory(IDictionary<String, String>) Creates a new PatternTokenizerFactory Declaration public PatternTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source GROUP Declaration public const string GROUP = \"group\" Field Value Type Description System.String | Improve this Doc View Source m_group Declaration protected readonly int m_group Field Value Type Description System.Int32 | Improve this Doc View Source m_pattern Declaration protected readonly Regex m_pattern Field Value Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source PATTERN Declaration public const string PATTERN = \"pattern\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Split the input using configured pattern Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) See Also PatternTokenizer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.AbstractEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.AbstractEncoder.html",
    "title": "Class AbstractEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractEncoder Base class for payload encoders. Inheritance System.Object AbstractEncoder IdentityEncoder IntegerEncoder SingleEncoder Implements IPayloadEncoder 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class AbstractEncoder : IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[]) Declaration public virtual BytesRef Encode(char[] buffer) Parameters Type Name Description System.Char [] buffer Returns Type Description BytesRef | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public abstract BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html",
    "title": "Class DelimitedPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DelimitedPayloadTokenFilter Characters before the delimiter are the \"token\", those after are the payload. For example, if the delimiter is '|', then for the string \"foo|bar\", foo is the token and \"bar\" is a payload. Note, you can also include a IPayloadEncoder to convert the payload in an appropriate way (from characters to bytes). Note make sure your Tokenizer doesn't split on the delimiter, or this won't work Inheritance System.Object AttributeSource TokenStream TokenFilter DelimitedPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DelimitedPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DelimitedPayloadTokenFilter(TokenStream, Char, IPayloadEncoder) Declaration public DelimitedPayloadTokenFilter(TokenStream input, char delimiter, IPayloadEncoder encoder) Parameters Type Name Description TokenStream input System.Char delimiter IPayloadEncoder encoder Fields | Improve this Doc View Source DEFAULT_DELIMITER Declaration public const char DEFAULT_DELIMITER = '|' Field Value Type Description System.Char Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html",
    "title": "Class DelimitedPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DelimitedPayloadTokenFilterFactory Factory for DelimitedPayloadTokenFilter . <fieldType name=\"text_dlmtd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DelimitedPayloadTokenFilterFactory\" encoder=\"float\" delimiter=\"|\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory DelimitedPayloadTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DelimitedPayloadTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source DelimitedPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new DelimitedPayloadTokenFilterFactory Declaration public DelimitedPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DELIMITER_ATTR Declaration public const string DELIMITER_ATTR = \"delimiter\" Field Value Type Description System.String | Improve this Doc View Source ENCODER_ATTR Declaration public const string ENCODER_ATTR = \"encoder\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.html",
    "title": "Namespace Lucene.Net.Analysis.Payloads | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Payloads <!-- 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 various convenience classes for creating payloads on Tokens. Classes AbstractEncoder Base class for payload encoders. DelimitedPayloadTokenFilter Characters before the delimiter are the \"token\", those after are the payload. For example, if the delimiter is '|', then for the string \"foo|bar\", foo is the token and \"bar\" is a payload. Note, you can also include a IPayloadEncoder to convert the payload in an appropriate way (from characters to bytes). Note make sure your Tokenizer doesn't split on the delimiter, or this won't work DelimitedPayloadTokenFilterFactory Factory for DelimitedPayloadTokenFilter . <fieldType name=\"text_dlmtd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DelimitedPayloadTokenFilterFactory\" encoder=\"float\" delimiter=\"|\"/> </analyzer> </fieldType> IdentityEncoder Does nothing other than convert the char array to a byte array using the specified encoding. IntegerEncoder Encode a character array System.Int32 as a BytesRef . See EncodeInt32(Int32, Byte[], Int32) . NumericPayloadTokenFilter Assigns a payload to a token based on the Type NumericPayloadTokenFilterFactory Factory for NumericPayloadTokenFilter . <fieldType name=\"text_numpayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NumericPayloadTokenFilterFactory\" payload=\"24\" typeMatch=\"word\"/> </analyzer> </fieldType> PayloadHelper Utility methods for encoding payloads. SingleEncoder Encode a character array System.Single as a BytesRef . NOTE: This was FloatEncoder in Lucene TokenOffsetPayloadTokenFilter Adds the StartOffset and EndOffset First 4 bytes are the start TokenOffsetPayloadTokenFilterFactory Factory for TokenOffsetPayloadTokenFilter . <fieldType name=\"text_tokenoffset\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TokenOffsetPayloadTokenFilterFactory\"/> </analyzer> </fieldType> TypeAsPayloadTokenFilter Makes the Type a payload. Encodes the type using System.Text.Encoding.UTF8.GetBytes(string) TypeAsPayloadTokenFilterFactory Factory for TypeAsPayloadTokenFilter . <fieldType name=\"text_typeaspayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TypeAsPayloadTokenFilterFactory\"/> </analyzer> </fieldType> Interfaces IPayloadEncoder Mainly for use with the DelimitedPayloadTokenFilter , converts char buffers to BytesRef . NOTE: This interface is subject to change"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IdentityEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IdentityEncoder.html",
    "title": "Class IdentityEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IdentityEncoder Does nothing other than convert the char array to a byte array using the specified encoding. Inheritance System.Object AbstractEncoder IdentityEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IdentityEncoder : AbstractEncoder, IPayloadEncoder Constructors | Improve this Doc View Source IdentityEncoder() Declaration public IdentityEncoder() | Improve this Doc View Source IdentityEncoder(Encoding) Declaration public IdentityEncoder(Encoding charset) Parameters Type Name Description System.Text.Encoding charset Fields | Improve this Doc View Source m_charset Declaration protected Encoding m_charset Field Value Type Description System.Text.Encoding Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IntegerEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IntegerEncoder.html",
    "title": "Class IntegerEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IntegerEncoder Encode a character array System.Int32 as a BytesRef . See EncodeInt32(Int32, Byte[], Int32) . Inheritance System.Object AbstractEncoder IntegerEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IntegerEncoder : AbstractEncoder, IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IPayloadEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IPayloadEncoder.html",
    "title": "Interface IPayloadEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPayloadEncoder Mainly for use with the DelimitedPayloadTokenFilter , converts char buffers to BytesRef . NOTE: This interface is subject to change Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[]) Declaration BytesRef Encode(char[] buffer) Parameters Type Name Description System.Char [] buffer Returns Type Description BytesRef | Improve this Doc View Source Encode(Char[], Int32, Int32) Convert a char array to a BytesRef Declaration BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef encoded BytesRef"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html",
    "title": "Class NumericPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericPayloadTokenFilter Assigns a payload to a token based on the Type Inheritance System.Object AttributeSource TokenStream TokenFilter NumericPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NumericPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NumericPayloadTokenFilter(TokenStream, Single, String) Declaration public NumericPayloadTokenFilter(TokenStream input, float payload, string typeMatch) Parameters Type Name Description TokenStream input System.Single payload System.String typeMatch Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html",
    "title": "Class NumericPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericPayloadTokenFilterFactory Factory for NumericPayloadTokenFilter . <fieldType name=\"text_numpayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NumericPayloadTokenFilterFactory\" payload=\"24\" typeMatch=\"word\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NumericPayloadTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NumericPayloadTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NumericPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new NumericPayloadTokenFilterFactory Declaration public NumericPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.PayloadHelper.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.PayloadHelper.html",
    "title": "Class PayloadHelper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadHelper Utility methods for encoding payloads. Inheritance System.Object PayloadHelper 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PayloadHelper Methods | Improve this Doc View Source DecodeInt32(Byte[], Int32) NOTE: This was decodeInt() in Lucene Declaration public static int DecodeInt32(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source DecodeSingle(Byte[]) NOTE: This was decodeFloat() in Lucene Declaration public static float DecodeSingle(byte[] bytes) Parameters Type Name Description System.Byte [] bytes Returns Type Description System.Single the decoded float See Also DecodeSingle(Byte[], Int32) EncodeSingle(Single) | Improve this Doc View Source DecodeSingle(Byte[], Int32) Decode the payload that was encoded using EncodeSingle(Single) . NOTE: the length of the array must be at least offset + 4 long. NOTE: This was decodeFloat() in Lucene Declaration public static float DecodeSingle(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes The bytes to decode System.Int32 offset The offset into the array. Returns Type Description System.Single The float that was encoded See Also EncodeSingle(Single) | Improve this Doc View Source EncodeInt32(Int32) NOTE: This was encodeInt() in Lucene Declaration public static byte[] EncodeInt32(int payload) Parameters Type Name Description System.Int32 payload Returns Type Description System.Byte [] | Improve this Doc View Source EncodeInt32(Int32, Byte[], Int32) NOTE: This was encodeInt() in Lucene Declaration public static byte[] EncodeInt32(int payload, byte[] data, int offset) Parameters Type Name Description System.Int32 payload System.Byte [] data System.Int32 offset Returns Type Description System.Byte [] | Improve this Doc View Source EncodeSingle(Single) NOTE: This was encodeFloat() in Lucene Declaration public static byte[] EncodeSingle(float payload) Parameters Type Name Description System.Single payload Returns Type Description System.Byte [] | Improve this Doc View Source EncodeSingle(Single, Byte[], Int32) NOTE: This was encodeFloat() in Lucene Declaration public static byte[] EncodeSingle(float payload, byte[] data, int offset) Parameters Type Name Description System.Single payload System.Byte [] data System.Int32 offset Returns Type Description System.Byte []"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.SingleEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.SingleEncoder.html",
    "title": "Class SingleEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleEncoder Encode a character array System.Single as a BytesRef . NOTE: This was FloatEncoder in Lucene Inheritance System.Object AbstractEncoder SingleEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SingleEncoder : AbstractEncoder, IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder See Also EncodeSingle(Single, Byte[], Int32)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html",
    "title": "Class TokenOffsetPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenOffsetPayloadTokenFilter Adds the StartOffset and EndOffset First 4 bytes are the start Inheritance System.Object AttributeSource TokenStream TokenFilter TokenOffsetPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenOffsetPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TokenOffsetPayloadTokenFilter(TokenStream) Declaration public TokenOffsetPayloadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html",
    "title": "Class TokenOffsetPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenOffsetPayloadTokenFilterFactory Factory for TokenOffsetPayloadTokenFilter . <fieldType name=\"text_tokenoffset\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TokenOffsetPayloadTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TokenOffsetPayloadTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenOffsetPayloadTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TokenOffsetPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new TokenOffsetPayloadTokenFilterFactory Declaration public TokenOffsetPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html",
    "title": "Class TypeAsPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TypeAsPayloadTokenFilter Makes the Type a payload. Encodes the type using System.Text.Encoding.UTF8.GetBytes(string) Inheritance System.Object AttributeSource TokenStream TokenFilter TypeAsPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TypeAsPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TypeAsPayloadTokenFilter(TokenStream) Declaration public TypeAsPayloadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html",
    "title": "Class TypeAsPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TypeAsPayloadTokenFilterFactory Factory for TypeAsPayloadTokenFilter . <fieldType name=\"text_typeaspayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TypeAsPayloadTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TypeAsPayloadTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TypeAsPayloadTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TypeAsPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new TypeAsPayloadTokenFilterFactory Declaration public TypeAsPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.html",
    "title": "Namespace Lucene.Net.Analysis.Position | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Position <!-- 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. --> Filter for assigning position increments. Classes PositionFilter Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. PositionFilterFactory Factory for PositionFilter . Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. <fieldType name=\"text_position\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PositionFilterFactory\" positionIncrement=\"0\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilter.html",
    "title": "Class PositionFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PositionFilter Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. Inheritance System.Object AttributeSource TokenStream TokenFilter PositionFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Position Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(4.4) PositionFilter makes TokenStream graphs inconsistent\")] public sealed class PositionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PositionFilter(TokenStream) Constructs a PositionFilter that assigns a position increment of zero to all but the first token from the given input stream. Declaration public PositionFilter(TokenStream input) Parameters Type Name Description TokenStream input the input stream | Improve this Doc View Source PositionFilter(TokenStream, Int32) Constructs a PositionFilter that assigns the given position increment to all but the first token from the given input stream. Declaration public PositionFilter(TokenStream input, int positionIncrement) Parameters Type Name Description TokenStream input the input stream System.Int32 positionIncrement position increment to assign to all but the first token from the input stream Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilterFactory.html",
    "title": "Class PositionFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PositionFilterFactory Factory for PositionFilter . Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. <fieldType name=\"text_position\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PositionFilterFactory\" positionIncrement=\"0\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PositionFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Position Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(4.4)\")] public class PositionFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PositionFilterFactory(IDictionary<String, String>) Creates a new PositionFilterFactory Declaration public PositionFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PositionFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.html",
    "title": "Namespace Lucene.Net.Analysis.Pt | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pt <!-- 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. --> Analyzer for Portuguese. Classes PortugueseAnalyzer Analyzer for Portuguese. You must specify the required LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. PortugueseLightStemFilter A TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseLightStemFilterFactory Factory for PortugueseLightStemFilter . <fieldType name=\"text_ptlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseLightStemFilterFactory\"/> </analyzer> </fieldType> PortugueseLightStemmer Light Stemmer for Portuguese This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy PortugueseMinimalStemFilter A TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseMinimalStemFilterFactory Factory for PortugueseMinimalStemFilter . <fieldType name=\"text_ptminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseMinimalStemFilterFactory\"/> </analyzer> </fieldType> PortugueseMinimalStemmer Minimal Stemmer for Portuguese This follows the \"RSLP-S\" algorithm presented in: A study on the Use of Stemming for Monolingual Ad-Hoc Portuguese Information Retrieval (Orengo, et al) which is just the plural reduction step of the RSLP algorithm from A Stemming Algorithm for the Portuguese Language , Orengo et al. PortugueseStemFilter A TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseStemFilterFactory Factory for PortugueseStemFilter . <fieldType name=\"text_ptstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseStemFilterFactory\"/> </analyzer> </fieldType> PortugueseStemmer Portuguese stemmer implementing the RSLP (Removedor de Sufixos da Lingua Portuguesa) algorithm. This is sometimes also referred to as the Orengo stemmer. RSLPStemmerBase Base class for stemmers that use a set of RSLP-like stemming steps. RSLP (Removedor de Sufixos da Lingua Portuguesa) is an algorithm designed originally for stemming the Portuguese language, described in the paper A Stemming Algorithm for the Portuguese Language , Orengo et. al. Since this time a plural-only modification (RSLP-S) as well as a modification for the Galician language have been implemented. This class parses a configuration file that describes RSLPStemmerBase.Step s, where each RSLPStemmerBase.Step contains a set of RSLPStemmerBase.Rule s. The general rule format is: { \"suffix\", N, \"replacement\", { \"exception1\", \"exception2\", ...}} where: suffix is the suffix to be removed (such as \"inho\"). N is the min stem size, where stem is defined as the candidate stem after removing the suffix (but before appending the replacement!) replacement is an optimal string to append after removing the suffix. This can be the empty string. exceptions is an optional list of exceptions, patterns that should not be stemmed. These patterns can be specified as whole word or suffix (ends-with) patterns, depending upon the exceptions format flag in the step header. A step is an ordered list of rules, with a structure in this format: { \"name\", N, B, { \"cond1\", \"cond2\", ... } ... rules ... }; where: name is a name for the step (such as \"Plural\"). N is the min word size. Words that are less than this length bypass the step completely, as an optimization. Note: N can be zero, in this case this implementation will automatically calculate the appropriate value from the underlying rules. B is a \"boolean\" flag specifying how exceptions in the rules are matched. A value of 1 indicates whole-word pattern matching, a value of 0 indicates that exceptions are actually suffixes and should be matched with ends-with. conds are an optional list of conditions to enter the step at all. If the list is non-empty, then a word must end with one of these conditions or it will bypass the step completely as an optimization. RSLP description This is a Lucene.NET INTERNAL API, use at your own risk RSLPStemmerBase.Rule A basic rule, with no exceptions. RSLPStemmerBase.RuleWithSetExceptions A rule with a set of whole-word exceptions. RSLPStemmerBase.RuleWithSuffixExceptions A rule with a set of exceptional suffixes. RSLPStemmerBase.Step A step containing a list of rules."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html",
    "title": "Class PortugueseAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseAnalyzer Analyzer for Portuguese. You must specify the required LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. Inheritance System.Object Analyzer StopwordAnalyzerBase PortugueseAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PortugueseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public PortugueseAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public PortugueseAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Portuguese stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"portuguese_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and PortugueseLightStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html",
    "title": "Class PortugueseLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseLightStemFilter A TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseLightStemFilter(TokenStream) Declaration public PortugueseLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html",
    "title": "Class PortugueseLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseLightStemFilterFactory Factory for PortugueseLightStemFilter . <fieldType name=\"text_ptlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PortugueseLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PortugueseLightStemFilterFactory(IDictionary<String, String>) Creates a new PortugueseLightStemFilterFactory Declaration public PortugueseLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html",
    "title": "Class PortugueseLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseLightStemmer Light Stemmer for Portuguese This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object PortugueseLightStemmer 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html",
    "title": "Class PortugueseMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseMinimalStemFilter A TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseMinimalStemFilter(TokenStream) Declaration public PortugueseMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html",
    "title": "Class PortugueseMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseMinimalStemFilterFactory Factory for PortugueseMinimalStemFilter . <fieldType name=\"text_ptminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PortugueseMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PortugueseMinimalStemFilterFactory(IDictionary<String, String>) Creates a new PortugueseMinimalStemFilterFactory Declaration public PortugueseMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html",
    "title": "Class PortugueseMinimalStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseMinimalStemmer Minimal Stemmer for Portuguese This follows the \"RSLP-S\" algorithm presented in: A study on the Use of Stemming for Monolingual Ad-Hoc Portuguese Information Retrieval (Orengo, et al) which is just the plural reduction step of the RSLP algorithm from A Stemming Algorithm for the Portuguese Language , Orengo et al. Inheritance System.Object RSLPStemmerBase PortugueseMinimalStemmer Inherited Members RSLPStemmerBase.Parse(Type, 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseMinimalStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilter.html",
    "title": "Class PortugueseStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseStemFilter A TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseStemFilter(TokenStream) Declaration public PortugueseStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html",
    "title": "Class PortugueseStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseStemFilterFactory Factory for PortugueseStemFilter . <fieldType name=\"text_ptstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PortugueseStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PortugueseStemFilterFactory(IDictionary<String, String>) Creates a new PortugueseStemFilterFactory Declaration public PortugueseStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseStemmer Portuguese stemmer implementing the RSLP (Removedor de Sufixos da Lingua Portuguesa) algorithm. This is sometimes also referred to as the Orengo stemmer. Inheritance System.Object RSLPStemmerBase PortugueseStemmer Inherited Members RSLPStemmerBase.Parse(Type, 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s buffer, oversized to at least len+1 System.Int32 len initial valid length of buffer Returns Type Description System.Int32 new valid length, stemmed See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.html",
    "title": "Class RSLPStemmerBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RSLPStemmerBase Base class for stemmers that use a set of RSLP-like stemming steps. RSLP (Removedor de Sufixos da Lingua Portuguesa) is an algorithm designed originally for stemming the Portuguese language, described in the paper A Stemming Algorithm for the Portuguese Language , Orengo et. al. Since this time a plural-only modification (RSLP-S) as well as a modification for the Galician language have been implemented. This class parses a configuration file that describes RSLPStemmerBase.Step s, where each RSLPStemmerBase.Step contains a set of RSLPStemmerBase.Rule s. The general rule format is: { \"suffix\", N, \"replacement\", { \"exception1\", \"exception2\", ...}} where: suffix is the suffix to be removed (such as \"inho\"). N is the min stem size, where stem is defined as the candidate stem after removing the suffix (but before appending the replacement!) replacement is an optimal string to append after removing the suffix. This can be the empty string. exceptions is an optional list of exceptions, patterns that should not be stemmed. These patterns can be specified as whole word or suffix (ends-with) patterns, depending upon the exceptions format flag in the step header. A step is an ordered list of rules, with a structure in this format: { \"name\", N, B, { \"cond1\", \"cond2\", ... } ... rules ... }; where: name is a name for the step (such as \"Plural\"). N is the min word size. Words that are less than this length bypass the step completely, as an optimization. Note: N can be zero, in this case this implementation will automatically calculate the appropriate value from the underlying rules. B is a \"boolean\" flag specifying how exceptions in the rules are matched. A value of 1 indicates whole-word pattern matching, a value of 0 indicates that exceptions are actually suffixes and should be matched with ends-with. conds are an optional list of conditions to enter the step at all. If the list is non-empty, then a word must end with one of these conditions or it will bypass the step completely as an optimization. RSLP description This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RSLPStemmerBase GalicianMinimalStemmer GalicianStemmer PortugueseMinimalStemmer PortugueseStemmer 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class RSLPStemmerBase Methods | Improve this Doc View Source Parse(Type, String) Parse a resource file into an RSLP stemmer description. Declaration protected static IDictionary<string, RSLPStemmerBase.Step> Parse(Type clazz, string resource) Parameters Type Name Description System.Type clazz System.String resource Returns Type Description System.Collections.Generic.IDictionary < System.String , RSLPStemmerBase.Step > a Map containing the named RSLPStemmerBase.Step s in this description."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html",
    "title": "Class RSLPStemmerBase.Rule | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RSLPStemmerBase.Rule A basic rule, with no exceptions. Inheritance System.Object RSLPStemmerBase.Rule RSLPStemmerBase.RuleWithSetExceptions RSLPStemmerBase.RuleWithSuffixExceptions 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class Rule Constructors | Improve this Doc View Source Rule(String, Int32, String) Create a rule. Declaration public Rule(string suffix, int min, string replacement) Parameters Type Name Description System.String suffix suffix to remove System.Int32 min minimum stem length System.String replacement replacement string Fields | Improve this Doc View Source m_min Declaration protected readonly int m_min Field Value Type Description System.Int32 | Improve this Doc View Source m_replacement Declaration protected readonly char[] m_replacement Field Value Type Description System.Char [] | Improve this Doc View Source m_suffix Declaration protected readonly char[] m_suffix Field Value Type Description System.Char [] Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public virtual bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean true if the word matches this rule. | Improve this Doc View Source Replace(Char[], Int32) Declaration public virtual int Replace(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 new valid length of the string after firing this rule."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSetExceptions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RSLPStemmerBase.RuleWithSetExceptions A rule with a set of whole-word exceptions. Inheritance System.Object RSLPStemmerBase.Rule RSLPStemmerBase.RuleWithSetExceptions Inherited Members RSLPStemmerBase.Rule.m_suffix RSLPStemmerBase.Rule.m_replacement RSLPStemmerBase.Rule.m_min RSLPStemmerBase.Rule.Replace(Char[], 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class RuleWithSetExceptions : RSLPStemmerBase.Rule Constructors | Improve this Doc View Source RuleWithSetExceptions(String, Int32, String, String[]) Declaration public RuleWithSetExceptions(string suffix, int min, string replacement, string[] exceptions) Parameters Type Name Description System.String suffix System.Int32 min System.String replacement System.String [] exceptions Fields | Improve this Doc View Source m_exceptions Declaration protected readonly CharArraySet m_exceptions Field Value Type Description CharArraySet Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public override bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean Overrides RSLPStemmerBase.Rule.Matches(Char[], Int32)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSuffixExceptions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RSLPStemmerBase.RuleWithSuffixExceptions A rule with a set of exceptional suffixes. Inheritance System.Object RSLPStemmerBase.Rule RSLPStemmerBase.RuleWithSuffixExceptions Inherited Members RSLPStemmerBase.Rule.m_suffix RSLPStemmerBase.Rule.m_replacement RSLPStemmerBase.Rule.m_min RSLPStemmerBase.Rule.Replace(Char[], 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class RuleWithSuffixExceptions : RSLPStemmerBase.Rule Constructors | Improve this Doc View Source RuleWithSuffixExceptions(String, Int32, String, String[]) Declaration public RuleWithSuffixExceptions(string suffix, int min, string replacement, string[] exceptions) Parameters Type Name Description System.String suffix System.Int32 min System.String replacement System.String [] exceptions Fields | Improve this Doc View Source m_exceptions Declaration protected readonly char[][] m_exceptions Field Value Type Description System.Char [][] Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public override bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean Overrides RSLPStemmerBase.Rule.Matches(Char[], Int32)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html",
    "title": "Class RSLPStemmerBase.Step | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RSLPStemmerBase.Step A step containing a list of rules. Inheritance System.Object RSLPStemmerBase.Step 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.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class Step Constructors | Improve this Doc View Source Step(String, RSLPStemmerBase.Rule[], Int32, String[]) Create a new step Declaration public Step(string name, RSLPStemmerBase.Rule[] rules, int min, string[] suffixes) Parameters Type Name Description System.String name Step's name. RSLPStemmerBase.Rule [] rules an ordered list of rules. System.Int32 min minimum word size. if this is 0 it is automatically calculated. System.String [] suffixes optional list of conditional suffixes. may be null. Fields | Improve this Doc View Source m_min Declaration protected readonly int m_min Field Value Type Description System.Int32 | Improve this Doc View Source m_name Declaration protected readonly string m_name Field Value Type Description System.String | Improve this Doc View Source m_rules Declaration protected readonly RSLPStemmerBase.Rule[] m_rules Field Value Type Description RSLPStemmerBase.Rule [] | Improve this Doc View Source m_suffixes Declaration protected readonly char[][] m_suffixes Field Value Type Description System.Char [][] Methods | Improve this Doc View Source Apply(Char[], Int32) Declaration public virtual int Apply(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 new valid length of the string after applying the entire step."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.html",
    "title": "Namespace Lucene.Net.Analysis.Query | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Query <!-- 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. --> Automatically filter high-frequency stopwords. Classes QueryAutoStopWordAnalyzer An Analyzer used primarily at query time to wrap another analyzer and provide a layer of protection which prevents very common words from being passed into queries. For very large indexes the cost of reading TermDocs for a very common word can be high. This analyzer was created after experience with a 38 million doc index which had a term in around 50% of docs and was causing TermQueries for this term to take 2 seconds."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html",
    "title": "Class QueryAutoStopWordAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryAutoStopWordAnalyzer An Analyzer used primarily at query time to wrap another analyzer and provide a layer of protection which prevents very common words from being passed into queries. For very large indexes the cost of reading TermDocs for a very common word can be high. This analyzer was created after experience with a 38 million doc index which had a term in around 50% of docs and was causing TermQueries for this term to take 2 seconds. Inheritance System.Object Analyzer AnalyzerWrapper QueryAutoStopWordAnalyzer Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Query Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class QueryAutoStopWordAnalyzer : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency percentage greater than defaultMaxDocFreqPercent Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, ICollection<String>, Int32) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for the given selection of fields from terms with a document frequency greater than the given maxDocFreq Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, ICollection<string> fields, int maxDocFreq) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Collections.Generic.ICollection < System.String > fields Selection of fields to calculate stopwords for System.Int32 maxDocFreq Document frequency terms should be above in order to be stopwords Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, ICollection<String>, Single) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for the given selection of fields from terms with a document frequency percentage greater than the given maxPercentDocs Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, ICollection<string> fields, float maxPercentDocs) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Collections.Generic.ICollection < System.String > fields Selection of fields to calculate stopwords for System.Single maxPercentDocs The maximum percentage (between 0.0 and 1.0) of index documents which contain a term, after which the word is considered to be a stop word Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, Int32) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency greater than the given maxDocFreq Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, int maxDocFreq) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Int32 maxDocFreq Document frequency terms should be above in order to be stopwords Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, Single) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency percentage greater than the given maxPercentDocs Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, float maxPercentDocs) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Single maxPercentDocs The maximum percentage (between 0.0 and 1.0) of index documents which contain a term, after which the word is considered to be a stop word Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader Fields | Improve this Doc View Source defaultMaxDocFreqPercent Declaration public const float defaultMaxDocFreqPercent = 0.4F Field Value Type Description System.Single Methods | Improve this Doc View Source GetStopWords() Provides information on which stop words have been identified for all fields Declaration public Term[] GetStopWords() Returns Type Description Term [] the stop words (as terms) | Improve this Doc View Source GetStopWords(String) Provides information on which stop words have been identified for a field Declaration public string[] GetStopWords(string fieldName) Parameters Type Name Description System.String fieldName The field for which stop words identified in \"addStopWords\" method calls will be returned Returns Type Description System.String [] the stop words identified for a field | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.html",
    "title": "Namespace Lucene.Net.Analysis.Reverse | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Reverse <!-- 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. --> Filter to reverse token text. Classes ReverseStringFilter Reverse token string, for example \"country\" => \"yrtnuoc\". If Lucene.Net.Analysis.Reverse.ReverseStringFilter.marker is supplied, then tokens will be also prepended by that character. For example, with a marker of \\u0001, \"country\" => \"\\u0001yrtnuoc\". This is useful when implementing efficient leading wildcards search. You must specify the required LuceneVersion compatibility when creating ReverseStringFilter , or when using any of its static methods: As of 3.1, supplementary characters are handled correctly ReverseStringFilterFactory Factory for ReverseStringFilter . <fieldType name=\"text_rvsstr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ReverseStringFilterFactory\"/> </analyzer> </fieldType> @since solr 1.4"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilter.html",
    "title": "Class ReverseStringFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReverseStringFilter Reverse token string, for example \"country\" => \"yrtnuoc\". If Lucene.Net.Analysis.Reverse.ReverseStringFilter.marker is supplied, then tokens will be also prepended by that character. For example, with a marker of \\u0001, \"country\" => \"\\u0001yrtnuoc\". This is useful when implementing efficient leading wildcards search. You must specify the required LuceneVersion compatibility when creating ReverseStringFilter , or when using any of its static methods: As of 3.1, supplementary characters are handled correctly Inheritance System.Object AttributeSource TokenStream TokenFilter ReverseStringFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Reverse Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ReverseStringFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ReverseStringFilter(LuceneVersion, TokenStream) Create a new ReverseStringFilter that reverses all tokens in the supplied TokenStream . The reversed tokens will not be marked. Declaration public ReverseStringFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to filter | Improve this Doc View Source ReverseStringFilter(LuceneVersion, TokenStream, Char) Create a new ReverseStringFilter that reverses and marks all tokens in the supplied TokenStream . The reversed tokens will be prepended (marked) by the marker character. Declaration public ReverseStringFilter(LuceneVersion matchVersion, TokenStream in, char marker) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to filter System.Char marker A character used to mark reversed tokens Fields | Improve this Doc View Source INFORMATION_SEPARATOR_MARKER Example marker character: U+001F (INFORMATION SEPARATOR ONE) Declaration public const char INFORMATION_SEPARATOR_MARKER = '\\u001f' Field Value Type Description System.Char | Improve this Doc View Source PUA_EC00_MARKER Example marker character: U+EC00 (PRIVATE USE AREA: EC00) Declaration public const char PUA_EC00_MARKER = '' Field Value Type Description System.Char | Improve this Doc View Source RTL_DIRECTION_MARKER Example marker character: U+200F (RIGHT-TO-LEFT MARK) Declaration public const char RTL_DIRECTION_MARKER = '‏' Field Value Type Description System.Char | Improve this Doc View Source START_OF_HEADING_MARKER Example marker character: U+0001 (START OF HEADING) Declaration public const char START_OF_HEADING_MARKER = '\\u0001' Field Value Type Description System.Char Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reverse(LuceneVersion, Char[]) Reverses the given input buffer in-place Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse | Improve this Doc View Source Reverse(LuceneVersion, Char[], Int32) Partially reverses the given input buffer in-place from offset 0 up to the given length. Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer, int len) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse System.Int32 len the length in the buffer up to where the buffer should be reversed | Improve this Doc View Source Reverse(LuceneVersion, Char[], Int32, Int32) Partially reverses the given input buffer in-place from the given offset up to the given length. Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer, int start, int len) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse System.Int32 start the offset from where to reverse the buffer System.Int32 len the length in the buffer up to where the buffer should be reversed | Improve this Doc View Source Reverse(LuceneVersion, String) Reverses the given input string Declaration public static string Reverse(LuceneVersion matchVersion, string input) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.String input the string to reverse Returns Type Description System.String the given input string in reversed order Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html",
    "title": "Class ReverseStringFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReverseStringFilterFactory Factory for ReverseStringFilter . <fieldType name=\"text_rvsstr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ReverseStringFilterFactory\"/> </analyzer> </fieldType> @since solr 1.4 Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ReverseStringFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Reverse Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ReverseStringFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ReverseStringFilterFactory(IDictionary<String, String>) Creates a new ReverseStringFilterFactory Declaration public ReverseStringFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.html",
    "title": "Namespace Lucene.Net.Analysis.Ro | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ro <!-- 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. --> Analyzer for Romanian. Classes RomanianAnalyzer Analyzer for Romanian."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.RomanianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.RomanianAnalyzer.html",
    "title": "Class RomanianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RomanianAnalyzer Analyzer for Romanian. Inheritance System.Object Analyzer StopwordAnalyzerBase RomanianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Ro Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RomanianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source RomanianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public RomanianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source RomanianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public RomanianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source RomanianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public RomanianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Romanian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.html",
    "title": "Namespace Lucene.Net.Analysis.Ru | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ru <!-- 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. --> Analyzer for Russian. Classes RussianAnalyzer Analyzer for Russian language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating RussianAnalyzer : As of 3.1, StandardTokenizer is used, Snowball stemming is done with SnowballFilter , and Snowball stopwords are used by default. RussianLetterTokenizer A RussianLetterTokenizer is a Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required LuceneVersion compatibility when creating RussianLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. RussianLetterTokenizerFactory RussianLightStemFilter A TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . RussianLightStemFilterFactory Factory for RussianLightStemFilter . <fieldType name=\"text_rulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RussianLightStemFilterFactory\"/> </analyzer> </fieldType> RussianLightStemmer Light Stemmer for Russian. This stemmer implements the following algorithm: Indexing and Searching Strategies for the Russian Language. Ljiljana Dolamic and Jacques Savoy."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianAnalyzer.html",
    "title": "Class RussianAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RussianAnalyzer Analyzer for Russian language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating RussianAnalyzer : As of 3.1, StandardTokenizer is used, Snowball stemming is done with SnowballFilter , and Snowball stopwords are used by default. Inheritance System.Object Analyzer StopwordAnalyzerBase RussianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RussianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source RussianAnalyzer(LuceneVersion) Declaration public RussianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source RussianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public RussianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source RussianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public RussianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of words not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Russian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"russian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, and SnowballFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html",
    "title": "Class RussianLetterTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RussianLetterTokenizer A RussianLetterTokenizer is a Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required LuceneVersion compatibility when creating RussianLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer RussianLetterTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizer instead, which has the same functionality.\")] public class RussianLetterTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source RussianLetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new RussianLetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public RussianLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source RussianLetterTokenizer(LuceneVersion, TextReader) Construct a new RussianLetterTokenizer . Declaration public RussianLetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which satisfy J2N.Character.IsLetter(System.Int32) . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html",
    "title": "Class RussianLetterTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RussianLetterTokenizerFactory Inheritance System.Object AbstractAnalysisFactory TokenizerFactory RussianLetterTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use Standard.StandardTokenizerFactory instead.\")] public class RussianLetterTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source RussianLetterTokenizerFactory(IDictionary<String, String>) Creates a new RussianLetterTokenizerFactory Declaration public RussianLetterTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilter.html",
    "title": "Class RussianLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RussianLightStemFilter A TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter RussianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RussianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source RussianLightStemFilter(TokenStream) Declaration public RussianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html",
    "title": "Class RussianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RussianLightStemFilterFactory Factory for RussianLightStemFilter . <fieldType name=\"text_rulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RussianLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory RussianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source RussianLightStemFilterFactory(IDictionary<String, String>) Creates a new RussianLightStemFilterFactory Declaration public RussianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemmer.html",
    "title": "Class RussianLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RussianLightStemmer Light Stemmer for Russian. This stemmer implements the following algorithm: Indexing and Searching Strategies for the Russian Language. Ljiljana Dolamic and Jacques Savoy. Inheritance System.Object RussianLightStemmer 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.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.html",
    "title": "Namespace Lucene.Net.Analysis.Shingle | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Shingle <!-- 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. --> Word n-gram filters Classes ShingleAnalyzerWrapper A ShingleAnalyzerWrapper wraps a ShingleFilter around another Analyzer . A shingle is another name for a token based n-gram. ShingleFilter A ShingleFilter constructs shingles (token n-grams) from a token stream. In other words, it creates combinations of tokens as a single token. For example, the sentence \"please divide this sentence into shingles\" might be tokenized into shingles \"please divide\", \"divide this\", \"this sentence\", \"sentence into\", and \"into shingles\". This filter handles position increments > 1 by inserting filler tokens (tokens with termtext \"_\"). It does not handle a position increment of 0. ShingleFilterFactory Factory for ShingleFilter . <fieldType name=\"text_shingle\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ShingleFilterFactory\" minShingleSize=\"2\" maxShingleSize=\"2\" outputUnigrams=\"true\" outputUnigramsIfNoShingles=\"false\" tokenSeparator=\" \" fillerToken=\"_\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html",
    "title": "Class ShingleAnalyzerWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShingleAnalyzerWrapper A ShingleAnalyzerWrapper wraps a ShingleFilter around another Analyzer . A shingle is another name for a token based n-gram. Inheritance System.Object Analyzer AnalyzerWrapper ShingleAnalyzerWrapper Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ShingleAnalyzerWrapper : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer) Parameters Type Name Description Analyzer defaultAnalyzer | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer, int maxShingleSize) Parameters Type Name Description Analyzer defaultAnalyzer System.Int32 maxShingleSize | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32, Int32) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer, int minShingleSize, int maxShingleSize) Parameters Type Name Description Analyzer defaultAnalyzer System.Int32 minShingleSize System.Int32 maxShingleSize | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32, Int32, String, Boolean, Boolean, String) Creates a new ShingleAnalyzerWrapper Declaration public ShingleAnalyzerWrapper(Analyzer delegate, int minShingleSize, int maxShingleSize, string tokenSeparator, bool outputUnigrams, bool outputUnigramsIfNoShingles, string fillerToken) Parameters Type Name Description Analyzer delegate Analyzer whose TokenStream is to be filtered System.Int32 minShingleSize Min shingle (token ngram) size System.Int32 maxShingleSize Max shingle size System.String tokenSeparator Used to separate input stream tokens in output shingles System.Boolean outputUnigrams Whether or not the filter shall pass the original tokens to the output stream System.Boolean outputUnigramsIfNoShingles Overrides the behavior of outputUnigrams==false for those times when no shingles are available (because there are fewer than minShingleSize tokens in the input stream)? Note that if outputUnigrams==true, then unigrams are always output, regardless of whether any shingles are available. System.String fillerToken filler token to use when positionIncrement is more than 1 | Improve this Doc View Source ShingleAnalyzerWrapper(LuceneVersion) Wraps StandardAnalyzer . Declaration public ShingleAnalyzerWrapper(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source ShingleAnalyzerWrapper(LuceneVersion, Int32, Int32) Wraps StandardAnalyzer . Declaration public ShingleAnalyzerWrapper(LuceneVersion matchVersion, int minShingleSize, int maxShingleSize) Parameters Type Name Description LuceneVersion matchVersion System.Int32 minShingleSize System.Int32 maxShingleSize Properties | Improve this Doc View Source FillerToken Declaration public string FillerToken { get; } Property Value Type Description System.String | Improve this Doc View Source MaxShingleSize The max shingle (token ngram) size Declaration public int MaxShingleSize { get; } Property Value Type Description System.Int32 The max shingle (token ngram) size | Improve this Doc View Source MinShingleSize The min shingle (token ngram) size Declaration public int MinShingleSize { get; } Property Value Type Description System.Int32 The min shingle (token ngram) size | Improve this Doc View Source OutputUnigrams Declaration public bool OutputUnigrams { get; } Property Value Type Description System.Boolean | Improve this Doc View Source OutputUnigramsIfNoShingles Declaration public bool OutputUnigramsIfNoShingles { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TokenSeparator Declaration public string TokenSeparator { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override sealed Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilter.html",
    "title": "Class ShingleFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShingleFilter A ShingleFilter constructs shingles (token n-grams) from a token stream. In other words, it creates combinations of tokens as a single token. For example, the sentence \"please divide this sentence into shingles\" might be tokenized into shingles \"please divide\", \"divide this\", \"this sentence\", \"sentence into\", and \"into shingles\". This filter handles position increments > 1 by inserting filler tokens (tokens with termtext \"_\"). It does not handle a position increment of 0. Inheritance System.Object AttributeSource TokenStream TokenFilter ShingleFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ShingleFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ShingleFilter(TokenStream) Construct a ShingleFilter with default shingle size: 2. Declaration public ShingleFilter(TokenStream input) Parameters Type Name Description TokenStream input input stream | Improve this Doc View Source ShingleFilter(TokenStream, Int32) Constructs a ShingleFilter with the specified shingle size from the TokenStream input Declaration public ShingleFilter(TokenStream input, int maxShingleSize) Parameters Type Name Description TokenStream input input stream System.Int32 maxShingleSize maximum shingle size produced by the filter. | Improve this Doc View Source ShingleFilter(TokenStream, Int32, Int32) Constructs a ShingleFilter with the specified shingle size from the TokenStream input Declaration public ShingleFilter(TokenStream input, int minShingleSize, int maxShingleSize) Parameters Type Name Description TokenStream input input stream System.Int32 minShingleSize minimum shingle size produced by the filter. System.Int32 maxShingleSize maximum shingle size produced by the filter. | Improve this Doc View Source ShingleFilter(TokenStream, String) Construct a ShingleFilter with the specified token type for shingle tokens and the default shingle size: 2 Declaration public ShingleFilter(TokenStream input, string tokenType) Parameters Type Name Description TokenStream input input stream System.String tokenType token type for shingle tokens Fields | Improve this Doc View Source DEFAULT_FILLER_TOKEN filler token for when positionIncrement is more than 1 Declaration public const string DEFAULT_FILLER_TOKEN = \"_\" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_MAX_SHINGLE_SIZE default maximum shingle size is 2. Declaration public const int DEFAULT_MAX_SHINGLE_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_SHINGLE_SIZE default minimum shingle size is 2. Declaration public const int DEFAULT_MIN_SHINGLE_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TOKEN_SEPARATOR The default string to use when joining adjacent tokens to form a shingle Declaration public const string DEFAULT_TOKEN_SEPARATOR = \" \" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_TOKEN_TYPE default token type attribute value is \"shingle\" Declaration public const string DEFAULT_TOKEN_TYPE = \"shingle\" Field Value Type Description System.String Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() | Improve this Doc View Source SetFillerToken(String) Sets the string to insert for each position at which there is no token (i.e., when position increment is greater than one). Declaration public void SetFillerToken(string fillerToken) Parameters Type Name Description System.String fillerToken string to insert at each position where there is no token | Improve this Doc View Source SetMaxShingleSize(Int32) Set the max shingle size (default: 2) Declaration public void SetMaxShingleSize(int maxShingleSize) Parameters Type Name Description System.Int32 maxShingleSize max size of output shingles | Improve this Doc View Source SetMinShingleSize(Int32) Set the min shingle size (default: 2). This method requires that the passed in minShingleSize is not greater than maxShingleSize, so make sure that maxShingleSize is set before calling this method. The unigram output option is independent of the min shingle size. Declaration public void SetMinShingleSize(int minShingleSize) Parameters Type Name Description System.Int32 minShingleSize min size of output shingles | Improve this Doc View Source SetOutputUnigrams(Boolean) Shall the output stream contain the input tokens (unigrams) as well as shingles? (default: true.) Declaration public void SetOutputUnigrams(bool outputUnigrams) Parameters Type Name Description System.Boolean outputUnigrams Whether or not the output stream shall contain the input tokens (unigrams) | Improve this Doc View Source SetOutputUnigramsIfNoShingles(Boolean) Shall we override the behavior of outputUnigrams==false for those times when no shingles are available (because there are fewer than minShingleSize tokens in the input stream)? (default: false.) Note that if outputUnigrams==true, then unigrams are always output, regardless of whether any shingles are available. Declaration public void SetOutputUnigramsIfNoShingles(bool outputUnigramsIfNoShingles) Parameters Type Name Description System.Boolean outputUnigramsIfNoShingles Whether or not to output a single unigram when no shingles are available. | Improve this Doc View Source SetTokenSeparator(String) Sets the string to use when joining adjacent tokens to form a shingle Declaration public void SetTokenSeparator(string tokenSeparator) Parameters Type Name Description System.String tokenSeparator used to separate input stream tokens in output shingles | Improve this Doc View Source SetTokenType(String) Set the type of the shingle tokens produced by this filter. (default: \"shingle\") Declaration public void SetTokenType(string tokenType) Parameters Type Name Description System.String tokenType token tokenType Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html",
    "title": "Class ShingleFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShingleFilterFactory Factory for ShingleFilter . <fieldType name=\"text_shingle\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ShingleFilterFactory\" minShingleSize=\"2\" maxShingleSize=\"2\" outputUnigrams=\"true\" outputUnigramsIfNoShingles=\"false\" tokenSeparator=\" \" fillerToken=\"_\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ShingleFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ShingleFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ShingleFilterFactory(IDictionary<String, String>) Creates a new ShingleFilterFactory Declaration public ShingleFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html",
    "title": "Class DateRecognizerSinkFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DateRecognizerSinkFilter Attempts to parse the ToString() as a Date using either the System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) or System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) methods. If a format is passed, System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) will be used, and the format must strictly match one of the specified formats as specified in the MSDN documentation. If the value is a Date, it will add it to the sink. Inheritance System.Object TeeSinkTokenFilter.SinkFilter DateRecognizerSinkFilter Inherited Members TeeSinkTokenFilter.SinkFilter.Reset() 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.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DateRecognizerSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source DateRecognizerSinkFilter() Creates a new instance of DateRecognizerSinkFilter using the current culture and System.Globalization.DateTimeStyles.None . Loosely matches standard DateTime formats using System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter() | Improve this Doc View Source DateRecognizerSinkFilter(IFormatProvider) Creates a new instance of DateRecognizerSinkFilter using the supplied culture and System.Globalization.DateTimeStyles.None . Loosely matches standard DateTime formats using System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(IFormatProvider culture) Parameters Type Name Description System.IFormatProvider culture An object that supplies culture-specific format information | Improve this Doc View Source DateRecognizerSinkFilter(IFormatProvider, DateTimeStyles) Creates a new instance of DateRecognizerSinkFilter using the supplied culture and System.Globalization.DateTimeStyles . Loosely matches standard DateTime formats using System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(IFormatProvider culture, DateTimeStyles style) Parameters Type Name Description System.IFormatProvider culture An object that supplies culture-specific format information System.Globalization.DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is System.Globalization.DateTimeStyles.None | Improve this Doc View Source DateRecognizerSinkFilter(String) Creates a new instance of DateRecognizerSinkFilter using the current culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string format) Parameters Type Name Description System.String format The allowable format of the ToString() . If supplied, it must match the format of the date exactly to get a match. | Improve this Doc View Source DateRecognizerSinkFilter(String, IFormatProvider) Creates a new instance of DateRecognizerSinkFilter using the supplied format, culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string format, IFormatProvider culture) Parameters Type Name Description System.String format The allowable format of the ToString() . If supplied, it must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information | Improve this Doc View Source DateRecognizerSinkFilter(String, IFormatProvider, DateTimeStyles) Creates a new instance of DateRecognizerSinkFilter using the supplied format, culture and System.Globalization.DateTimeStyles . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string format, IFormatProvider culture, DateTimeStyles style) Parameters Type Name Description System.String format The allowable format of the ToString() . If supplied, it must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information System.Globalization.DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is System.Globalization.DateTimeStyles.None | Improve this Doc View Source DateRecognizerSinkFilter(String[]) Creates a new instance of DateRecognizerSinkFilter using the current culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string[] formats) Parameters Type Name Description System.String [] formats An array of allowable formats of the ToString() . If supplied, one of them must match the format of the date exactly to get a match. | Improve this Doc View Source DateRecognizerSinkFilter(String[], IFormatProvider) Creates a new instance of DateRecognizerSinkFilter using the supplied formats, culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string[] formats, IFormatProvider culture) Parameters Type Name Description System.String [] formats An array of allowable formats of the ToString() . If supplied, one of them must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information | Improve this Doc View Source DateRecognizerSinkFilter(String[], IFormatProvider, DateTimeStyles) Creates a new instance of DateRecognizerSinkFilter using the supplied formats, culture and System.Globalization.DateTimeStyles . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string[] formats, IFormatProvider culture, DateTimeStyles style) Parameters Type Name Description System.String [] formats An array of allowable formats of the ToString() . If supplied, one of them must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information System.Globalization.DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is System.Globalization.DateTimeStyles.None Fields | Improve this Doc View Source m_culture Declaration protected IFormatProvider m_culture Field Value Type Description System.IFormatProvider | Improve this Doc View Source m_formats Declaration protected string[] m_formats Field Value Type Description System.String [] | Improve this Doc View Source m_style Declaration protected DateTimeStyles m_style Field Value Type Description System.Globalization.DateTimeStyles | Improve this Doc View Source m_termAtt Declaration protected ICharTermAttribute m_termAtt Field Value Type Description ICharTermAttribute Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.html",
    "title": "Namespace Lucene.Net.Analysis.Sinks | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Sinks <!-- 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. --> TeeSinkTokenFilter and implementations of TeeSinkTokenFilter.SinkFilter that might be useful. Classes DateRecognizerSinkFilter Attempts to parse the ToString() as a Date using either the System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) or System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) methods. If a format is passed, System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) will be used, and the format must strictly match one of the specified formats as specified in the MSDN documentation. If the value is a Date, it will add it to the sink. TeeSinkTokenFilter This TokenFilter provides the ability to set aside attribute states that have already been analyzed. This is useful in situations where multiple fields share many common analysis steps and then go their separate ways. It is also useful for doing things like entity extraction or proper noun analysis as part of the analysis workflow and saving off those tokens for use in another field. TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader1)); TeeSinkTokenFilter.SinkTokenStream sink1 = source1.NewSinkTokenStream(); TeeSinkTokenFilter.SinkTokenStream sink2 = source1.NewSinkTokenStream(); TeeSinkTokenFilter source2 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader2)); source2.AddSinkTokenStream(sink1); source2.AddSinkTokenStream(sink2); TokenStream final1 = new LowerCaseFilter(version, source1); TokenStream final2 = source2; TokenStream final3 = new EntityDetect(sink1); TokenStream final4 = new URLDetect(sink2); d.Add(new TextField(\"f1\", final1, Field.Store.NO)); d.Add(new TextField(\"f2\", final2, Field.Store.NO)); d.Add(new TextField(\"f3\", final3, Field.Store.NO)); d.Add(new TextField(\"f4\", final4, Field.Store.NO)); In this example, sink1 and sink2 will both get tokens from both reader1 and reader2 after whitespace tokenizer and now we can further wrap any of these in extra analysis, and more \"sources\" can be inserted if desired. It is important, that tees are consumed before sinks (in the above example, the field names must be less the sink's field names). If you are not sure, which stream is consumed first, you can simply add another sink and then pass all tokens to the sinks at once using ConsumeAllTokens() . This TokenFilter is exhausted after this. In the above example, change the example above to: ... TokenStream final1 = new LowerCaseFilter(version, source1.NewSinkTokenStream()); TokenStream final2 = source2.NewSinkTokenStream(); sink1.ConsumeAllTokens(); sink2.ConsumeAllTokens(); ... In this case, the fields can be added in any order, because the sources are not used anymore and all sinks are ready. Note, the EntityDetect and URLDetect TokenStreams are for the example and do not currently exist in Lucene. TeeSinkTokenFilter.SinkFilter A filter that decides which AttributeSource states to store in the sink. TeeSinkTokenFilter.SinkTokenStream TokenStream output from a tee with optional filtering. TokenRangeSinkFilter Counts the tokens as they go by and saves to the internal list those between the range of lower and upper, exclusive of upper TokenTypeSinkFilter Adds a token to the sink if it has a specific type."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html",
    "title": "Class TeeSinkTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TeeSinkTokenFilter This TokenFilter provides the ability to set aside attribute states that have already been analyzed. This is useful in situations where multiple fields share many common analysis steps and then go their separate ways. It is also useful for doing things like entity extraction or proper noun analysis as part of the analysis workflow and saving off those tokens for use in another field. TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader1)); TeeSinkTokenFilter.SinkTokenStream sink1 = source1.NewSinkTokenStream(); TeeSinkTokenFilter.SinkTokenStream sink2 = source1.NewSinkTokenStream(); TeeSinkTokenFilter source2 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader2)); source2.AddSinkTokenStream(sink1); source2.AddSinkTokenStream(sink2); TokenStream final1 = new LowerCaseFilter(version, source1); TokenStream final2 = source2; TokenStream final3 = new EntityDetect(sink1); TokenStream final4 = new URLDetect(sink2); d.Add(new TextField(\"f1\", final1, Field.Store.NO)); d.Add(new TextField(\"f2\", final2, Field.Store.NO)); d.Add(new TextField(\"f3\", final3, Field.Store.NO)); d.Add(new TextField(\"f4\", final4, Field.Store.NO)); In this example, sink1 and sink2 will both get tokens from both reader1 and reader2 after whitespace tokenizer and now we can further wrap any of these in extra analysis, and more \"sources\" can be inserted if desired. It is important, that tees are consumed before sinks (in the above example, the field names must be less the sink's field names). If you are not sure, which stream is consumed first, you can simply add another sink and then pass all tokens to the sinks at once using ConsumeAllTokens() . This TokenFilter is exhausted after this. In the above example, change the example above to: ... TokenStream final1 = new LowerCaseFilter(version, source1.NewSinkTokenStream()); TokenStream final2 = source2.NewSinkTokenStream(); sink1.ConsumeAllTokens(); sink2.ConsumeAllTokens(); ... In this case, the fields can be added in any order, because the sources are not used anymore and all sinks are ready. Note, the EntityDetect and URLDetect TokenStreams are for the example and do not currently exist in Lucene. Inheritance System.Object AttributeSource TokenStream TokenFilter TeeSinkTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TeeSinkTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TeeSinkTokenFilter(TokenStream) Instantiates a new TeeSinkTokenFilter . Declaration public TeeSinkTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source AddSinkTokenStream(TeeSinkTokenFilter.SinkTokenStream) Adds a TeeSinkTokenFilter.SinkTokenStream created by another TeeSinkTokenFilter to this one. The supplied stream will also receive all consumed tokens. This method can be used to pass tokens from two different tees to one sink. Declaration public void AddSinkTokenStream(TeeSinkTokenFilter.SinkTokenStream sink) Parameters Type Name Description TeeSinkTokenFilter.SinkTokenStream sink | Improve this Doc View Source ConsumeAllTokens() TeeSinkTokenFilter passes all tokens to the added sinks when itself is consumed. To be sure, that all tokens from the input stream are passed to the sinks, you can call this methods. This instance is exhausted after this, but all sinks are instant available. Declaration public void ConsumeAllTokens() | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source NewSinkTokenStream() Returns a new TeeSinkTokenFilter.SinkTokenStream that receives all tokens consumed by this stream. Declaration public TeeSinkTokenFilter.SinkTokenStream NewSinkTokenStream() Returns Type Description TeeSinkTokenFilter.SinkTokenStream | Improve this Doc View Source NewSinkTokenStream(TeeSinkTokenFilter.SinkFilter) Returns a new TeeSinkTokenFilter.SinkTokenStream that receives all tokens consumed by this stream that pass the supplied filter. Declaration public TeeSinkTokenFilter.SinkTokenStream NewSinkTokenStream(TeeSinkTokenFilter.SinkFilter filter) Parameters Type Name Description TeeSinkTokenFilter.SinkFilter filter Returns Type Description TeeSinkTokenFilter.SinkTokenStream See Also TeeSinkTokenFilter.SinkFilter Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html",
    "title": "Class TeeSinkTokenFilter.SinkFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkFilter A filter that decides which AttributeSource states to store in the sink. Inheritance System.Object TeeSinkTokenFilter.SinkFilter DateRecognizerSinkFilter TokenRangeSinkFilter TokenTypeSinkFilter 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.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class SinkFilter Methods | Improve this Doc View Source Accept(AttributeSource) Returns true, iff the current state of the passed-in AttributeSource shall be stored in the sink. Declaration public abstract bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean | Improve this Doc View Source Reset() Called by Reset() . This method does nothing by default and can optionally be overridden. Declaration public virtual void Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html",
    "title": "Class TeeSinkTokenFilter.SinkTokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkTokenStream TokenStream output from a tee with optional filtering. Inheritance System.Object AttributeSource TokenStream TeeSinkTokenFilter.SinkTokenStream Implements System.IDisposable Inherited Members TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SinkTokenStream : TokenStream, IDisposable Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override sealed void Reset() Overrides TokenStream.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html",
    "title": "Class TokenRangeSinkFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenRangeSinkFilter Counts the tokens as they go by and saves to the internal list those between the range of lower and upper, exclusive of upper Inheritance System.Object TeeSinkTokenFilter.SinkFilter TokenRangeSinkFilter 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.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenRangeSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source TokenRangeSinkFilter(Int32, Int32) Declaration public TokenRangeSinkFilter(int lower, int upper) Parameters Type Name Description System.Int32 lower System.Int32 upper Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource) | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TeeSinkTokenFilter.SinkFilter.Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html",
    "title": "Class TokenTypeSinkFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenTypeSinkFilter Adds a token to the sink if it has a specific type. Inheritance System.Object TeeSinkTokenFilter.SinkFilter TokenTypeSinkFilter Inherited Members TeeSinkTokenFilter.SinkFilter.Reset() 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.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenTypeSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source TokenTypeSinkFilter(String) Declaration public TokenTypeSinkFilter(string typeToMatch) Parameters Type Name Description System.String typeToMatch Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.html",
    "title": "Namespace Lucene.Net.Analysis.Snowball | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Snowball <!-- 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. --> TokenFilter and Analyzer implementations that use Snowball stemmers. This project provides pre-compiled version of the Snowball stemmers based on revision 500 of the Tartarus Snowball repository, together with classes integrating them with the Lucene search engine. A few changes has been made to the static Snowball code and compiled stemmers: Class SnowballProgram is made abstract and contains new abstract method stem() to avoid reflection in Lucene filter class SnowballFilter. All use of StringBuffers has been refactored to StringBuilder for speed. Snowball BSD license header has been added to the Java classes to avoid having RAT adding ASL headers. See the Snowball home page for more information about the algorithms. IMPORTANT NOTICE ON BACKWARDS COMPATIBILITY! An index created using the Snowball module in Lucene 2.3.2 and below might not be compatible with the Snowball module in Lucene 2.4 or greater. For more information about this issue see: https://issues.apache.org/jira/browse/LUCENE-1142 Classes SnowballAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter , StopFilter and SnowballFilter . Available stemmers are listed in org.tartarus.snowball.ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer , with the following addition: As of 3.1, uses TurkishLowerCaseFilter for Turkish language. SnowballFilter A filter that stems words using a Snowball-generated stemmer. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. NOTE : SnowballFilter expects lowercased text. For the Turkish language, see TurkishLowerCaseFilter . For other languages, see LowerCaseFilter . Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory SnowballPorterFilterFactory Factory for SnowballFilter , with configurable language Note: Use of the \"Lovins\" stemmer is not recommended, as it is implemented with reflection. <fieldType name=\"text_snowballstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SnowballPorterFilterFactory\" protected=\"protectedkeyword.txt\" language=\"English\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html",
    "title": "Class SnowballAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SnowballAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter , StopFilter and SnowballFilter . Available stemmers are listed in org.tartarus.snowball.ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer , with the following addition: As of 3.1, uses TurkishLowerCaseFilter for Turkish language. Inheritance System.Object Analyzer SnowballAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use the language-specific analyzer in modules/analysis instead. This analyzer will be removed in Lucene 5.0.\")] public sealed class SnowballAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source SnowballAnalyzer(LuceneVersion, String) Builds the named analyzer with no stop words. Declaration public SnowballAnalyzer(LuceneVersion matchVersion, string name) Parameters Type Name Description LuceneVersion matchVersion System.String name | Improve this Doc View Source SnowballAnalyzer(LuceneVersion, String, CharArraySet) Builds the named analyzer with the given stop words. Declaration public SnowballAnalyzer(LuceneVersion matchVersion, string name, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion System.String name CharArraySet stopWords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Constructs a StandardTokenizer filtered by a StandardFilter , a LowerCaseFilter , a StopFilter , and a SnowballFilter Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballFilter.html",
    "title": "Class SnowballFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SnowballFilter A filter that stems words using a Snowball-generated stemmer. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. NOTE : SnowballFilter expects lowercased text. For the Turkish language, see TurkishLowerCaseFilter . For other languages, see LowerCaseFilter . Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter SnowballFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SnowballFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SnowballFilter(TokenStream, SnowballProgram) Declaration public SnowballFilter(TokenStream input, SnowballProgram stemmer) Parameters Type Name Description TokenStream input SnowballProgram stemmer | Improve this Doc View Source SnowballFilter(TokenStream, String) Construct the named stemming filter. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". Declaration public SnowballFilter(TokenStream in, string name) Parameters Type Name Description TokenStream in the input tokens to stem System.String name the name of a stemmer Methods | Improve this Doc View Source IncrementToken() Returns the next input Token , after being stemmed Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html",
    "title": "Class SnowballPorterFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SnowballPorterFilterFactory Factory for SnowballFilter , with configurable language Note: Use of the \"Lovins\" stemmer is not recommended, as it is implemented with reflection. <fieldType name=\"text_snowballstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SnowballPorterFilterFactory\" protected=\"protectedkeyword.txt\" language=\"English\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SnowballPorterFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SnowballPorterFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source SnowballPorterFilterFactory(IDictionary<String, String>) Creates a new SnowballPorterFilterFactory Declaration public SnowballPorterFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = \"protected\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicAnalyzer.html",
    "title": "Class ClassicAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClassicAnalyzer Filters ClassicTokenizer with ClassicFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating ClassicAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) ClassicAnalyzer was named StandardAnalyzer in Lucene versions prior to 3.1. As of 3.1, StandardAnalyzer implements Unicode text segmentation, as specified by UAX#29. Inheritance System.Object Analyzer StopwordAnalyzerBase ClassicAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClassicAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ClassicAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET ). Declaration public ClassicAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer | Improve this Doc View Source ClassicAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ClassicAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source ClassicAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public ClassicAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer System.IO.TextReader stopwords System.IO.TextReader to read stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Default maximum allowed token length Declaration public const int DEFAULT_MAX_TOKEN_LENGTH = 255 Field Value Type Description System.Int32 | Improve this Doc View Source STOP_WORDS_SET An unmodifiable set containing some common English words that are usually not useful for searching. Declaration public static readonly CharArraySet STOP_WORDS_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source MaxTokenLength Gets or sets maximum allowed token length. If a token is seen that exceeds this length then it is discarded. This setting only takes effect the next time tokenStream or tokenStream is called. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilter.html",
    "title": "Class ClassicFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClassicFilter Normalizes tokens extracted with ClassicTokenizer . Inheritance System.Object AttributeSource TokenStream TokenFilter ClassicFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ClassicFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ClassicFilter(TokenStream) Construct filtering in . Declaration public ClassicFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Removes 's from the end of words. Removes dots from acronyms. Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilterFactory.html",
    "title": "Class ClassicFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClassicFilterFactory Factory for ClassicFilter . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\"/> <filter class=\"solr.ClassicFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ClassicFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ClassicFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ClassicFilterFactory(IDictionary<String, String>) Creates a new ClassicFilterFactory Declaration public ClassicFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizer.html",
    "title": "Class ClassicTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClassicTokenizer A grammar-based tokenizer constructed with JFlex (and then ported to .NET) This should be a good tokenizer for most European-language documents: Splits words at punctuation characters, removing punctuation. However, a dot that's not followed by whitespace is considered part of a token. Splits words at hyphens, unless there's a number in the token, in which case the whole token is interpreted as a product number and is not split. Recognizes email addresses and internet hostnames as one token. Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. ClassicTokenizer was named StandardTokenizer in Lucene versions prior to 3.1. As of 3.1, StandardTokenizer implements Unicode text segmentation, as specified by UAX#29. Inheritance System.Object AttributeSource TokenStream Tokenizer ClassicTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClassicTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ClassicTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new ClassicTokenizer with a given AttributeSource.AttributeFactory Declaration public ClassicTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source ClassicTokenizer(LuceneVersion, TextReader) Creates a new instance of the ClassicTokenizer . Attaches the input to the newly created JFlex scanner. Declaration public ClassicTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.IO.TextReader input The input reader See http://issues.apache.org/jira/browse/LUCENE-1068 Fields | Improve this Doc View Source ACRONYM Declaration public const int ACRONYM = 2 Field Value Type Description System.Int32 | Improve this Doc View Source ACRONYM_DEP Declaration public const int ACRONYM_DEP = 8 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 0 Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE Declaration public const int APOSTROPHE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source CJ Declaration public const int CJ = 7 Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY Declaration public const int COMPANY = 3 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = 4 Field Value Type Description System.Int32 | Improve this Doc View Source HOST Declaration public const int HOST = 5 Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = 6 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] Properties | Improve this Doc View Source MaxTokenLength Set the max allowed token length. Any token longer than this is skipped. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html",
    "title": "Class ClassicTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClassicTokenizerFactory Factory for ClassicTokenizer . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\" maxTokenLength=\"120\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ClassicTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ClassicTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ClassicTokenizerFactory(IDictionary<String, String>) Creates a new ClassicTokenizerFactory Declaration public ClassicTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.html",
    "title": "Namespace Lucene.Net.Analysis.Standard | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard <!-- 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. --> Fast, general-purpose grammar-based tokenizers. The org.apache.lucene.analysis.standard package contains three fast grammar-based tokenizers constructed with JFlex: StandardTokenizer : as of Lucene 3.1, implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Unlike UAX29URLEmailTokenizer , URLs and email addresses are not tokenized as single tokens, but are instead split up into tokens according to the UAX#29 word break rules. [StandardAnalyzer](xref:Lucene.Net.Analysis.Standard.StandardAnalyzer) includes [StandardTokenizer](xref:Lucene.Net.Analysis.Standard.StandardTokenizer), [StandardFilter](xref:Lucene.Net.Analysis.Standard.StandardFilter), [LowerCaseFilter](xref:Lucene.Net.Analysis.Core.LowerCaseFilter) and [StopFilter](xref:Lucene.Net.Analysis.Core.StopFilter). When the `Version` specified in the constructor is lower than 3.1, the ClassicTokenizer implementation is invoked. ClassicTokenizer : this class was formerly (prior to Lucene 3.1) named StandardTokenizer . (Its tokenization rules are not based on the Unicode Text Segmentation algorithm.) ClassicAnalyzer includes ClassicTokenizer , StandardFilter , LowerCaseFilter and StopFilter . UAX29URLEmailTokenizer : implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . URLs and email addresses are also tokenized according to the relevant RFCs. [UAX29URLEmailAnalyzer](xref:Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer) includes [UAX29URLEmailTokenizer](xref:Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer), [StandardFilter](xref:Lucene.Net.Analysis.Standard.StandardFilter), [LowerCaseFilter](xref:Lucene.Net.Analysis.Core.LowerCaseFilter) and [StopFilter](xref:Lucene.Net.Analysis.Core.StopFilter). Classes ClassicAnalyzer Filters ClassicTokenizer with ClassicFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating ClassicAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) ClassicAnalyzer was named StandardAnalyzer in Lucene versions prior to 3.1. As of 3.1, StandardAnalyzer implements Unicode text segmentation, as specified by UAX#29. ClassicFilter Normalizes tokens extracted with ClassicTokenizer . ClassicFilterFactory Factory for ClassicFilter . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\"/> <filter class=\"solr.ClassicFilterFactory\"/> </analyzer> </fieldType> ClassicTokenizer A grammar-based tokenizer constructed with JFlex (and then ported to .NET) This should be a good tokenizer for most European-language documents: Splits words at punctuation characters, removing punctuation. However, a dot that's not followed by whitespace is considered part of a token. Splits words at hyphens, unless there's a number in the token, in which case the whole token is interpreted as a product number and is not split. Recognizes email addresses and internet hostnames as one token. Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. ClassicTokenizer was named StandardTokenizer in Lucene versions prior to 3.1. As of 3.1, StandardTokenizer implements Unicode text segmentation, as specified by UAX#29. ClassicTokenizerFactory Factory for ClassicTokenizer . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\" maxTokenLength=\"120\"/> </analyzer> </fieldType> StandardAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating StandardAnalyzer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation, and StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords. ClassicTokenizer and ClassicAnalyzer are the pre-3.1 implementations of StandardTokenizer and StandardAnalyzer . As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) StandardFilter Normalizes tokens extracted with StandardTokenizer . StandardFilterFactory Factory for StandardFilter . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.StandardFilterFactory\"/> </analyzer> </fieldType> StandardTokenizer A grammar-based tokenizer constructed with JFlex. As of Lucene version 3.1, this class implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. You must specify the required LuceneVersion compatibility when creating StandardTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation. If you use a previous version number, you get the exact behavior of ClassicTokenizer for backwards compatibility. StandardTokenizerFactory Factory for StandardTokenizer . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> StandardTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters StandardTokenizerInterface UAX29URLEmailAnalyzer Filters UAX29URLEmailTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating UAX29URLEmailAnalyzer UAX29URLEmailTokenizer This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in ` Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character You must specify the required LuceneVersion compatibility when creating UAX29URLEmailTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. UAX29URLEmailTokenizerFactory Factory for UAX29URLEmailTokenizer . <fieldType name=\"text_urlemail\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.UAX29URLEmailTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> UAX29URLEmailTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters Interfaces IStandardTokenizerInterface Internal interface for supporting versioned grammars. This is a Lucene.NET INTERNAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html",
    "title": "Interface IStandardTokenizerInterface | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IStandardTokenizerInterface Internal interface for supporting versioned grammars. This is a Lucene.NET INTERNAL API, use at your own risk Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IStandardTokenizerInterface Properties | Improve this Doc View Source YyChar Returns the current position. Declaration int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration int YyLength { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration int GetNextToken() Returns Type Description System.Int32 the next token, YYEOF on end of stream Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Copies the matched text into the ICharTermAttribute Declaration void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Declaration void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardAnalyzer.html",
    "title": "Class StandardAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating StandardAnalyzer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation, and StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords. ClassicTokenizer and ClassicAnalyzer are the pre-3.1 implementations of StandardTokenizer and StandardAnalyzer . As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) Inheritance System.Object Analyzer StopwordAnalyzerBase StandardAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source StandardAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET ). Declaration public StandardAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer | Improve this Doc View Source StandardAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public StandardAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source StandardAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public StandardAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer System.IO.TextReader stopwords System.IO.TextReader to read stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Default maximum allowed token length Declaration public const int DEFAULT_MAX_TOKEN_LENGTH = 255 Field Value Type Description System.Int32 | Improve this Doc View Source STOP_WORDS_SET An unmodifiable set containing some common English words that are usually not useful for searching. Declaration public static readonly CharArraySet STOP_WORDS_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source MaxTokenLength Set maximum allowed token length. If a token is seen that exceeds this length then it is discarded. This setting only takes effect the next time tokenStream or tokenStream is called. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilter.html",
    "title": "Class StandardFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardFilter Normalizes tokens extracted with StandardTokenizer . Inheritance System.Object AttributeSource TokenStream TokenFilter StandardFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StandardFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StandardFilter(LuceneVersion, TokenStream) Declaration public StandardFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IncrementTokenClassic() Declaration public bool IncrementTokenClassic() Returns Type Description System.Boolean Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilterFactory.html",
    "title": "Class StandardFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardFilterFactory Factory for StandardFilter . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.StandardFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StandardFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StandardFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source StandardFilterFactory(IDictionary<String, String>) Creates a new StandardFilterFactory Declaration public StandardFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizer.html",
    "title": "Class StandardTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardTokenizer A grammar-based tokenizer constructed with JFlex. As of Lucene version 3.1, this class implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. You must specify the required LuceneVersion compatibility when creating StandardTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation. If you use a previous version number, you get the exact behavior of ClassicTokenizer for backwards compatibility. Inheritance System.Object AttributeSource TokenStream Tokenizer StandardTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source StandardTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new StandardTokenizer with a given AttributeSource.AttributeFactory Declaration public StandardTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source StandardTokenizer(LuceneVersion, TextReader) Creates a new instance of the StandardTokenizer . Attaches the input to the newly created JFlex-generated (then ported to .NET) scanner. Declaration public StandardTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardTokenizer System.IO.TextReader input The input reader See http://issues.apache.org/jira/browse/LUCENE-1068 Fields | Improve this Doc View Source ACRONYM Declaration [Obsolete(\"(3.1)\")] public const int ACRONYM = 2 Field Value Type Description System.Int32 | Improve this Doc View Source ACRONYM_DEP Declaration [Obsolete(\"(3.1)\")] public const int ACRONYM_DEP = 8 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 0 Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE Declaration [Obsolete(\"(3.1)\")] public const int APOSTROPHE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source CJ Declaration [Obsolete(\"(3.1)\")] public const int CJ = 7 Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY Declaration [Obsolete(\"(3.1)\")] public const int COMPANY = 3 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = 4 Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL Declaration public const int HANGUL = 13 Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA Declaration public const int HIRAGANA = 11 Field Value Type Description System.Int32 | Improve this Doc View Source HOST Declaration [Obsolete(\"(3.1)\")] public const int HOST = 5 Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC Declaration public const int IDEOGRAPHIC = 10 Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA Declaration public const int KATAKANA = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = 6 Field Value Type Description System.Int32 | Improve this Doc View Source SOUTHEAST_ASIAN Declaration public const int SOUTHEAST_ASIAN = 9 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] Properties | Improve this Doc View Source MaxTokenLength Set the max allowed token length. Any token longer than this is skipped. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html",
    "title": "Class StandardTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardTokenizerFactory Factory for StandardTokenizer . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory StandardTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StandardTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source StandardTokenizerFactory(IDictionary<String, String>) Creates a new StandardTokenizerFactory Declaration public StandardTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html",
    "title": "Class StandardTokenizerImpl | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters Inheritance System.Object StandardTokenizerImpl Implements IStandardTokenizerInterface 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizerImpl : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills CharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html",
    "title": "Class StandardTokenizerInterface | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardTokenizerInterface Inheritance System.Object StandardTokenizerInterface 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class StandardTokenizerInterface Fields | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public const int YYEOF = -1 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std31 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std31 <!-- 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. --> Backwards-compatible implementation to match #LUCENE_31 Classes StandardTokenizerImpl31 This class implements StandardTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl31 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html",
    "title": "Class StandardTokenizerImpl31 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardTokenizerImpl31 This class implements StandardTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility Inheritance System.Object StandardTokenizerImpl31 Implements IStandardTokenizerInterface 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.Analysis.Standard.Std31 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class StandardTokenizerImpl31 : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl31(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl31(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html",
    "title": "Class UAX29URLEmailTokenizerImpl31 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl31 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl31 Implements IStandardTokenizerInterface 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.Analysis.Standard.Std31 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl31 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl31(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl31(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills CharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Closes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std34 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std34 <!-- 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. --> Backwards-compatible implementation to match #LUCENE_34 Classes StandardTokenizerImpl34 This class implements StandardTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl34 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3880 ) where \"mailto:\" URI scheme prepended to an email address will disrupt recognition of the email address. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html",
    "title": "Class StandardTokenizerImpl34 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardTokenizerImpl34 This class implements StandardTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object StandardTokenizerImpl34 Implements IStandardTokenizerInterface 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.Analysis.Standard.Std34 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class StandardTokenizerImpl34 : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl34(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl34(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html",
    "title": "Class UAX29URLEmailTokenizerImpl34 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl34 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3880 ) where \"mailto:\" URI scheme prepended to an email address will disrupt recognition of the email address. @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl34 Implements IStandardTokenizerInterface 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.Analysis.Standard.Std34 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl34 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl34(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl34(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std36 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std36 <!-- 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. --> Backwards-compatible implementation to match #LUCENE_36 Classes UAX29URLEmailTokenizerImpl36 This class implements UAX29URLEmailTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html",
    "title": "Class UAX29URLEmailTokenizerImpl36 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl36 This class implements UAX29URLEmailTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl36 Implements IStandardTokenizerInterface 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.Analysis.Standard.Std36 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl36 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl36(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl36(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std40 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std40 <!-- 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. --> Backwards-compatible implementation to match #LUCENE_40 Classes StandardTokenizerImpl40 This class implements StandardTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl40 This class implements UAX29URLEmailTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html",
    "title": "Class StandardTokenizerImpl40 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardTokenizerImpl40 This class implements StandardTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object StandardTokenizerImpl40 Implements IStandardTokenizerInterface 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.Analysis.Standard.Std40 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class StandardTokenizerImpl40 : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl40(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl40(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html",
    "title": "Class UAX29URLEmailTokenizerImpl40 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl40 This class implements UAX29URLEmailTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl40 Implements IStandardTokenizerInterface 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.Analysis.Standard.Std40 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl40 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl40(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl40(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html",
    "title": "Class UAX29URLEmailAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailAnalyzer Filters UAX29URLEmailTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating UAX29URLEmailAnalyzer Inheritance System.Object Analyzer StopwordAnalyzerBase UAX29URLEmailAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET . Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer System.IO.TextReader stopwords System.IO.TextReader to read stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Default maximum allowed token length Declaration public const int DEFAULT_MAX_TOKEN_LENGTH = 255 Field Value Type Description System.Int32 | Improve this Doc View Source STOP_WORDS_SET An unmodifiable set containing some common English words that are usually not useful for searching. Declaration public static readonly CharArraySet STOP_WORDS_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source MaxTokenLength Set maximum allowed token length. If a token is seen that exceeds this length then it is discarded. This setting only takes effect the next time tokenStream or tokenStream is called. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html",
    "title": "Class UAX29URLEmailTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailTokenizer This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in ` Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character You must specify the required LuceneVersion compatibility when creating UAX29URLEmailTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. Inheritance System.Object AttributeSource TokenStream Tokenizer UAX29URLEmailTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source UAX29URLEmailTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new UAX29URLEmailTokenizer with a given AttributeSource.AttributeFactory Declaration public UAX29URLEmailTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source UAX29URLEmailTokenizer(LuceneVersion, TextReader) Creates a new instance of the UAX29URLEmailTokenizer . Attaches the input to the newly created JFlex scanner. Declaration public UAX29URLEmailTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version System.IO.TextReader input The input reader Fields | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 0 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = 8 Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL Declaration public const int HANGUL = 6 Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA Declaration public const int HIRAGANA = 4 Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC Declaration public const int IDEOGRAPHIC = 3 Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA Declaration public const int KATAKANA = 5 Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SOUTHEAST_ASIAN Declaration public const int SOUTHEAST_ASIAN = 2 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] | Improve this Doc View Source URL Declaration public const int URL = 7 Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxTokenLength Set the max allowed token length. Any token longer than this is skipped. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html",
    "title": "Class UAX29URLEmailTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerFactory Factory for UAX29URLEmailTokenizer . <fieldType name=\"text_urlemail\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.UAX29URLEmailTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory UAX29URLEmailTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class UAX29URLEmailTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source UAX29URLEmailTokenizerFactory(IDictionary<String, String>) Creates a new UAX29URLEmailTokenizerFactory Declaration public UAX29URLEmailTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html",
    "title": "Class UAX29URLEmailTokenizerImpl | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters Inheritance System.Object UAX29URLEmailTokenizerImpl Implements IStandardTokenizerInterface 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.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizerImpl : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source AVOID_BAD_URL Declaration public const int AVOID_BAD_URL = 2 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.html",
    "title": "Namespace Lucene.Net.Analysis.Sv | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Sv <!-- 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. --> Analyzer for Swedish. Classes SwedishAnalyzer Analyzer for Swedish. SwedishLightStemFilter A TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SwedishLightStemFilterFactory Factory for SwedishLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SwedishLightStemFilterFactory\"/> </analyzer> </fieldType> SwedishLightStemmer Light Stemmer for Swedish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishAnalyzer.html",
    "title": "Class SwedishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SwedishAnalyzer Analyzer for Swedish. Inheritance System.Object Analyzer StopwordAnalyzerBase SwedishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SwedishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source SwedishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SwedishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source SwedishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SwedishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SwedishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SwedishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Swedish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"swedish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html",
    "title": "Class SwedishLightStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SwedishLightStemFilter A TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SwedishLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SwedishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SwedishLightStemFilter(TokenStream) Declaration public SwedishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html",
    "title": "Class SwedishLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SwedishLightStemFilterFactory Factory for SwedishLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SwedishLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SwedishLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SwedishLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SwedishLightStemFilterFactory(IDictionary<String, String>) Creates a new SwedishLightStemFilterFactory Declaration public SwedishLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemmer.html",
    "title": "Class SwedishLightStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SwedishLightStemmer Light Stemmer for Swedish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy Inheritance System.Object SwedishLightStemmer 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.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SwedishLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.html",
    "title": "Namespace Lucene.Net.Analysis.Synonym | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Synonym <!-- 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. --> Analysis components for Synonyms. Classes SolrSynonymParser Parser for the Solr synonyms format. Blank lines and lines starting with '#' are comments. Explicit mappings match any token sequence on the LHS of \"=>\" and replace with all alternatives on the RHS. These types of mappings ignore the expand parameter in the constructor. Example: i-pod, i pod => ipod Equivalent synonyms may be separated with commas and give no explicit mapping. In this case the mapping behavior will be taken from the expand parameter in the constructor. This allows the same synonym file to be used in different synonym handling strategies. Example: ipod, i-pod, i pod Multiple synonym mapping entries are merged. Example: foo => foo bar foo => baz is equivalent to foo => foo bar, baz This is a Lucene.NET EXPERIMENTAL API, use at your own risk SynonymFilter Matches single or multi word synonyms in a token stream. This token stream cannot properly handle position increments != 1, ie, you should place this filter before filtering out stop words. Note that with the current implementation, parsing is greedy, so whenever multiple parses would apply, the rule starting the earliest and parsing the most tokens wins. For example if you have these rules: a -> x a b -> y b c d -> z Then input a b c d e parses to y b c d , ie the 2nd rule \"wins\" because it started earliest and matched the most input tokens of other rules starting at that point. A future improvement to this filter could allow non-greedy parsing, such that the 3rd rule would win, and also separately allow multiple parses, such that all 3 rules would match, perhaps even on a rule by rule basis. NOTE : when a match occurs, the output tokens associated with the matching rule are \"stacked\" on top of the input stream (if the rule had keepOrig=true ) and also on top of another matched rule's output tokens. This is not a correct solution, as really the output should be an arbitrary graph/lattice. For example, with the above match, you would expect an exact PhraseQuery \"y b c\" to match the parsed tokens, but it will fail to do so. This limitation is necessary because Lucene's TokenStream (and index) cannot yet represent an arbitrary graph. NOTE : If multiple incoming tokens arrive on the same position, only the first token at that position is used for parsing. Subsequent tokens simply pass through and are not parsed. A future improvement would be to allow these tokens to also be matched. SynonymFilterFactory Factory for SynonymFilter . <fieldType name=\"text_synonym\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" format=\"solr\" ignoreCase=\"false\" expand=\"true\" tokenizerFactory=\"solr.WhitespaceTokenizerFactory\" [optional tokenizer factory parameters]/> </analyzer> </fieldType> An optional param name prefix of \"tokenizerFactory.\" may be used for any init params that the SynonymFilterFactory needs to pass to the specified TokenizerFactory . If the TokenizerFactory expects an init parameters with the same name as an init param used by the SynonymFilterFactory , the prefix is mandatory. The optional format parameter controls how the synonyms will be parsed: It supports the short names of solr for SolrSynonymParser and wordnet for and WordnetSynonymParser , or your own SynonymMap.Parser class name. The default is solr . A custom SynonymMap.Parser is expected to have a constructor taking: System.Boolean dedup - true if duplicates should be ignored, false otherwise System.Boolean expand - true if conflation groups should be expanded, false if they are one-directional Analyzer analyzer - an analyzer used for each raw synonym SynonymMap A map of synonyms, keys and values are phrases. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SynonymMap.Builder Builds an FSTSynonymMap. Call Add(CharsRef, CharsRef, Boolean) until you have added all the mappings, then call Build() to get an FSTSynonymMap This is a Lucene.NET EXPERIMENTAL API, use at your own risk SynonymMap.Parser Abstraction for parsing synonym files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordnetSynonymParser Parser for wordnet prolog format See http://wordnet.princeton.edu/man/prologdb.5WN.html for a description of the format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SolrSynonymParser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SolrSynonymParser.html",
    "title": "Class SolrSynonymParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SolrSynonymParser Parser for the Solr synonyms format. Blank lines and lines starting with '#' are comments. Explicit mappings match any token sequence on the LHS of \"=>\" and replace with all alternatives on the RHS. These types of mappings ignore the expand parameter in the constructor. Example: i-pod, i pod => ipod Equivalent synonyms may be separated with commas and give no explicit mapping. In this case the mapping behavior will be taken from the expand parameter in the constructor. This allows the same synonym file to be used in different synonym handling strategies. Example: ipod, i-pod, i pod Multiple synonym mapping entries are merged. Example: foo => foo bar foo => baz is equivalent to foo => foo bar, baz This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap.Builder SynonymMap.Parser SolrSynonymParser Inherited Members SynonymMap.Parser.Analyze(String, CharsRef) SynonymMap.Builder.Join(String[], CharsRef) SynonymMap.Builder.Add(CharsRef, CharsRef, Boolean) SynonymMap.Builder.Build() 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.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SolrSynonymParser : SynonymMap.Parser Constructors | Improve this Doc View Source SolrSynonymParser(Boolean, Boolean, Analyzer) Declaration public SolrSynonymParser(bool dedup, bool expand, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup System.Boolean expand Analyzer analyzer Methods | Improve this Doc View Source Parse(TextReader) Declaration public override void Parse(TextReader in) Parameters Type Name Description System.IO.TextReader in Overrides SynonymMap.Parser.Parse(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilter.html",
    "title": "Class SynonymFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SynonymFilter Matches single or multi word synonyms in a token stream. This token stream cannot properly handle position increments != 1, ie, you should place this filter before filtering out stop words. Note that with the current implementation, parsing is greedy, so whenever multiple parses would apply, the rule starting the earliest and parsing the most tokens wins. For example if you have these rules: a -> x a b -> y b c d -> z Then input a b c d e parses to y b c d , ie the 2nd rule \"wins\" because it started earliest and matched the most input tokens of other rules starting at that point. A future improvement to this filter could allow non-greedy parsing, such that the 3rd rule would win, and also separately allow multiple parses, such that all 3 rules would match, perhaps even on a rule by rule basis. NOTE : when a match occurs, the output tokens associated with the matching rule are \"stacked\" on top of the input stream (if the rule had keepOrig=true ) and also on top of another matched rule's output tokens. This is not a correct solution, as really the output should be an arbitrary graph/lattice. For example, with the above match, you would expect an exact PhraseQuery \"y b c\" to match the parsed tokens, but it will fail to do so. This limitation is necessary because Lucene's TokenStream (and index) cannot yet represent an arbitrary graph. NOTE : If multiple incoming tokens arrive on the same position, only the first token at that position is used for parsing. Subsequent tokens simply pass through and are not parsed. A future improvement would be to allow these tokens to also be matched. Inheritance System.Object AttributeSource TokenStream TokenFilter SynonymFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SynonymFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SynonymFilter(TokenStream, SynonymMap, Boolean) Declaration public SynonymFilter(TokenStream input, SynonymMap synonyms, bool ignoreCase) Parameters Type Name Description TokenStream input input tokenstream SynonymMap synonyms synonym map System.Boolean ignoreCase case-folds input for matching with J2N.Character.ToLower(System.Int32) . Note, if you set this to true, its your responsibility to lowercase the input entries when you create the SynonymMap Fields | Improve this Doc View Source TYPE_SYNONYM Declaration public const string TYPE_SYNONYM = \"SYNONYM\" Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html",
    "title": "Class SynonymFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SynonymFilterFactory Factory for SynonymFilter . <fieldType name=\"text_synonym\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" format=\"solr\" ignoreCase=\"false\" expand=\"true\" tokenizerFactory=\"solr.WhitespaceTokenizerFactory\" [optional tokenizer factory parameters]/> </analyzer> </fieldType> An optional param name prefix of \"tokenizerFactory.\" may be used for any init params that the SynonymFilterFactory needs to pass to the specified TokenizerFactory . If the TokenizerFactory expects an init parameters with the same name as an init param used by the SynonymFilterFactory , the prefix is mandatory. The optional format parameter controls how the synonyms will be parsed: It supports the short names of solr for SolrSynonymParser and wordnet for and WordnetSynonymParser , or your own SynonymMap.Parser class name. The default is solr . A custom SynonymMap.Parser is expected to have a constructor taking: System.Boolean dedup - true if duplicates should be ignored, false otherwise System.Boolean expand - true if conflation groups should be expanded, false if they are one-directional Analyzer analyzer - an analyzer used for each raw synonym Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SynonymFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SynonymFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source SynonymFilterFactory(IDictionary<String, String>) Declaration public SynonymFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html",
    "title": "Class SynonymMap.Builder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SynonymMap.Builder Builds an FSTSynonymMap. Call Add(CharsRef, CharsRef, Boolean) until you have added all the mappings, then call Build() to get an FSTSynonymMap This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap.Builder SynonymMap.Parser 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.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder Constructors | Improve this Doc View Source Builder(Boolean) If dedup is true then identical rules (same input, same output) will be added only once. Declaration public Builder(bool dedup) Parameters Type Name Description System.Boolean dedup Methods | Improve this Doc View Source Add(CharsRef, CharsRef, Boolean) Add a phrase->phrase synonym mapping. Phrases are character sequences where words are separated with character zero (U+0000). Empty words (two U+0000s in a row) are not allowed in the input nor the output! Declaration public virtual void Add(CharsRef input, CharsRef output, bool includeOrig) Parameters Type Name Description CharsRef input input phrase CharsRef output output phrase System.Boolean includeOrig true if the original should be included | Improve this Doc View Source Build() Builds an SynonymMap and returns it. Declaration public virtual SynonymMap Build() Returns Type Description SynonymMap | Improve this Doc View Source Join(String[], CharsRef) Sugar: just joins the provided terms with WORD_SEPARATOR . reuse and its chars must not be null. Declaration public static CharsRef Join(string[] words, CharsRef reuse) Parameters Type Name Description System.String [] words CharsRef reuse Returns Type Description CharsRef"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.html",
    "title": "Class SynonymMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SynonymMap A map of synonyms, keys and values are phrases. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap 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.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SynonymMap Constructors | Improve this Doc View Source SynonymMap(FST<BytesRef>, BytesRefHash, Int32) Declaration public SynonymMap(FST<BytesRef> fst, BytesRefHash words, int maxHorizontalContext) Parameters Type Name Description FST < BytesRef > fst BytesRefHash words System.Int32 maxHorizontalContext Fields | Improve this Doc View Source WORD_SEPARATOR for multiword support, you must separate words with this separator Declaration public const char WORD_SEPARATOR = '\\0' Field Value Type Description System.Char Properties | Improve this Doc View Source Fst map<input word, list<ord>> Declaration public FST<BytesRef> Fst { get; } Property Value Type Description FST < BytesRef > | Improve this Doc View Source MaxHorizontalContext maxHorizontalContext: maximum context we need on the tokenstream Declaration public int MaxHorizontalContext { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Words map<ord, outputword> Declaration public BytesRefHash Words { get; } Property Value Type Description BytesRefHash"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html",
    "title": "Class SynonymMap.Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SynonymMap.Parser Abstraction for parsing synonym files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap.Builder SynonymMap.Parser SolrSynonymParser WordnetSynonymParser Inherited Members SynonymMap.Builder.Join(String[], CharsRef) SynonymMap.Builder.Add(CharsRef, CharsRef, Boolean) SynonymMap.Builder.Build() 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.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class Parser : SynonymMap.Builder Constructors | Improve this Doc View Source Parser(Boolean, Analyzer) Declaration public Parser(bool dedup, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup Analyzer analyzer Methods | Improve this Doc View Source Analyze(String, CharsRef) Sugar: analyzes the text with the analyzer and separates by WORD_SEPARATOR . reuse and its chars must not be null. Declaration public virtual CharsRef Analyze(string text, CharsRef reuse) Parameters Type Name Description System.String text CharsRef reuse Returns Type Description CharsRef | Improve this Doc View Source Parse(TextReader) Parse the given input, adding synonyms to the inherited SynonymMap.Builder . Declaration public abstract void Parse(TextReader in) Parameters Type Name Description System.IO.TextReader in The input to parse"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html",
    "title": "Class WordnetSynonymParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WordnetSynonymParser Parser for wordnet prolog format See http://wordnet.princeton.edu/man/prologdb.5WN.html for a description of the format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap.Builder SynonymMap.Parser WordnetSynonymParser Inherited Members SynonymMap.Parser.Analyze(String, CharsRef) SynonymMap.Builder.Join(String[], CharsRef) SynonymMap.Builder.Add(CharsRef, CharsRef, Boolean) SynonymMap.Builder.Build() 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.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordnetSynonymParser : SynonymMap.Parser Constructors | Improve this Doc View Source WordnetSynonymParser(Boolean, Boolean, Analyzer) Declaration public WordnetSynonymParser(bool dedup, bool expand, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup System.Boolean expand Analyzer analyzer Methods | Improve this Doc View Source Parse(TextReader) Declaration public override void Parse(TextReader in) Parameters Type Name Description System.IO.TextReader in Overrides SynonymMap.Parser.Parse(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilter.html",
    "title": "Class ApostropheFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ApostropheFilter Strips all characters after an apostrophe (including the apostrophe itself). In Turkish, apostrophe is used to separate suffixes from proper names (continent, sea, river, lake, mountain, upland, proper names related to religion and mythology). This filter intended to be used before stem filters. For more information, see Role of Apostrophes in Turkish Information Retrieval Inheritance System.Object AttributeSource TokenStream TokenFilter ApostropheFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ApostropheFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ApostropheFilter(TokenStream) Declaration public ApostropheFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html",
    "title": "Class ApostropheFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ApostropheFilterFactory Factory for ApostropheFilter . <fieldType name=\"text_tr_lower_apostrophes\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ApostropheFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ApostropheFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ApostropheFilterFactory(IDictionary<String, String>) Creates a new ApostropheFilterFactory Declaration public ApostropheFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.html",
    "title": "Namespace Lucene.Net.Analysis.Tr | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Tr <!-- 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. --> Analyzer for Turkish. Classes ApostropheFilter Strips all characters after an apostrophe (including the apostrophe itself). In Turkish, apostrophe is used to separate suffixes from proper names (continent, sea, river, lake, mountain, upland, proper names related to religion and mythology). This filter intended to be used before stem filters. For more information, see Role of Apostrophes in Turkish Information Retrieval ApostropheFilterFactory Factory for ApostropheFilter . <fieldType name=\"text_tr_lower_apostrophes\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType> TurkishAnalyzer Analyzer for Turkish. TurkishLowerCaseFilter Normalizes Turkish token text to lower case. Turkish and Azeri have unique casing behavior for some characters. This filter applies Turkish lowercase rules. For more information, see http://en.wikipedia.org/wiki/Turkish_dotted_and_dotless_I TurkishLowerCaseFilterFactory Factory for TurkishLowerCaseFilter . <fieldType name=\"text_trlwr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishAnalyzer.html",
    "title": "Class TurkishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TurkishAnalyzer Analyzer for Turkish. Inheritance System.Object Analyzer StopwordAnalyzerBase TurkishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TurkishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source TurkishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public TurkishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source TurkishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public TurkishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source TurkishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public TurkishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Turkish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , TurkishLowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html",
    "title": "Class TurkishLowerCaseFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TurkishLowerCaseFilter Normalizes Turkish token text to lower case. Turkish and Azeri have unique casing behavior for some characters. This filter applies Turkish lowercase rules. For more information, see http://en.wikipedia.org/wiki/Turkish_dotted_and_dotless_I Inheritance System.Object AttributeSource TokenStream TokenFilter TurkishLowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TurkishLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TurkishLowerCaseFilter(TokenStream) Create a new TurkishLowerCaseFilter , that normalizes Turkish token text to lower case. Declaration public TurkishLowerCaseFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html",
    "title": "Class TurkishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TurkishLowerCaseFilterFactory Factory for TurkishLowerCaseFilter . <fieldType name=\"text_trlwr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TurkishLowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TurkishLowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source TurkishLowerCaseFilterFactory(IDictionary<String, String>) Creates a new TurkishLowerCaseFilterFactory Declaration public TurkishLowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html",
    "title": "Class AbstractAnalysisFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAnalysisFactory Abstract parent class for analysis factories TokenizerFactory , TokenFilterFactory and CharFilterFactory . The typical lifecycle for a factory consumer is: Create factory via its constructor (or via XXXFactory.ForName) (Optional) If the factory uses resources such as files, Inform(IResourceLoader) is called to initialize those resources. Consumer calls create() to obtain instances. Inheritance System.Object AbstractAnalysisFactory CharFilterFactory TokenFilterFactory TokenizerFactory 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class AbstractAnalysisFactory Constructors | Improve this Doc View Source AbstractAnalysisFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected AbstractAnalysisFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source LUCENE_MATCH_VERSION_PARAM Declaration public const string LUCENE_MATCH_VERSION_PARAM = \"luceneMatchVersion\" Field Value Type Description System.String | Improve this Doc View Source m_luceneMatchVersion the luceneVersion arg Declaration protected readonly LuceneVersion m_luceneMatchVersion Field Value Type Description LuceneVersion Properties | Improve this Doc View Source IsExplicitLuceneMatchVersion Declaration public virtual bool IsExplicitLuceneMatchVersion { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LuceneMatchVersion Declaration public LuceneVersion LuceneMatchVersion { get; } Property Value Type Description LuceneVersion | Improve this Doc View Source OriginalArgs Declaration public IDictionary<string, string> OriginalArgs { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > Methods | Improve this Doc View Source AssureMatchVersion() this method can be called in the Create(TextReader) or Create(TokenStream) methods, to inform user, that for this factory a m_luceneMatchVersion is required Declaration protected void AssureMatchVersion() | Improve this Doc View Source Get(IDictionary<String, String>, String, ICollection<String>) Declaration public virtual string Get(IDictionary<string, string> args, string name, ICollection<string> allowedValues) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues Returns Type Description System.String | Improve this Doc View Source Get(IDictionary<String, String>, String, ICollection<String>, String) Declaration public virtual string Get(IDictionary<string, string> args, string name, ICollection<string> allowedValues, string defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues System.String defaultVal Returns Type Description System.String | Improve this Doc View Source Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) Declaration public virtual string Get(IDictionary<string, string> args, string name, ICollection<string> allowedValues, string defaultVal, bool caseSensitive) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues System.String defaultVal System.Boolean caseSensitive Returns Type Description System.String | Improve this Doc View Source Get(IDictionary<String, String>, String, String) Declaration public virtual string Get(IDictionary<string, string> args, string name, string defaultVal = null) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.String defaultVal Returns Type Description System.String | Improve this Doc View Source GetBoolean(IDictionary<String, String>, String, Boolean) Declaration protected bool GetBoolean(IDictionary<string, string> args, string name, bool defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Boolean defaultVal Returns Type Description System.Boolean | Improve this Doc View Source GetChar(IDictionary<String, String>, String, Char) Declaration public virtual char GetChar(IDictionary<string, string> args, string name, char defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Char defaultVal Returns Type Description System.Char | Improve this Doc View Source GetClassArg() Declaration public virtual string GetClassArg() Returns Type Description System.String the string used to specify the concrete class name in a serialized representation: the class arg. If the concrete class name was not specified via a class arg, returns GetType().Name . | Improve this Doc View Source GetCulture(IDictionary<String, String>, String, CultureInfo) Gets a System.Globalization.CultureInfo value of the specified argument key name . To specify the invariant culture, pass the string \"invariant\" . LUCENENET specific Declaration protected CultureInfo GetCulture(IDictionary<string, string> args, string name, CultureInfo defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Globalization.CultureInfo defaultVal Returns Type Description System.Globalization.CultureInfo | Improve this Doc View Source GetInt32(IDictionary<String, String>, String, Int32) NOTE: This was getInt() in Lucene Declaration protected int GetInt32(IDictionary<string, string> args, string name, int defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Int32 defaultVal Returns Type Description System.Int32 | Improve this Doc View Source GetLines(IResourceLoader, String) Returns the resource's lines (with content treated as UTF-8) Declaration protected IList<string> GetLines(IResourceLoader loader, string resource) Parameters Type Name Description IResourceLoader loader System.String resource Returns Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source GetPattern(IDictionary<String, String>, String) Compiles a pattern for the value of the specified argument key name Declaration protected Regex GetPattern(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source GetSet(IDictionary<String, String>, String) Returns whitespace- and/or comma-separated set of values, or null if none are found Declaration public virtual ISet<string> GetSet(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source GetSingle(IDictionary<String, String>, String, Single) NOTE: This was getFloat() in Lucene Declaration protected float GetSingle(IDictionary<string, string> args, string name, float defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Single defaultVal Returns Type Description System.Single | Improve this Doc View Source GetSnowballWordSet(IResourceLoader, String, Boolean) Same as GetWordSet(IResourceLoader, String, Boolean) , except the input is in snowball format. Declaration protected CharArraySet GetSnowballWordSet(IResourceLoader loader, string wordFiles, bool ignoreCase) Parameters Type Name Description IResourceLoader loader System.String wordFiles System.Boolean ignoreCase Returns Type Description CharArraySet | Improve this Doc View Source GetWordSet(IResourceLoader, String, Boolean) Returns as CharArraySet from wordFiles, which can be a comma-separated list of filenames Declaration protected CharArraySet GetWordSet(IResourceLoader loader, string wordFiles, bool ignoreCase) Parameters Type Name Description IResourceLoader loader System.String wordFiles System.Boolean ignoreCase Returns Type Description CharArraySet | Improve this Doc View Source Require(IDictionary<String, String>, String) Declaration public virtual string Require(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.String | Improve this Doc View Source Require(IDictionary<String, String>, String, ICollection<String>) Declaration public virtual string Require(IDictionary<string, string> args, string name, ICollection<string> allowedValues) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues Returns Type Description System.String | Improve this Doc View Source Require(IDictionary<String, String>, String, ICollection<String>, Boolean) Declaration public virtual string Require(IDictionary<string, string> args, string name, ICollection<string> allowedValues, bool caseSensitive) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues System.Boolean caseSensitive Returns Type Description System.String | Improve this Doc View Source RequireBoolean(IDictionary<String, String>, String) Declaration protected bool RequireBoolean(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Boolean | Improve this Doc View Source RequireChar(IDictionary<String, String>, String) Declaration public virtual char RequireChar(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Char | Improve this Doc View Source RequireInt32(IDictionary<String, String>, String) NOTE: This was requireInt() in Lucene Declaration protected int RequireInt32(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Int32 | Improve this Doc View Source RequireSingle(IDictionary<String, String>, String) NOTE: This was requireFloat() in Lucene Declaration protected float RequireSingle(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Single | Improve this Doc View Source SplitFileNames(String) Splits file names separated by comma character. File names can contain comma characters escaped by backslash '&apos; Declaration protected IList<string> SplitFileNames(string fileNames) Parameters Type Name Description System.String fileNames the string containing file names Returns Type Description System.Collections.Generic.IList < System.String > a list of file names with the escaping backslashed removed"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.BufferedCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.BufferedCharFilter.html",
    "title": "Class BufferedCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BufferedCharFilter LUCENENET specific class to mimic Java's BufferedReader (that is, a reader that is seekable) so it supports Mark() and Reset() (which are part of the Java Reader class), but also provide the Correct() method of BaseCharFilter. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter BaseCharFilter BufferedCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.CorrectOffset(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BufferedCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source BufferedCharFilter(TextReader) Creates a buffering character-input stream that uses a default-sized input buffer. Declaration public BufferedCharFilter(TextReader in) Parameters Type Name Description System.IO.TextReader in A TextReader | Improve this Doc View Source BufferedCharFilter(TextReader, Int32) Creates a buffering character-input stream that uses an input buffer of the specified size. Declaration public BufferedCharFilter(TextReader in, int size) Parameters Type Name Description System.IO.TextReader in A TextReader System.Int32 size Input-buffer size Fields | Improve this Doc View Source DEFAULT_CHAR_BUFFER_SIZE Declaration public const int DEFAULT_CHAR_BUFFER_SIZE = 8192 Field Value Type Description System.Int32 | Improve this Doc View Source m_lock The object used to synchronize access to the reader. Declaration protected object m_lock Field Value Type Description System.Object Properties | Improve this Doc View Source IsMarkSupported Indicates whether this reader supports the Mark(Int32) and Reset() methods. This implementation returns true . Declaration public override bool IsMarkSupported { get; } Property Value Type Description System.Boolean Overrides CharFilter.IsMarkSupported See Also Mark(Int32) Reset() | Improve this Doc View Source IsReady Indicates whether this reader is ready to be read without blocking. Declaration public override bool IsReady { get; } Property Value Type Description System.Boolean true if this reader will not block when Read() is called, false if unknown or blocking will occur. Overrides CharFilter.IsReady Methods | Improve this Doc View Source Close() Declaration public override void Close() Overrides System.IO.TextReader.Close() | Improve this Doc View Source Dispose(Boolean) Disposes this reader. This implementation closes the buffered source reader and releases the buffer. Nothing is done if this reader has already been disposed. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides CharFilter.Dispose(Boolean) Exceptions Type Condition System.IO.IOException if an error occurs while closing this reader. | Improve this Doc View Source InitializeLifetimeService() Declaration public override object InitializeLifetimeService() Returns Type Description System.Object Overrides System.MarshalByRefObject.InitializeLifetimeService() | Improve this Doc View Source Mark(Int32) Sets a mark position in this reader. The parameter markLimit indicates how many characters can be read before the mark is invalidated. Calling Reset() will reposition the reader back to the marked position if Lucene.Net.Analysis.Util.BufferedCharFilter.markLimit has not been surpassed. Declaration public override void Mark(int markLimit) Parameters Type Name Description System.Int32 markLimit the number of characters that can be read before the mark is invalidated. Overrides CharFilter.Mark(Int32) Exceptions Type Condition System.ArgumentOutOfRangeException if markLimit < 0 System.IO.IOException if an error occurs while setting a mark in this reader. | Improve this Doc View Source Peek() Declaration public override int Peek() Returns Type Description System.Int32 Overrides System.IO.TextReader.Peek() | Improve this Doc View Source Read() Reads a single character from this reader and returns it with the two higher-order bytes set to 0. If possible, BufferedCharFilter returns a character from the buffer. If there are no characters available in the buffer, it fills the buffer and then returns a character. It returns -1 if there are no more characters in the source reader. Declaration public override int Read() Returns Type Description System.Int32 The character read or -1 if the end of the source reader has been reached. Overrides CharFilter.Read() Exceptions Type Condition System.IO.IOException If this reader is disposed or some other I/O error occurs. | Improve this Doc View Source Read(Char[], Int32, Int32) Reads at most length characters from this reader and stores them at offset in the character array buffer . Returns the number of characters actually read or -1 if the end of the source reader has been reached. If all the buffered characters have been used, a mark has not been set and the requested number of characters is larger than this readers buffer size, BufferedReader bypasses the buffer and simply places the results directly into buffer . Declaration public override int Read(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer the character array to store the characters read. System.Int32 offset the initial position in buffer to store the bytes read from this reader. System.Int32 length the maximum number of characters to read, must be non-negative. Returns Type Description System.Int32 number of characters read or -1 if the end of the source reader has been reached. Overrides CharFilter.Read(Char[], Int32, Int32) Exceptions Type Condition System.ArgumentOutOfRangeException if offset < 0 or length < 0 , or if offset + length is greater than the size of buffer . System.IO.IOException if this reader is disposed or some other I/O error occurs. | Improve this Doc View Source ReadAsync(Char[], Int32, Int32) Declaration public override Task<int> ReadAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Threading.Tasks.Task < System.Int32 > Overrides System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadBlock(Char[], Int32, Int32) Declaration public override int ReadBlock(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Int32 Overrides System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadBlockAsync(Char[], Int32, Int32) Declaration public override Task<int> ReadBlockAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Threading.Tasks.Task < System.Int32 > Overrides System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadLine() Returns the next line of text available from this reader. A line is represented by zero or more characters followed by '\\n' , '\\r' , \"\\r\\n\" or the end of the reader. The string does not include the newline sequence. Declaration public override string ReadLine() Returns Type Description System.String The contents of the line or null if no characters were read before the end of the reader has been reached. Overrides System.IO.TextReader.ReadLine() Exceptions Type Condition System.IO.IOException if this reader is disposed or some other I/O error occurs. | Improve this Doc View Source ReadLineAsync() Declaration public override Task<string> ReadLineAsync() Returns Type Description System.Threading.Tasks.Task < System.String > Overrides System.IO.TextReader.ReadLineAsync() | Improve this Doc View Source ReadToEnd() Declaration public override string ReadToEnd() Returns Type Description System.String Overrides System.IO.TextReader.ReadToEnd() | Improve this Doc View Source ReadToEndAsync() Declaration public override Task<string> ReadToEndAsync() Returns Type Description System.Threading.Tasks.Task < System.String > Overrides System.IO.TextReader.ReadToEndAsync() | Improve this Doc View Source Reset() Resets this reader's position to the last Mark(Int32) location. Invocations of Read() and Skip(Int32) will occur from this new location. Declaration public override void Reset() Overrides CharFilter.Reset() Exceptions Type Condition System.IO.IOException If this reader is disposed or no mark has been set. See Also Mark(Int32) IsMarkSupported | Improve this Doc View Source Skip(Int32) Skips amount characters in this reader. Subsequent Read() s will not return these characters unless Reset() is used. Skipping characters may invalidate a mark if Lucene.Net.Analysis.Util.BufferedCharFilter.markLimit is surpassed. Declaration public override long Skip(int amount) Parameters Type Name Description System.Int32 amount the maximum number of characters to skip. Returns Type Description System.Int64 the number of characters actually skipped. Overrides CharFilter.Skip(Int32) Exceptions Type Condition System.ArgumentOutOfRangeException if amount < 0 . System.IO.IOException If this reader is disposed or some other I/O error occurs. See Also Mark(Int32) IsMarkSupported Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html",
    "title": "Class CharacterUtils.CharacterBuffer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharacterUtils.CharacterBuffer A simple IO buffer to use with Fill(CharacterUtils.CharacterBuffer, TextReader) . Inheritance System.Object CharacterUtils.CharacterBuffer 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CharacterBuffer Properties | Improve this Doc View Source Buffer Returns the internal buffer Declaration public char[] Buffer { get; } Property Value Type Description System.Char [] the buffer | Improve this Doc View Source Length Return the length of the data in the internal buffer starting at Offset Declaration public int Length { get; } Property Value Type Description System.Int32 the length | Improve this Doc View Source Offset Returns the data offset in the internal buffer. Declaration public int Offset { get; } Property Value Type Description System.Int32 the offset Methods | Improve this Doc View Source Reset() Resets the CharacterBuffer. All internals are reset to its default values. Declaration public void Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.html",
    "title": "Class CharacterUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharacterUtils CharacterUtils provides a unified interface to Character-related operations to implement backwards compatible character operations based on a LuceneVersion instance. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CharacterUtils 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharacterUtils Methods | Improve this Doc View Source CodePointAt(ICharSequence, Int32) Returns the code point at the given index of the J2N.Text.ICharSequence . Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method mimics the behavior of Character.CodePointAt(char[], int) as it would have been available on a Java 1.4 JVM or on a later virtual machine version. Declaration public abstract int CodePointAt(ICharSequence seq, int offset) Parameters Type Name Description J2N.Text.ICharSequence seq a character sequence System.Int32 offset the offset to the char values in the chars array to be converted Returns Type Description System.Int32 the Unicode code point at the given index Exceptions Type Condition System.NullReferenceException if the sequence is null. System.ArgumentOutOfRangeException if the value offset is negative or not less than the length of the character sequence. | Improve this Doc View Source CodePointAt(Char[], Int32, Int32) Returns the code point at the given index of the char array where only elements with index less than the limit are used. Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method mimics the behavior of Character.CodePointAt(char[], int) as it would have been available on a Java 1.4 JVM or on a later virtual machine version. Declaration public abstract int CodePointAt(char[] chars, int offset, int limit) Parameters Type Name Description System.Char [] chars a character array System.Int32 offset the offset to the char values in the chars array to be converted System.Int32 limit the index afer the last element that should be used to calculate codepoint. Returns Type Description System.Int32 the Unicode code point at the given index Exceptions Type Condition System.NullReferenceException if the array is null. System.ArgumentOutOfRangeException if the value offset is negative or not less than the length of the char array. | Improve this Doc View Source CodePointAt(String, Int32) Returns the code point at the given index of the System.String . Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method mimics the behavior of Character.CodePointAt(char[], int) as it would have been available on a Java 1.4 JVM or on a later virtual machine version. Declaration public abstract int CodePointAt(string seq, int offset) Parameters Type Name Description System.String seq a character sequence System.Int32 offset the offset to the char values in the chars array to be converted Returns Type Description System.Int32 the Unicode code point at the given index Exceptions Type Condition System.NullReferenceException if the sequence is null. System.ArgumentOutOfRangeException if the value offset is negative or not less than the length of the character sequence. | Improve this Doc View Source CodePointCount(String) Return the number of characters in seq . Declaration public abstract int CodePointCount(string seq) Parameters Type Name Description System.String seq Returns Type Description System.Int32 | Improve this Doc View Source Fill(CharacterUtils.CharacterBuffer, TextReader) Convenience method which calls Fill(buffer, reader, buffer.Buffer.Length) . Declaration public virtual bool Fill(CharacterUtils.CharacterBuffer buffer, TextReader reader) Parameters Type Name Description CharacterUtils.CharacterBuffer buffer System.IO.TextReader reader Returns Type Description System.Boolean | Improve this Doc View Source Fill(CharacterUtils.CharacterBuffer, TextReader, Int32) Fills the CharacterUtils.CharacterBuffer with characters read from the given reader System.IO.TextReader . This method tries to read numChars characters into the CharacterUtils.CharacterBuffer , each call to fill will start filling the buffer from offset 0 up to numChars . In case code points can span across 2 java characters, this method may only fill numChars - 1 characters in order not to split in the middle of a surrogate pair, even if there are remaining characters in the System.IO.TextReader . Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method implements supplementary character awareness when filling the given buffer. For all LuceneVersion > 3.0 Fill(CharacterUtils.CharacterBuffer, TextReader, Int32) guarantees that the given CharacterUtils.CharacterBuffer will never contain a high surrogate character as the last element in the buffer unless it is the last available character in the reader. In other words, high and low surrogate pairs will always be preserved across buffer boarders. A return value of false means that this method call exhausted the reader, but there may be some bytes which have been read, which can be verified by checking whether buffer.Length > 0 . Declaration public abstract bool Fill(CharacterUtils.CharacterBuffer buffer, TextReader reader, int numChars) Parameters Type Name Description CharacterUtils.CharacterBuffer buffer the buffer to fill. System.IO.TextReader reader the reader to read characters from. System.Int32 numChars the number of chars to read Returns Type Description System.Boolean false if and only if reader.read returned -1 while trying to fill the buffer Exceptions Type Condition System.IO.IOException if the reader throws an System.IO.IOException . | Improve this Doc View Source GetInstance(LuceneVersion) Returns a CharacterUtils implementation according to the given LuceneVersion instance. Declaration public static CharacterUtils GetInstance(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion a version instance Returns Type Description CharacterUtils a CharacterUtils implementation according to the given LuceneVersion instance. | Improve this Doc View Source GetJava4Instance(LuceneVersion) Return a CharacterUtils instance compatible with Java 1.4. Declaration public static CharacterUtils GetJava4Instance(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Returns Type Description CharacterUtils | Improve this Doc View Source NewCharacterBuffer(Int32) Creates a new CharacterUtils.CharacterBuffer and allocates a char[] of the given bufferSize. Declaration public static CharacterUtils.CharacterBuffer NewCharacterBuffer(int bufferSize) Parameters Type Name Description System.Int32 bufferSize the internal char buffer size, must be >= 2 Returns Type Description CharacterUtils.CharacterBuffer a new CharacterUtils.CharacterBuffer instance. | Improve this Doc View Source OffsetByCodePoints(Char[], Int32, Int32, Int32, Int32) Return the index within buf[start:start+count] which is by offset code points from index . Declaration public abstract int OffsetByCodePoints(char[] buf, int start, int count, int index, int offset) Parameters Type Name Description System.Char [] buf System.Int32 start System.Int32 count System.Int32 index System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source ToChars(Int32[], Int32, Int32, Char[], Int32) Converts a sequence of unicode code points to a sequence of .NET characters. Declaration public int ToChars(int[] src, int srcOff, int srcLen, char[] dest, int destOff) Parameters Type Name Description System.Int32 [] src System.Int32 srcOff System.Int32 srcLen System.Char [] dest System.Int32 destOff Returns Type Description System.Int32 the number of chars written to the destination buffer | Improve this Doc View Source ToCodePoints(Char[], Int32, Int32, Int32[], Int32) Converts a sequence of .NET characters to a sequence of unicode code points. Declaration public int ToCodePoints(char[] src, int srcOff, int srcLen, int[] dest, int destOff) Parameters Type Name Description System.Char [] src System.Int32 srcOff System.Int32 srcLen System.Int32 [] dest System.Int32 destOff Returns Type Description System.Int32 the number of code points written to the destination buffer | Improve this Doc View Source ToLower(Char[], Int32, Int32) Converts each unicode codepoint to lowerCase via J2N.Character.ToLower(System.Int32) starting at the given offset. Declaration public virtual void ToLower(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer the char buffer to lowercase System.Int32 offset the offset to start at System.Int32 length the number of characters in the buffer to lower case | Improve this Doc View Source ToUpper(Char[], Int32, Int32) Converts each unicode codepoint to UpperCase via J2N.Character.ToUpper(System.Int32) starting at the given offset. Declaration public virtual void ToUpper(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer the char buffer to UPPERCASE System.Int32 offset the offset to start at System.Int32 length the number of characters in the buffer to lower case"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap.html",
    "title": "Class CharArrayMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArrayMap Inheritance System.Object CharArrayMap 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArrayMap Methods | Improve this Doc View Source Copy<TValue>(LuceneVersion, IDictionary<String, TValue>) Returns a copy of the given map as a CharArrayMap<TValue> . If the given map is a CharArrayMap<TValue> the ignoreCase property will be preserved. Note: If you intend to create a copy of another CharArrayMap<TValue> where the LuceneVersion of the source map differs from its copy CharArrayMap(LuceneVersion, IDictionary<String, TValue>, Boolean) should be used instead. The Copy<TValue>(LuceneVersion, IDictionary<String, TValue>) will preserve the LuceneVersion of the source map if it is an instance of CharArrayMap<TValue> . Declaration public static CharArrayMap<TValue> Copy<TValue>(LuceneVersion matchVersion, IDictionary<string, TValue> map) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see Version note above for details. This argument will be ignored if the given map is a CharArrayMap<TValue> . System.Collections.Generic.IDictionary < System.String , TValue> map a map to copy Returns Type Description CharArrayMap <TValue> a copy of the given map as a CharArrayMap<TValue> . If the given map is a CharArrayMap<TValue> the ignoreCase property as well as the matchVersion will be of the given map will be preserved. Type Parameters Name Description TValue | Improve this Doc View Source UnmodifiableMap<TValue>(CharArrayMap<TValue>) Returns an unmodifiable CharArrayMap<TValue> . This allows to provide unmodifiable views of internal map for \"read-only\" use. Declaration public static CharArrayMap<TValue> UnmodifiableMap<TValue>(CharArrayMap<TValue> map) Parameters Type Name Description CharArrayMap <TValue> map a map for which the unmodifiable map is returned. Returns Type Description CharArrayMap <TValue> an new unmodifiable CharArrayMap<TValue> . Type Parameters Name Description TValue Exceptions Type Condition System.ArgumentException if the given map is null ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html",
    "title": "Class CharArrayMap<TValue>.EntryIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArrayMap<TValue>.EntryIterator public iterator class so efficient methods are exposed to users Inheritance System.Object CharArrayMap<TValue>.EntryIterator Implements System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.IEnumerator 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EntryIterator : IEnumerator<KeyValuePair<string, TValue>>, IEnumerator, IDisposable Properties | Improve this Doc View Source Current Declaration public virtual KeyValuePair<string, TValue> Current { get; } Property Value Type Description System.Collections.Generic.KeyValuePair < System.String , TValue> | Improve this Doc View Source CurrentValue returns the value associated with the current key Declaration public virtual TValue CurrentValue { get; } Property Value Type Description TValue | Improve this Doc View Source HasNext Declaration public virtual bool HasNext { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source MoveNext() Declaration public virtual bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source NextKey() gets the next key... do not modify the returned char[] Declaration public virtual char[] NextKey() Returns Type Description System.Char [] | Improve this Doc View Source NextKeyString() gets the next key as a newly created System.String object Declaration public virtual string NextKeyString() Returns Type Description System.String | Improve this Doc View Source Reset() Declaration public virtual void Reset() | Improve this Doc View Source SetValue(TValue) sets the value associated with the last key returned Declaration public virtual TValue SetValue(TValue value) Parameters Type Name Description TValue value Returns Type Description TValue Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html",
    "title": "Class CharArrayMap<TValue>.EntrySet_ | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArrayMap<TValue>.EntrySet_ public EntrySet_ class so efficient methods are exposed to users NOTE: In .NET this was renamed to EntrySet_ because it conflicted with the method EntrySet(). Since there is also an extension method named IDictionary{K,V}.EntrySet() that this class needs to override, changing the name of the method was not possible because the extension method would produce incorrect results if it were inadvertently called, leading to hard-to-diagnose bugs. Another difference between this set and the Java counterpart is that it implements System.Collections.Generic.ICollection<T> rather than System.Collections.Generic.ISet<T> so we don't have to implement a bunch of methods that we aren't really interested in. The Keys and Values properties both return System.Collections.Generic.ICollection<T> , and while there is no EntrySet() method or property in .NET, if there were it would certainly return System.Collections.Generic.ICollection<T> . Inheritance System.Object CharArrayMap<TValue>.EntrySet_ Implements System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , 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) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EntrySet_ : ICollection<KeyValuePair<string, TValue>>, IEnumerable<KeyValuePair<string, TValue>>, IEnumerable Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(KeyValuePair<String, TValue>) Declaration public void Add(KeyValuePair<string, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue> item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(Object) Declaration public bool Contains(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<String, TValue>[], Int32) Declaration public void CopyTo(KeyValuePair<string, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator GetEnumerator() Returns Type Description System.Collections.IEnumerator | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source IEnumerable<KeyValuePair<String, TValue>>.GetEnumerator() Declaration IEnumerator<KeyValuePair<string, TValue>> IEnumerable<KeyValuePair<string, TValue>>.GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair < System.String , TValue>> Implements System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.html",
    "title": "Class CharArrayMap<TValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArrayMap<TValue> A simple class that stores key System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the map, nor does it resize its hash table to be smaller, etc. It is designed to be quick to retrieve items by char[] keys without the necessity of converting to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArrayMap : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArrayMap with the behavior before Lucene 3.1 pass a LuceneVersion < 3.1 to the constructors. Inheritance System.Object CharArrayMap<TValue> Implements System.Collections.Generic.IDictionary < System.String , TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.IEnumerable 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArrayMap<TValue> : ICharArrayMap, IDictionary<string, TValue>, ICollection<KeyValuePair<string, TValue>>, IEnumerable<KeyValuePair<string, TValue>>, IEnumerable Type Parameters Name Description TValue Constructors | Improve this Doc View Source CharArrayMap(LuceneVersion, IDictionary<String, TValue>, Boolean) Creates a map from the mappings in another map. Declaration public CharArrayMap(LuceneVersion matchVersion, IDictionary<string, TValue> c, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see Version note above for details. System.Collections.Generic.IDictionary < System.String , TValue> c a map ( ) whose mappings to be copied System.Boolean ignoreCase false if and only if the set should be case sensitive; otherwise true . | Improve this Doc View Source CharArrayMap(LuceneVersion, Int32, Boolean) Create map with enough capacity to hold startSize terms Declaration public CharArrayMap(LuceneVersion matchVersion, int startSize, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version - see CharArrayMap<TValue> for details. System.Int32 startSize the initial capacity System.Boolean ignoreCase false if and only if the set should be case sensitive; otherwise true . Properties | Improve this Doc View Source Count Gets the number of key/value pairs contained in the CharArrayMap<TValue> . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly true if the CharArrayMap<TValue> is read-only; otherwise false . Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[ICharSequence] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[ICharSequence key] { get; set; } Parameters Type Name Description J2N.Text.ICharSequence key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Item[Char[]] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[char[] key] { get; set; } Parameters Type Name Description System.Char [] key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Item[Char[], Int32, Int32] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[char[] key, int offset, int length] { get; set; } Parameters Type Name Description System.Char [] key The key of the value to get or set. System.Int32 offset The position of the key where the target key begins. System.Int32 length The total length of the key . Property Value Type Description TValue | Improve this Doc View Source Item[Object] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[object key] { get; set; } Parameters Type Name Description System.Object key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Item[String] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[string key] { get; set; } Parameters Type Name Description System.String key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Keys Gets a collection containing the keys in the CharArrayMap<TValue> . Declaration public virtual ICollection<string> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source MatchVersion The Lucene version corresponding to the compatibility behavior that this instance emulates Declaration public virtual LuceneVersion MatchVersion { get; } Property Value Type Description LuceneVersion | Improve this Doc View Source Values Gets a collection containing the values in the CharArrayMap<TValue> . This specialized collection can be enumerated in order to read its values and overrides System.Object.ToString() in order to display a string representation of the values. Declaration public ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(KeyValuePair<String, TValue>) Adds the for the passed in . Note that the instance is not added to the dictionary. Declaration public virtual void Add(KeyValuePair<string, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue> item A whose will be added for the corresponding . | Improve this Doc View Source Add(String, TValue) Adds the value for the passed in key . Declaration public virtual void Add(string key, TValue value) Parameters Type Name Description System.String key The string-able type to be added/updated in the dictionary. TValue value The corresponding value for the given key . | Improve this Doc View Source Clear() Clears all entries in this map. This method is supported for reusing, but not System.Collections.Generic.IDictionary<TKey, TValue>.Remove(TKey) . Declaration public virtual void Clear() | Improve this Doc View Source ContainsKey(ICharSequence) true if the text J2N.Text.ICharSequence is in the Keys ; otherwise false Declaration public virtual bool ContainsKey(ICharSequence text) Parameters Type Name Description J2N.Text.ICharSequence text Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(Char[]) true if the entire Keys is the same as the text char[] being passed in; otherwise false . Declaration public virtual bool ContainsKey(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(Char[], Int32, Int32) true if the length chars of text starting at offset are in the Keys Declaration public virtual bool ContainsKey(char[] text, int offset, int length) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(Object) true if the o System.Object.ToString() is in the Keys ; otherwise false Declaration public virtual bool ContainsKey(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(String) true if the text System.String is in the Keys ; otherwise false Declaration public virtual bool ContainsKey(string text) Parameters Type Name Description System.String text Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(CharArrayMap<TValue>) Copies all items in the current CharArrayMap<TValue> to the passed in CharArrayMap<TValue> . Declaration public virtual void CopyTo(CharArrayMap<TValue> map) Parameters Type Name Description CharArrayMap <TValue> map | Improve this Doc View Source CopyTo(KeyValuePair<String, TValue>[], Int32) Copies all items in the current dictionary the array starting at the arrayIndex . The array is assumed to already be dimensioned to fit the elements in this dictionary; otherwise a System.ArgumentOutOfRangeException will be thrown. Declaration public virtual void CopyTo(KeyValuePair<string, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue>[] array The array to copy the items into. System.Int32 arrayIndex A 32-bit integer that represents the index in array at which copying begins. | Improve this Doc View Source EmptyMap() Returns an empty, unmodifiable map. Declaration public static CharArrayMap<TValue> EmptyMap() Returns Type Description CharArrayMap <TValue> | Improve this Doc View Source EntrySet() Declaration public CharArrayMap<TValue>.EntrySet_ EntrySet() Returns Type Description CharArrayMap.EntrySet_ <> | Improve this Doc View Source Equals(Object) LUCENENET Specific - test for value equality similar to how it is done in Java Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Another dictionary to test the values of Returns Type Description System.Boolean true if the given object is an that contains the same key value pairs as the current map Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Get(ICharSequence) returns the value of the mapping of the chars inside this J2N.Text.ICharSequence Declaration public virtual TValue Get(ICharSequence text) Parameters Type Name Description J2N.Text.ICharSequence text Returns Type Description TValue | Improve this Doc View Source Get(Char[]) returns the value of the mapping of the chars inside this text Declaration public virtual TValue Get(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description TValue | Improve this Doc View Source Get(Char[], Int32, Int32) returns the value of the mapping of length chars of text starting at offset Declaration public virtual TValue Get(char[] text, int offset, int length) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 length Returns Type Description TValue | Improve this Doc View Source Get(Object) returns the value of the mapping of the chars inside this System.Object.ToString() Declaration public virtual TValue Get(object o) Parameters Type Name Description System.Object o Returns Type Description TValue | Improve this Doc View Source Get(String) returns the value of the mapping of the chars inside this System.String Declaration public virtual TValue Get(string text) Parameters Type Name Description System.String text Returns Type Description TValue | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the CharArrayMap<TValue> . Declaration public virtual IEnumerator<KeyValuePair<string, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair < System.String , TValue>> | Improve this Doc View Source GetHashCode() LUCENENET Specific - override required by .NET because we override Equals to simulate Java's value equality checking. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Put(ICharSequence) Adds a placeholder with the given text as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(ICharSequence text) Parameters Type Name Description J2N.Text.ICharSequence text Returns Type Description System.Boolean | Improve this Doc View Source Put(ICharSequence, TValue) Add the given mapping. Declaration public virtual TValue Put(ICharSequence text, TValue value) Parameters Type Name Description J2N.Text.ICharSequence text TValue value Returns Type Description TValue | Improve this Doc View Source Put(Char[]) Adds a placeholder with the given text as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean | Improve this Doc View Source Put(Char[], TValue) Add the given mapping. If ignoreCase is true for this Set, the text array will be directly modified. The user should never modify this text array after calling this method. Declaration public virtual TValue Put(char[] text, TValue value) Parameters Type Name Description System.Char [] text TValue value Returns Type Description TValue | Improve this Doc View Source Put(Object) Adds a placeholder with the given o as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source Put(Object, TValue) Add the given mapping using the System.Object.ToString() representation of o in the System.Globalization.CultureInfo.InvariantCulture . Declaration public virtual TValue Put(object o, TValue value) Parameters Type Name Description System.Object o TValue value Returns Type Description TValue | Improve this Doc View Source Put(String) Adds a placeholder with the given text as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(string text) Parameters Type Name Description System.String text Returns Type Description System.Boolean | Improve this Doc View Source Put(String, TValue) Add the given mapping. Declaration public virtual TValue Put(string text, TValue value) Parameters Type Name Description System.String text TValue value Returns Type Description TValue | Improve this Doc View Source PutAll(IDictionary<ICharSequence, TValue>) This implementation enumerates over the specified IDictionary{ICharSequence,TValue} 's entries, and calls this map's Put(ICharSequence, TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<ICharSequence, TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < J2N.Text.ICharSequence , TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IDictionary<Char[], TValue>) This implementation enumerates over the specified IDictionary{char[],TValue} 's entries, and calls this map's Put(Char[], TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<char[], TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < System.Char [], TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IDictionary<Object, TValue>) This implementation enumerates over the specified IDictionary{object,TValue} 's entries, and calls this map's Put(Object, TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<object, TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < System.Object , TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IDictionary<String, TValue>) This implementation enumerates over the specified IDictionary{string,TValue} 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<string, TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<ICharSequence, TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{ICharSequence,TValue}} 's entries, and calls this map's Put(ICharSequence, TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<ICharSequence, TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < J2N.Text.ICharSequence , TValue>> collection The values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<Char[], TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{char[],TValue}} 's entries, and calls this map's Put(Char[], TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<char[], TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Char [], TValue>> collection The values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<Object, TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{object,TValue}} 's entries, and calls this map's Put(Object, TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<object, TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Object , TValue>> collection The values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<String, TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{string,TValue}} 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<string, TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , TValue>> collection The values to add/update in the current map. | Improve this Doc View Source ToString() Returns a string that represents the current object. (Inherited from System.Object .) Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source TryGetValue(ICharSequence, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(ICharSequence key, out TValue value) Parameters Type Name Description J2N.Text.ICharSequence key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(Char[], out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(char[] key, out TValue value) Parameters Type Name Description System.Char [] key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(Char[], Int32, Int32, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(char[] key, int offset, int length, out TValue value) Parameters Type Name Description System.Char [] key The key of the value to get. System.Int32 offset The position of the key where the target key begins. System.Int32 length The total length of the key . TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(Object, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(object key, out TValue value) Parameters Type Name Description System.Object key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(String, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(string key, out TValue value) Parameters Type Name Description System.String key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the CharArrayMap<TValue> . 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 Extension Methods CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Boolean) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Byte) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Char) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int32) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int64) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, SByte) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int16) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt32) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt64) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt16) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Boolean) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Byte) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Char) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Decimal) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Double) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Single) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int32) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int64) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, SByte) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int16) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt32) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt64) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt16) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Boolean, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Byte, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Char, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int32, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int64, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, SByte, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int16, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt32, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt64, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt16, TValue) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Boolean, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Byte, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Char, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int32, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int64, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<SByte, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int16, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt32, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt64, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt16, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Boolean, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Byte, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Char, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int32, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int64, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<SByte, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int16, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt32, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt64, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt16, TValue>>) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Boolean, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Byte, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Char, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int32, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int64, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, SByte, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int16, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt32, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt64, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt16, out TValue)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMapExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMapExtensions.html",
    "title": "Class CharArrayMapExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArrayMapExtensions LUCENENET specific extension methods for CharArrayMap Inheritance System.Object CharArrayMapExtensions 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class CharArrayMapExtensions Methods | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Boolean) true if the key System.Boolean is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, bool key) Parameters Type Name Description CharArrayMap <TValue> map System.Boolean key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Byte) true if the key System.Byte is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, byte key) Parameters Type Name Description CharArrayMap <TValue> map System.Byte key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Char) true if the key System.Char is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, char key) Parameters Type Name Description CharArrayMap <TValue> map System.Char key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Int16) true if the key System.Int16 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, short key) Parameters Type Name Description CharArrayMap <TValue> map System.Int16 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Int32) true if the key System.Int32 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, int key) Parameters Type Name Description CharArrayMap <TValue> map System.Int32 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Int64) true if the key System.Int64 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, long key) Parameters Type Name Description CharArrayMap <TValue> map System.Int64 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, SByte) true if the key System.SByte is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, sbyte key) Parameters Type Name Description CharArrayMap <TValue> map System.SByte key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, UInt16) true if the key System.UInt16 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, ushort key) Parameters Type Name Description CharArrayMap <TValue> map System.UInt16 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, UInt32) true if the key System.UInt32 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, uint key) Parameters Type Name Description CharArrayMap <TValue> map System.UInt32 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, UInt64) true if the key System.UInt64 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, ulong key) Parameters Type Name Description CharArrayMap <TValue> map System.UInt64 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Boolean) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, bool text) Parameters Type Name Description CharArrayMap <TValue> map System.Boolean text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Byte) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, byte text) Parameters Type Name Description CharArrayMap <TValue> map System.Byte text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Char) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, char text) Parameters Type Name Description CharArrayMap <TValue> map System.Char text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Decimal) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, decimal text) Parameters Type Name Description CharArrayMap <TValue> map System.Decimal text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Double) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, double text) Parameters Type Name Description CharArrayMap <TValue> map System.Double text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Int16) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, short text) Parameters Type Name Description CharArrayMap <TValue> map System.Int16 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Int32) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, int text) Parameters Type Name Description CharArrayMap <TValue> map System.Int32 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Int64) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, long text) Parameters Type Name Description CharArrayMap <TValue> map System.Int64 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, SByte) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, sbyte text) Parameters Type Name Description CharArrayMap <TValue> map System.SByte text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Single) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, float text) Parameters Type Name Description CharArrayMap <TValue> map System.Single text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, UInt16) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, ushort text) Parameters Type Name Description CharArrayMap <TValue> map System.UInt16 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, UInt32) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, uint text) Parameters Type Name Description CharArrayMap <TValue> map System.UInt32 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, UInt64) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, ulong text) Parameters Type Name Description CharArrayMap <TValue> map System.UInt64 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Boolean, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, bool text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Boolean text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Byte, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, byte text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Byte text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Char, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, char text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Char text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Int16, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, short text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Int16 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Int32, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, int text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Int32 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Int64, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, long text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Int64 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, SByte, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, sbyte text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.SByte text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, UInt16, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, ushort text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.UInt16 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, UInt32, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, uint text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.UInt32 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, UInt64, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, ulong text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.UInt64 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Boolean, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<bool, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Boolean , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Byte, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<byte, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Byte , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Char, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<char, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Char , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int16, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<short, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Int16 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int32, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<int, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Int32 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int64, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<long, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Int64 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<SByte, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<sbyte, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.SByte , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt16, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<ushort, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.UInt16 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt32, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<uint, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.UInt32 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt64, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<ulong, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.UInt64 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Boolean, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<bool, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Boolean , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Byte, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<byte, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Byte , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Char, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<char, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Char , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int16, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<short, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Int16 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int32, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<int, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Int32 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int64, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<long, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Int64 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<SByte, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<sbyte, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.SByte , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt16, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<ushort, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.UInt16 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt32, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<uint, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.UInt32 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt64, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<ulong, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.UInt64 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Boolean, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, bool key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Boolean key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Byte, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, byte key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Byte key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Char, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, char key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Char key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Int16, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, short key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Int16 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Int32, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, int key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Int32 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Int64, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, long key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Int64 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, SByte, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, sbyte key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.SByte key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, UInt16, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, ushort key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.UInt16 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, UInt32, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, uint key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.UInt32 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, UInt64, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, ulong key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.UInt64 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySet.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySet.html",
    "title": "Class CharArraySet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArraySet A simple class that stores System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the set, nor does it resize its hash table to be smaller, etc. It is designed to be quick to test if a char[] is in the set without the necessity of converting it to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArraySet : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArraySet with the behavior before Lucene 3.1 pass a LuceneVersion to the constructors. Please note: This class implements System.Collections.Generic.ISet<T> but does not behave like it should in all cases. The generic type is System.String , because you can add any object to it, that has a string representation (which is converted to a string). The add methods will use System.Object.ToString() and store the result using a char[] buffer. The same behavior have the Contains(String) methods. The GetEnumerator() returns an IEnumerator{char[]} Inheritance System.Object CharArraySet Implements System.Collections.Generic.ISet < System.String > System.Collections.Generic.ICollection < System.String > System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArraySet : ISet<string>, ICollection<string>, IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source CharArraySet(LuceneVersion, ICollection<String>, Boolean) Creates a set from a collection of objects. Declaration public CharArraySet(LuceneVersion matchVersion, ICollection<string> c, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see CharArraySet for details. System.Collections.Generic.ICollection < System.String > c a collection whose elements to be placed into the set System.Boolean ignoreCase false if and only if the set should be case sensitive otherwise true . | Improve this Doc View Source CharArraySet(LuceneVersion, Int32, Boolean) Create set with enough capacity to hold startSize terms Declaration public CharArraySet(LuceneVersion matchVersion, int startSize, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see CharArraySet for details. System.Int32 startSize the initial capacity System.Boolean ignoreCase false if and only if the set should be case sensitive otherwise true . Fields | Improve this Doc View Source EMPTY_SET Declaration public static readonly CharArraySet EMPTY_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source Count Gets the number of elements contained in the CharArraySet . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly true if the CharArraySet is read-only; otherwise false . Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(ICharSequence) Add this J2N.Text.ICharSequence into the set Declaration public virtual bool Add(ICharSequence text) Parameters Type Name Description J2N.Text.ICharSequence text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(Char[]) Add this char[] directly to the set. If ignoreCase is true for this CharArraySet , the text array will be directly modified. The user should never modify this text array after calling this method. Declaration public virtual bool Add(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(Object) Add the System.Object.ToString() representation of o into the set. The System.Object.ToString() method is called after setting the thread to System.Globalization.CultureInfo.InvariantCulture . If the type of o is a value type, it will be converted using the System.Globalization.CultureInfo.InvariantCulture . Declaration public virtual bool Add(object o) Parameters Type Name Description System.Object o A string-able object Returns Type Description System.Boolean true if o was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(String) Add this System.String into the set Declaration public virtual bool Add(string text) Parameters Type Name Description System.String text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Clear() Clears all entries in this set. This method is supported for reusing, but not ICollection{string}.Remove(string) . Declaration public virtual void Clear() | Improve this Doc View Source Contains(ICharSequence) true if the J2N.Text.ICharSequence is in the set Declaration public virtual bool Contains(ICharSequence cs) Parameters Type Name Description J2N.Text.ICharSequence cs Returns Type Description System.Boolean | Improve this Doc View Source Contains(Char[]) true if the char[] s are in the set Declaration public virtual bool Contains(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean | Improve this Doc View Source Contains(Char[], Int32, Int32) true if the length chars of text starting at offset are in the set Declaration public virtual bool Contains(char[] text, int offset, int length) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source Contains(Object) true if the System.Object.ToString() representation of o is in the set Declaration public virtual bool Contains(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source Contains(String) true if the System.String is in the set Declaration public virtual bool Contains(string cs) Parameters Type Name Description System.String cs Returns Type Description System.Boolean | Improve this Doc View Source ContainsAll(IEnumerable<String>) Returns true if this collection contains all of the elements in the specified collection. Declaration public virtual bool ContainsAll(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other collection to be checked for containment in this collection Returns Type Description System.Boolean true if this CharArraySet contains all of the elements in the specified collection; otherwise, false . | Improve this Doc View Source ContainsAll<T>(IEnumerable<T>) Returns true if this collection contains all of the elements in the specified collection. Declaration public virtual bool ContainsAll<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other collection to be checked for containment in this collection Returns Type Description System.Boolean true if this CharArraySet contains all of the elements in the specified collection; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source Copy<T>(LuceneVersion, ICollection<T>) Returns a copy of the given set as a CharArraySet . If the given set is a CharArraySet the ignoreCase property will be preserved. Note: If you intend to create a copy of another CharArraySet where the LuceneVersion of the source set differs from its copy CharArraySet(LuceneVersion, ICollection<String>, Boolean) should be used instead. The Copy<T>(LuceneVersion, ICollection<T>) will preserve the LuceneVersion of the source set it is an instance of CharArraySet . Declaration public static CharArraySet Copy<T>(LuceneVersion matchVersion, ICollection<T> set) Parameters Type Name Description LuceneVersion matchVersion compatibility match version. This argument will be ignored if the given set is a CharArraySet . System.Collections.Generic.ICollection <T> set a set to copy Returns Type Description CharArraySet a copy of the given set as a CharArraySet . If the given set is a CharArraySet the Lucene.Net.Analysis.Util.CharArrayMap`1.ignoreCase field as well as the MatchVersion will be preserved. Type Parameters Name Description T | Improve this Doc View Source CopyTo(String[], Int32) Copies the entire CharArraySet to a one-dimensional string[] array, starting at the specified index of the target array. Declaration public void CopyTo(string[] array, int arrayIndex) Parameters Type Name Description System.String [] array The one-dimensional string[] Array that is the destination of the elements copied from CharArraySet . The Array must have zero-based indexing. System.Int32 arrayIndex The zero-based index in array at which copying begins. | Improve this Doc View Source Equals(Object) Compares the specified object with this set for equality. Returns true if the given object is also a set, the two sets have the same size, and every member of the given set is contained in this set. This ensures that the equals method works properly across different implementations of the ISet{string} interface. This implementation first checks if the specified object is this set; if so it returns true . Then, it checks if the specified object is a set whose size is identical to the size of this set; if not, it returns false . If so, it uses the enumerator of this set and the specified object to determine if all of the contained values are present (using System.String.Equals(System.String) ). Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj object to be compared for equality with this set Returns Type Description System.Boolean true if the specified object is equal to this set Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetEnumerator() Returns an System.Collections.IEnumerator for char[] instances in this set. Declaration public virtual IEnumerator GetEnumerator() Returns Type Description System.Collections.IEnumerator | Improve this Doc View Source GetHashCode() Returns the hash code value for this set. The hash code of a set is defined to be the sum of the hash codes of the elements in the set, where the hash code of a null element is defined to be zero. This ensures that s1.Equals(s2) implies that s1.GetHashCode()==s2.GetHashCode() for any two sets s1 and s2. This implementation iterates over the set, calling the GetHashCode() method on each element in the set, and adding up the results. Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code value for this set Overrides System.Object.GetHashCode() | Improve this Doc View Source IsProperSubsetOf(IEnumerable<String>) Determines whether a CharArraySet object is a proper subset of the specified collection. Declaration public virtual bool IsProperSubsetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper subset of other ; otherwise, false . | Improve this Doc View Source IsProperSubsetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a proper subset of the specified collection. Declaration public virtual bool IsProperSubsetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper subset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source IsProperSupersetOf(IEnumerable<String>) Determines whether a CharArraySet object is a proper superset of the specified collection. Declaration public virtual bool IsProperSupersetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper superset of other ; otherwise, false . | Improve this Doc View Source IsProperSupersetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a proper superset of the specified collection. Declaration public virtual bool IsProperSupersetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper superset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source IsSubsetOf(IEnumerable<String>) Determines whether a CharArraySet object is a subset of the specified collection. Declaration public virtual bool IsSubsetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a subset of other ; otherwise, false . | Improve this Doc View Source IsSubsetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a subset of the specified collection. Declaration public virtual bool IsSubsetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a subset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source IsSupersetOf(IEnumerable<String>) Determines whether a CharArraySet object is a superset of the specified collection. Declaration public virtual bool IsSupersetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a superset of other ; otherwise, false . | Improve this Doc View Source IsSupersetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a superset of the specified collection. Declaration public virtual bool IsSupersetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a superset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source Overlaps(IEnumerable<String>) Determines whether the current CharArraySet object and a specified collection share common elements. Declaration public virtual bool Overlaps(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if the CharArraySet object and other share at least one common element; otherwise, false . | Improve this Doc View Source Overlaps<T>(IEnumerable<T>) Determines whether the current CharArraySet object and a specified collection share common elements. Declaration public virtual bool Overlaps<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object and other share at least one common element; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source SetEquals(IEnumerable<String>) Determines whether the current set and the specified collection contain the same elements. Declaration public virtual bool SetEquals(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is equal to other; otherwise, false . | Improve this Doc View Source ToString() Returns a string that represents the current object. (Inherited from System.Object .) Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UnionWith(IEnumerable<ICharSequence>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual bool UnionWith(IEnumerable<ICharSequence> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < J2N.Text.ICharSequence > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(IEnumerable<Char[]>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual bool UnionWith(IEnumerable<char[]> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Char []> other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(IEnumerable<String>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual void UnionWith(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection whose elements should be merged into the CharArraySet . | Improve this Doc View Source UnionWith<T>(IEnumerable<T>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual bool UnionWith<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call Type Parameters Name Description T | Improve this Doc View Source UnmodifiableSet(CharArraySet) Returns an unmodifiable CharArraySet . This allows to provide unmodifiable views of internal sets for \"read-only\" use. Declaration public static CharArraySet UnmodifiableSet(CharArraySet set) Parameters Type Name Description CharArraySet set a set for which the unmodifiable set is returned. Returns Type Description CharArraySet an new unmodifiable CharArraySet . Exceptions Type Condition System.ArgumentNullException if the given set is null . Explicit Interface Implementations | Improve this Doc View Source ICollection<String>.Add(String) LUCENENET specific for supporting System.Collections.Generic.ICollection<T> . Declaration void ICollection<string>.Add(string item) Parameters Type Name Description System.String item | Improve this Doc View Source IEnumerable<String>.GetEnumerator() Declaration IEnumerator<string> IEnumerable<string>.GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Implements System.Collections.Generic.ISet<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods CharArraySetExtensions.Add(CharArraySet, Boolean) CharArraySetExtensions.Add(CharArraySet, Byte) CharArraySetExtensions.Add(CharArraySet, Char) CharArraySetExtensions.Add(CharArraySet, Int32) CharArraySetExtensions.Add(CharArraySet, Int64) CharArraySetExtensions.Add(CharArraySet, SByte) CharArraySetExtensions.Add(CharArraySet, Int16) CharArraySetExtensions.Add(CharArraySet, UInt32) CharArraySetExtensions.Add(CharArraySet, UInt64) CharArraySetExtensions.Add(CharArraySet, UInt16) CharArraySetExtensions.Contains(CharArraySet, Boolean) CharArraySetExtensions.Contains(CharArraySet, Byte) CharArraySetExtensions.Contains(CharArraySet, Char) CharArraySetExtensions.Contains(CharArraySet, Int32) CharArraySetExtensions.Contains(CharArraySet, Int64) CharArraySetExtensions.Contains(CharArraySet, SByte) CharArraySetExtensions.Contains(CharArraySet, Int16) CharArraySetExtensions.Contains(CharArraySet, UInt32) CharArraySetExtensions.Contains(CharArraySet, UInt64) CharArraySetExtensions.Contains(CharArraySet, UInt16) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Byte>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Char>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int32>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int64>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<SByte>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int16>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt32>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt64>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt16>)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySetExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySetExtensions.html",
    "title": "Class CharArraySetExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArraySetExtensions LUCENENET specific extension methods for CharArraySet Inheritance System.Object CharArraySetExtensions 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class CharArraySetExtensions Methods | Improve this Doc View Source Add(CharArraySet, Boolean) Add this System.Boolean into the set Declaration public static bool Add(this CharArraySet set, bool text) Parameters Type Name Description CharArraySet set System.Boolean text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Byte) Add this System.Byte into the set Declaration public static bool Add(this CharArraySet set, byte text) Parameters Type Name Description CharArraySet set System.Byte text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Char) Add this System.Char into the set Declaration public static bool Add(this CharArraySet set, char text) Parameters Type Name Description CharArraySet set System.Char text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Int16) Add this System.Int16 into the set Declaration public static bool Add(this CharArraySet set, short text) Parameters Type Name Description CharArraySet set System.Int16 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Int32) Add this System.Int32 into the set Declaration public static bool Add(this CharArraySet set, int text) Parameters Type Name Description CharArraySet set System.Int32 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Int64) Add this System.Int64 into the set Declaration public static bool Add(this CharArraySet set, long text) Parameters Type Name Description CharArraySet set System.Int64 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, SByte) Add this System.SByte into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, sbyte text) Parameters Type Name Description CharArraySet set System.SByte text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, UInt16) Add this System.UInt16 into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, ushort text) Parameters Type Name Description CharArraySet set System.UInt16 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, UInt32) Add this System.UInt32 into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, uint text) Parameters Type Name Description CharArraySet set System.UInt32 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, UInt64) Add this System.UInt64 into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, ulong text) Parameters Type Name Description CharArraySet set System.UInt64 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Contains(CharArraySet, Boolean) true if the System.Boolean is in the set Declaration public static bool Contains(this CharArraySet set, bool text) Parameters Type Name Description CharArraySet set System.Boolean text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Byte) true if the System.Byte is in the set Declaration public static bool Contains(this CharArraySet set, byte text) Parameters Type Name Description CharArraySet set System.Byte text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Char) true if the System.Char is in the set Declaration public static bool Contains(this CharArraySet set, char text) Parameters Type Name Description CharArraySet set System.Char text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Int16) true if the System.Int16 is in the set Declaration public static bool Contains(this CharArraySet set, short text) Parameters Type Name Description CharArraySet set System.Int16 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Int32) true if the System.Int32 is in the set Declaration public static bool Contains(this CharArraySet set, int text) Parameters Type Name Description CharArraySet set System.Int32 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Int64) true if the System.Int64 is in the set Declaration public static bool Contains(this CharArraySet set, long text) Parameters Type Name Description CharArraySet set System.Int64 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, SByte) true if the System.SByte is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, sbyte text) Parameters Type Name Description CharArraySet set System.SByte text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, UInt16) true if the System.UInt16 is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, ushort text) Parameters Type Name Description CharArraySet set System.UInt16 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, UInt32) true if the System.UInt32 is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, uint text) Parameters Type Name Description CharArraySet set System.UInt32 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, UInt64) true if the System.UInt64 is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, ulong text) Parameters Type Name Description CharArraySet set System.UInt64 text Returns Type Description System.Boolean | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Byte>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<byte> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Byte > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Char>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<char> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Char > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Int16>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<short> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Int16 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Int32>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<int> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Int32 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Int64>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<long> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Int64 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<SByte>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<sbyte> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.SByte > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<UInt16>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<ushort> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.UInt16 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<UInt32>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<uint> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.UInt32 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<UInt64>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<ulong> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.UInt64 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharFilterFactory.html",
    "title": "Class CharFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharFilterFactory Abstract parent class for analysis factories that create CharFilter instances. Inheritance System.Object AbstractAnalysisFactory CharFilterFactory HTMLStripCharFilterFactory MappingCharFilterFactory PersianCharFilterFactory PatternReplaceCharFilterFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharFilterFactory : AbstractAnalysisFactory Constructors | Improve this Doc View Source CharFilterFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected CharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source AvailableCharFilters returns a list of all available charfilter names Declaration public static ICollection<string> AvailableCharFilters { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(TextReader) Wraps the given System.IO.TextReader with a CharFilter . Declaration public abstract TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a charfilter by name from the host project's dependent assemblies Declaration public static CharFilterFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name System.Collections.Generic.IDictionary < System.String , System.String > args Returns Type Description CharFilterFactory | Improve this Doc View Source LookupClass(String) looks up a charfilter class by name from the host project's dependent assemblies Declaration public static Type LookupClass(string name) Parameters Type Name Description System.String name Returns Type Description System.Type | Improve this Doc View Source ReloadCharFilters() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableCharFilters ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadCharFilters()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharTokenizer.html",
    "title": "Class CharTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. A new CharTokenizer API has been introduced with Lucene 3.1. This API moved from UTF-16 code units to UTF-32 codepoints to eventually add support for supplementary characters . The old char based API has been deprecated and should be replaced with the int based methods IsTokenChar(Int32) and Normalize(Int32) . As of Lucene 3.1 each CharTokenizer - constructor expects a LuceneVersion argument. Based on the given LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a LuceneVersion >= 3.1 is used CharTokenizer requires the new API to be implemented by the instantiated class. Yet, the old char based API is not required anymore even if backwards compatibility must be preserved. CharTokenizer subclasses implementing the new API are fully backwards compatible if instantiated with LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with LuceneVersion >= 3.1 on an index build with a version < 3.1, created tokens might not be compatible with the terms in your index. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer WhitespaceTokenizer IndicTokenizer RussianLetterTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source CharTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new CharTokenizer instance Declaration public CharTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader input the input to split up into tokens | Improve this Doc View Source CharTokenizer(LuceneVersion, TextReader) Creates a new CharTokenizer instance Declaration public CharTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match System.IO.TextReader input the input to split up into tokens Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsTokenChar(Int32) Returns true iff a codepoint should be included in a token. This tokenizer generates as tokens adjacent sequences of codepoints which satisfy this predicate. Codepoints for which this is false are used to define token boundaries and are not included in tokens. Declaration protected abstract bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean | Improve this Doc View Source Normalize(Int32) Called on each token character to normalize it before it is added to the token. The default implementation does nothing. Subclasses may use this to, e.g., lowercase tokens. Declaration protected virtual int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ClasspathResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ClasspathResourceLoader.html",
    "title": "Class ClasspathResourceLoader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClasspathResourceLoader Simple IResourceLoader that uses System.Reflection.Assembly.GetManifestResourceStream(System.String) and System.Reflection.Assembly.GetType(System.String) to open resources and System.Type s, respectively. Inheritance System.Object ClasspathResourceLoader Implements IResourceLoader 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClasspathResourceLoader : IResourceLoader Constructors | Improve this Doc View Source ClasspathResourceLoader(Type) Creates an instance using the System.Assembly of the given class to load Resources and classes Resource paths must be absolute. Declaration public ClasspathResourceLoader(Type clazz) Parameters Type Name Description System.Type clazz Methods | Improve this Doc View Source FindType(String) Declaration public Type FindType(string cname) Parameters Type Name Description System.String cname Returns Type Description System.Type | Improve this Doc View Source NewInstance<T>(String) Declaration public T NewInstance<T>(string cname) Parameters Type Name Description System.String cname Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source OpenResource(String) Declaration public Stream OpenResource(string resource) Parameters Type Name Description System.String resource Returns Type Description System.IO.Stream Implements IResourceLoader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilter.html",
    "title": "Class ElisionFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ElisionFilter Removes elisions from a TokenStream . For example, \"l'avion\" (the plane) will be tokenized as \"avion\" (plane). Elision in Wikipedia Inheritance System.Object AttributeSource TokenStream TokenFilter ElisionFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ElisionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ElisionFilter(TokenStream, CharArraySet) Constructs an elision filter with a CharArraySet of stop words Declaration public ElisionFilter(TokenStream input, CharArraySet articles) Parameters Type Name Description TokenStream input the source TokenStream CharArraySet articles a set of stopword articles Methods | Improve this Doc View Source IncrementToken() Increments the TokenStream with a CharTermAttribute without elisioned start Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilterFactory.html",
    "title": "Class ElisionFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ElisionFilterFactory Factory for ElisionFilter . <fieldType name=\"text_elsn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\" articles=\"stopwordarticles.txt\" ignoreCase=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ElisionFilterFactory Implements IResourceLoaderAware IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ElisionFilterFactory : TokenFilterFactory, IResourceLoaderAware, IMultiTermAwareComponent Constructors | Improve this Doc View Source ElisionFilterFactory(IDictionary<String, String>) Creates a new ElisionFilterFactory Declaration public ElisionFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilesystemResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilesystemResourceLoader.html",
    "title": "Class FilesystemResourceLoader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilesystemResourceLoader Simple IResourceLoader that opens resource files from the local file system, optionally resolving against a base directory. This loader wraps a delegate IResourceLoader that is used to resolve all files, the current base directory does not contain. NewInstance<T>(String) is always resolved against the delegate, as an System.Assembly is needed. You can chain several FilesystemResourceLoader s to allow lookup of files in more than one base directory. Inheritance System.Object FilesystemResourceLoader Implements IResourceLoader 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FilesystemResourceLoader : IResourceLoader Constructors | Improve this Doc View Source FilesystemResourceLoader() Creates a resource loader that requires absolute filenames or relative to CWD to resolve resources. Files not found in file system and class lookups are delegated to context classloader. Declaration public FilesystemResourceLoader() | Improve this Doc View Source FilesystemResourceLoader(DirectoryInfo) Creates a resource loader that resolves resources against the given base directory (may be null to refer to CWD). Files not found in file system and class lookups are delegated to context classloader. Declaration public FilesystemResourceLoader(DirectoryInfo baseDirectory) Parameters Type Name Description System.IO.DirectoryInfo baseDirectory | Improve this Doc View Source FilesystemResourceLoader(DirectoryInfo, IResourceLoader) Creates a resource loader that resolves resources against the given base directory (may be null to refer to CWD). Files not found in file system and class lookups are delegated to the given delegate IResourceLoader . Declaration public FilesystemResourceLoader(DirectoryInfo baseDirectory, IResourceLoader delegate) Parameters Type Name Description System.IO.DirectoryInfo baseDirectory IResourceLoader delegate Methods | Improve this Doc View Source FindType(String) Declaration public Type FindType(string cname) Parameters Type Name Description System.String cname Returns Type Description System.Type | Improve this Doc View Source NewInstance<T>(String) Declaration public T NewInstance<T>(string cname) Parameters Type Name Description System.String cname Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source OpenResource(String) Declaration public Stream OpenResource(string resource) Parameters Type Name Description System.String resource Returns Type Description System.IO.Stream Implements IResourceLoader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilteringTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilteringTokenFilter.html",
    "title": "Class FilteringTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteringTokenFilter Abstract base class for TokenFilters that may remove tokens. You have to implement Accept() and return a boolean if the current token should be preserved. IncrementToken() uses this method to decide if a token should be passed to the caller. As of Lucene 4.4, an System.ArgumentException is thrown when trying to disable position increments when filtering terms. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter StopFilter TypeTokenFilter CodepointCountFilter KeepWordFilter LengthFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class FilteringTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FilteringTokenFilter(LuceneVersion, TokenStream) Create a new FilteringTokenFilter . Declaration public FilteringTokenFilter(LuceneVersion version, TokenStream in) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume | Improve this Doc View Source FilteringTokenFilter(LuceneVersion, Boolean, TokenStream) Create a new FilteringTokenFilter . Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4\")] public FilteringTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input) Parameters Type Name Description LuceneVersion version the Lucene match version System.Boolean enablePositionIncrements whether to increment position increments when filtering out terms TokenStream input the input to consume Fields | Improve this Doc View Source m_version Declaration protected readonly LuceneVersion m_version Field Value Type Description LuceneVersion Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept() Override this method and return if the current input token should be returned by IncrementToken() . Declaration protected abstract bool Accept() Returns Type Description System.Boolean | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() | Improve this Doc View Source SetEnablePositionIncrements(Boolean) If true , this TokenFilter will preserve positions of the incoming tokens (ie, accumulate and set position increments of the removed tokens). Generally, true is best as it does not lose information (positions of the original tokens) during indexing. When set, when a token is stopped (omitted), the position increment of the following token is incremented. Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4\")] public virtual void SetEnablePositionIncrements(bool enable) Parameters Type Name Description System.Boolean enable Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Util <!-- 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. --> Utility functions for text analysis. Classes AbstractAnalysisFactory Abstract parent class for analysis factories TokenizerFactory , TokenFilterFactory and CharFilterFactory . The typical lifecycle for a factory consumer is: Create factory via its constructor (or via XXXFactory.ForName) (Optional) If the factory uses resources such as files, Inform(IResourceLoader) is called to initialize those resources. Consumer calls create() to obtain instances. BufferedCharFilter LUCENENET specific class to mimic Java's BufferedReader (that is, a reader that is seekable) so it supports Mark() and Reset() (which are part of the Java Reader class), but also provide the Correct() method of BaseCharFilter. CharacterUtils CharacterUtils provides a unified interface to Character-related operations to implement backwards compatible character operations based on a LuceneVersion instance. This is a Lucene.NET INTERNAL API, use at your own risk CharacterUtils.CharacterBuffer A simple IO buffer to use with Fill(CharacterUtils.CharacterBuffer, TextReader) . CharArrayMap CharArrayMap<TValue> A simple class that stores key System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the map, nor does it resize its hash table to be smaller, etc. It is designed to be quick to retrieve items by char[] keys without the necessity of converting to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArrayMap : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArrayMap with the behavior before Lucene 3.1 pass a LuceneVersion < 3.1 to the constructors. CharArrayMap<TValue>.EntryIterator public iterator class so efficient methods are exposed to users CharArrayMap<TValue>.EntrySet_ public EntrySet_ class so efficient methods are exposed to users NOTE: In .NET this was renamed to EntrySet_ because it conflicted with the method EntrySet(). Since there is also an extension method named IDictionary{K,V}.EntrySet() that this class needs to override, changing the name of the method was not possible because the extension method would produce incorrect results if it were inadvertently called, leading to hard-to-diagnose bugs. Another difference between this set and the Java counterpart is that it implements System.Collections.Generic.ICollection<T> rather than System.Collections.Generic.ISet<T> so we don't have to implement a bunch of methods that we aren't really interested in. The Keys and Values properties both return System.Collections.Generic.ICollection<T> , and while there is no EntrySet() method or property in .NET, if there were it would certainly return System.Collections.Generic.ICollection<T> . CharArrayMapExtensions LUCENENET specific extension methods for CharArrayMap CharArraySet A simple class that stores System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the set, nor does it resize its hash table to be smaller, etc. It is designed to be quick to test if a char[] is in the set without the necessity of converting it to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArraySet : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArraySet with the behavior before Lucene 3.1 pass a LuceneVersion to the constructors. Please note: This class implements System.Collections.Generic.ISet<T> but does not behave like it should in all cases. The generic type is System.String , because you can add any object to it, that has a string representation (which is converted to a string). The add methods will use System.Object.ToString() and store the result using a char[] buffer. The same behavior have the Contains(String) methods. The GetEnumerator() returns an IEnumerator{char[]} CharArraySetExtensions LUCENENET specific extension methods for CharArraySet CharFilterFactory Abstract parent class for analysis factories that create CharFilter instances. CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. A new CharTokenizer API has been introduced with Lucene 3.1. This API moved from UTF-16 code units to UTF-32 codepoints to eventually add support for supplementary characters . The old char based API has been deprecated and should be replaced with the int based methods IsTokenChar(Int32) and Normalize(Int32) . As of Lucene 3.1 each CharTokenizer - constructor expects a LuceneVersion argument. Based on the given LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a LuceneVersion >= 3.1 is used CharTokenizer requires the new API to be implemented by the instantiated class. Yet, the old char based API is not required anymore even if backwards compatibility must be preserved. CharTokenizer subclasses implementing the new API are fully backwards compatible if instantiated with LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with LuceneVersion >= 3.1 on an index build with a version < 3.1, created tokens might not be compatible with the terms in your index. ClasspathResourceLoader Simple IResourceLoader that uses System.Reflection.Assembly.GetManifestResourceStream(System.String) and System.Reflection.Assembly.GetType(System.String) to open resources and System.Type s, respectively. ElisionFilter Removes elisions from a TokenStream . For example, \"l'avion\" (the plane) will be tokenized as \"avion\" (plane). Elision in Wikipedia ElisionFilterFactory Factory for ElisionFilter . <fieldType name=\"text_elsn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\" articles=\"stopwordarticles.txt\" ignoreCase=\"true\"/> </analyzer> </fieldType> FilesystemResourceLoader Simple IResourceLoader that opens resource files from the local file system, optionally resolving against a base directory. This loader wraps a delegate IResourceLoader that is used to resolve all files, the current base directory does not contain. NewInstance<T>(String) is always resolved against the delegate, as an System.Assembly is needed. You can chain several FilesystemResourceLoader s to allow lookup of files in more than one base directory. FilteringTokenFilter Abstract base class for TokenFilters that may remove tokens. You have to implement Accept() and return a boolean if the current token should be preserved. IncrementToken() uses this method to decide if a token should be passed to the caller. As of Lucene 4.4, an System.ArgumentException is thrown when trying to disable position increments when filtering terms. OpenStringBuilder A StringBuilder that allows one to access the array. RollingCharBuffer Acts like a forever growing char[] as you read characters into it from the provided reader, but internally it uses a circular buffer to only hold the characters that haven't been freed yet. This is like a PushbackReader, except you don't have to specify up-front the max size of the buffer, but you do have to periodically call FreeBefore(Int32) . StemmerUtil Some commonly-used stemming functions This is a Lucene.NET INTERNAL API, use at your own risk StopwordAnalyzerBase Base class for Analyzer s that need to make use of stopword sets. TokenFilterFactory Abstract parent class for analysis factories that create TokenFilter instances. TokenizerFactory Abstract parent class for analysis factories that create Tokenizer instances. WordlistLoader Loader for text files that represent a list of stopwords. IOUtils to obtain System.IO.TextReader instances. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IMultiTermAwareComponent Add to any analysis factory component to allow returning an analysis component factory for use with partial terms in prefix queries, wildcard queries, range query endpoints, regex queries, etc. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IResourceLoader Abstraction for loading resources (streams, files, and classes). IResourceLoaderAware Interface for a component that needs to be initialized by an implementation of IResourceLoader ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html",
    "title": "Interface IMultiTermAwareComponent | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IMultiTermAwareComponent Add to any analysis factory component to allow returning an analysis component factory for use with partial terms in prefix queries, wildcard queries, range query endpoints, regex queries, etc. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IMultiTermAwareComponent Methods | Improve this Doc View Source GetMultiTermComponent() Returns an analysis component to handle analysis if multi-term queries. The returned component must be a TokenizerFactory , TokenFilterFactory or CharFilterFactory . Declaration AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoader.html",
    "title": "Interface IResourceLoader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IResourceLoader Abstraction for loading resources (streams, files, and classes). Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IResourceLoader Methods | Improve this Doc View Source FindType(String) Finds class of the name NOTE: This was findClass() in Lucene Declaration Type FindType(string cname) Parameters Type Name Description System.String cname Returns Type Description System.Type | Improve this Doc View Source NewInstance<T>(String) Creates an instance of the name and expected type Declaration T NewInstance<T>(string cname) Parameters Type Name Description System.String cname Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source OpenResource(String) Opens a named resource Declaration Stream OpenResource(string resource) Parameters Type Name Description System.String resource Returns Type Description System.IO.Stream"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoaderAware.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoaderAware.html",
    "title": "Interface IResourceLoaderAware | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IResourceLoaderAware Interface for a component that needs to be initialized by an implementation of IResourceLoader . Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IResourceLoaderAware Methods | Improve this Doc View Source Inform(IResourceLoader) Initializes this component with the provided IResourceLoader (used for loading types, embedded resources, files, etc). Declaration void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader See Also IResourceLoader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.OpenStringBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.OpenStringBuilder.html",
    "title": "Class OpenStringBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenStringBuilder A StringBuilder that allows one to access the array. Inheritance System.Object OpenStringBuilder Implements J2N.Text.IAppendable J2N.Text.ICharSequence 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) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class OpenStringBuilder : IAppendable, ICharSequence Constructors | Improve this Doc View Source OpenStringBuilder() Declaration public OpenStringBuilder() | Improve this Doc View Source OpenStringBuilder(Char[], Int32) Declaration public OpenStringBuilder(char[] arr, int len) Parameters Type Name Description System.Char [] arr System.Int32 len | Improve this Doc View Source OpenStringBuilder(Int32) Declaration public OpenStringBuilder(int size) Parameters Type Name Description System.Int32 size Fields | Improve this Doc View Source m_buf Declaration protected char[] m_buf Field Value Type Description System.Char [] | Improve this Doc View Source m_len Declaration protected int m_len Field Value Type Description System.Int32 Properties | Improve this Doc View Source Array Declaration public virtual char[] Array { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Capacity Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] Declaration public virtual char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public virtual int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharSequence) Declaration public virtual OpenStringBuilder Append(ICharSequence csq) Parameters Type Name Description J2N.Text.ICharSequence csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Declaration public virtual OpenStringBuilder Append(ICharSequence csq, int startIndex, int count) Parameters Type Name Description J2N.Text.ICharSequence csq System.Int32 startIndex System.Int32 count Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(Char) Declaration public virtual OpenStringBuilder Append(char c) Parameters Type Name Description System.Char c Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(Char[]) Declaration public virtual OpenStringBuilder Append(char[] value) Parameters Type Name Description System.Char [] value Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(Char[], Int32, Int32) Declaration public virtual OpenStringBuilder Append(char[] value, int startIndex, int count) Parameters Type Name Description System.Char [] value System.Int32 startIndex System.Int32 count Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(String) Declaration public virtual OpenStringBuilder Append(string csq) Parameters Type Name Description System.String csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(String, Int32, Int32) Declaration public virtual OpenStringBuilder Append(string csq, int startIndex, int count) Parameters Type Name Description System.String csq System.Int32 startIndex System.Int32 count Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(StringBuilder) Declaration public virtual OpenStringBuilder Append(StringBuilder csq) Parameters Type Name Description System.Text.StringBuilder csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Declaration public virtual OpenStringBuilder Append(StringBuilder csq, int startIndex, int count) Parameters Type Name Description System.Text.StringBuilder csq System.Int32 startIndex System.Int32 count Returns Type Description OpenStringBuilder | Improve this Doc View Source EnsureCapacity(Int32) Declaration public virtual void EnsureCapacity(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Reset() Declaration public void Reset() | Improve this Doc View Source Resize(Int32) Declaration protected virtual void Resize(int len) Parameters Type Name Description System.Int32 len | Improve this Doc View Source Set(Char[], Int32) Declaration public virtual void Set(char[] arr, int end) Parameters Type Name Description System.Char [] arr System.Int32 end | Improve this Doc View Source Subsequence(Int32, Int32) Declaration public virtual ICharSequence Subsequence(int startIndex, int length) Parameters Type Name Description System.Int32 startIndex System.Int32 length Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source ToCharArray() Declaration public virtual char[] ToCharArray() Returns Type Description System.Char [] | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UnsafeWrite(Char) Declaration public virtual void UnsafeWrite(char b) Parameters Type Name Description System.Char b | Improve this Doc View Source UnsafeWrite(Char[], Int32, Int32) Declaration public virtual void UnsafeWrite(char[] b, int off, int len) Parameters Type Name Description System.Char [] b System.Int32 off System.Int32 len | Improve this Doc View Source UnsafeWrite(Int32) Declaration public virtual void UnsafeWrite(int b) Parameters Type Name Description System.Int32 b | Improve this Doc View Source UnsafeWrite(StringBuilder, Int32, Int32) Declaration public virtual void UnsafeWrite(StringBuilder b, int off, int len) Parameters Type Name Description System.Text.StringBuilder b System.Int32 off System.Int32 len | Improve this Doc View Source Write(OpenStringBuilder) Declaration public void Write(OpenStringBuilder arr) Parameters Type Name Description OpenStringBuilder arr | Improve this Doc View Source Write(Char) Declaration public virtual void Write(char b) Parameters Type Name Description System.Char b | Improve this Doc View Source Write(Char[]) Declaration public void Write(char[] b) Parameters Type Name Description System.Char [] b | Improve this Doc View Source Write(Char[], Int32, Int32) Declaration public virtual void Write(char[] b, int off, int len) Parameters Type Name Description System.Char [] b System.Int32 off System.Int32 len | Improve this Doc View Source Write(Int32) Declaration public virtual void Write(int b) Parameters Type Name Description System.Int32 b | Improve this Doc View Source Write(String) Declaration public virtual void Write(string s) Parameters Type Name Description System.String s | Improve this Doc View Source Write(StringBuilder) Declaration public void Write(StringBuilder arr) Parameters Type Name Description System.Text.StringBuilder arr Explicit Interface Implementations | Improve this Doc View Source IAppendable.Append(ICharSequence) Declaration IAppendable IAppendable.Append(ICharSequence value) Parameters Type Name Description J2N.Text.ICharSequence value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(ICharSequence, Int32, Int32) Declaration IAppendable IAppendable.Append(ICharSequence value, int startIndex, int count) Parameters Type Name Description J2N.Text.ICharSequence value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(Char) Declaration IAppendable IAppendable.Append(char value) Parameters Type Name Description System.Char value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(Char[]) Declaration IAppendable IAppendable.Append(char[] value) Parameters Type Name Description System.Char [] value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(Char[], Int32, Int32) Declaration IAppendable IAppendable.Append(char[] value, int startIndex, int count) Parameters Type Name Description System.Char [] value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(String) Declaration IAppendable IAppendable.Append(string value) Parameters Type Name Description System.String value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(String, Int32, Int32) Declaration IAppendable IAppendable.Append(string value, int startIndex, int count) Parameters Type Name Description System.String value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(StringBuilder) Declaration IAppendable IAppendable.Append(StringBuilder value) Parameters Type Name Description System.Text.StringBuilder value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(StringBuilder, Int32, Int32) Declaration IAppendable IAppendable.Append(StringBuilder value, int startIndex, int count) Parameters Type Name Description System.Text.StringBuilder value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source ICharSequence.HasValue Declaration bool ICharSequence.HasValue { get; } Returns Type Description System.Boolean Implements J2N.Text.IAppendable J2N.Text.ICharSequence"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.RollingCharBuffer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.RollingCharBuffer.html",
    "title": "Class RollingCharBuffer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RollingCharBuffer Acts like a forever growing char[] as you read characters into it from the provided reader, but internally it uses a circular buffer to only hold the characters that haven't been freed yet. This is like a PushbackReader, except you don't have to specify up-front the max size of the buffer, but you do have to periodically call FreeBefore(Int32) . Inheritance System.Object RollingCharBuffer 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RollingCharBuffer Methods | Improve this Doc View Source FreeBefore(Int32) Call this to notify us that no chars before this absolute position are needed anymore. Declaration public void FreeBefore(int pos) Parameters Type Name Description System.Int32 pos | Improve this Doc View Source Get(Int32) Absolute position read. NOTE: pos must not jump ahead by more than 1! Ie, it's OK to read arbitarily far back (just not prior to the last FreeBefore(Int32) , but NOT ok to read arbitrarily far ahead. Returns -1 if you hit EOF. Declaration public int Get(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source Get(Int32, Int32) Declaration public char[] Get(int posStart, int length) Parameters Type Name Description System.Int32 posStart System.Int32 length Returns Type Description System.Char [] | Improve this Doc View Source Reset(TextReader) Clear array and switch to new reader. Declaration public void Reset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StemmerUtil.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StemmerUtil.html",
    "title": "Class StemmerUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StemmerUtil Some commonly-used stemming functions This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StemmerUtil 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StemmerUtil Methods | Improve this Doc View Source Delete(Char[], Int32, Int32) Delete a character in-place Declaration public static int Delete(char[] s, int pos, int len) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 pos Position of character to delete System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after deletion | Improve this Doc View Source DeleteN(Char[], Int32, Int32, Int32) Delete n characters in-place Declaration public static int DeleteN(char[] s, int pos, int len, int nChars) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 pos Position of character to delete System.Int32 len Length of input buffer System.Int32 nChars number of characters to delete Returns Type Description System.Int32 length of input buffer after deletion | Improve this Doc View Source EndsWith(Char[], Int32, Char[]) Returns true if the character array ends with the suffix. Declaration public static bool EndsWith(char[] s, int len, char[] suffix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.Char [] suffix Suffix string to test Returns Type Description System.Boolean true if s ends with suffix | Improve this Doc View Source EndsWith(Char[], Int32, String) Returns true if the character array ends with the suffix. Declaration public static bool EndsWith(char[] s, int len, string suffix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.String suffix Suffix string to test Returns Type Description System.Boolean true if s ends with suffix | Improve this Doc View Source StartsWith(Char[], Int32, String) Returns true if the character array starts with the prefix. Declaration public static bool StartsWith(char[] s, int len, string prefix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.String prefix Prefix string to test Returns Type Description System.Boolean true if s starts with prefix"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html",
    "title": "Class StopwordAnalyzerBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StopwordAnalyzerBase Base class for Analyzer s that need to make use of stopword sets. Inheritance System.Object Analyzer StopwordAnalyzerBase ArabicAnalyzer BulgarianAnalyzer BrazilianAnalyzer CatalanAnalyzer CJKAnalyzer SoraniAnalyzer StopAnalyzer CzechAnalyzer DanishAnalyzer GermanAnalyzer GreekAnalyzer EnglishAnalyzer SpanishAnalyzer BasqueAnalyzer PersianAnalyzer FinnishAnalyzer FrenchAnalyzer IrishAnalyzer GalicianAnalyzer HindiAnalyzer HungarianAnalyzer ArmenianAnalyzer IndonesianAnalyzer ItalianAnalyzer LatvianAnalyzer NorwegianAnalyzer PortugueseAnalyzer RomanianAnalyzer RussianAnalyzer ClassicAnalyzer StandardAnalyzer UAX29URLEmailAnalyzer SwedishAnalyzer TurkishAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.CreateComponents(String, TextReader) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class StopwordAnalyzerBase : Analyzer, IDisposable Constructors | Improve this Doc View Source StopwordAnalyzerBase(LuceneVersion) Creates a new Analyzer with an empty stopword set Declaration protected StopwordAnalyzerBase(LuceneVersion version) Parameters Type Name Description LuceneVersion version the Lucene version for cross version compatibility | Improve this Doc View Source StopwordAnalyzerBase(LuceneVersion, CharArraySet) Creates a new instance initialized with the given stopword set Declaration protected StopwordAnalyzerBase(LuceneVersion version, CharArraySet stopwords) Parameters Type Name Description LuceneVersion version the Lucene version for cross version compatibility CharArraySet stopwords the analyzer's stopword set Fields | Improve this Doc View Source m_matchVersion Declaration protected readonly LuceneVersion m_matchVersion Field Value Type Description LuceneVersion | Improve this Doc View Source m_stopwords An immutable stopword set Declaration protected readonly CharArraySet m_stopwords Field Value Type Description CharArraySet Properties | Improve this Doc View Source StopwordSet Returns the analyzer's stopword set or an empty set if the analyzer has no stopwords Declaration public virtual CharArraySet StopwordSet { get; } Property Value Type Description CharArraySet the analyzer's stopword set or an empty set if the analyzer has no stopwords Methods | Improve this Doc View Source LoadStopwordSet(Boolean, Type, String, String) Creates a CharArraySet from an embedded resource associated with a class. (See System.Reflection.Assembly.GetManifestResourceStream(System.String) ). Declaration protected static CharArraySet LoadStopwordSet(bool ignoreCase, Type aClass, string resource, string comment) Parameters Type Name Description System.Boolean ignoreCase true if the set should ignore the case of the stopwords, otherwise false System.Type aClass a class that is associated with the given stopwordResource System.String resource name of the resource file associated with the given class System.String comment comment string to ignore in the stopword file Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given file Exceptions Type Condition System.IO.IOException if loading the stopwords throws an System.IO.IOException | Improve this Doc View Source LoadStopwordSet(FileInfo, LuceneVersion) Creates a CharArraySet from a file. Declaration protected static CharArraySet LoadStopwordSet(FileInfo stopwords, LuceneVersion matchVersion) Parameters Type Name Description System.IO.FileInfo stopwords the stopwords file to load LuceneVersion matchVersion the Lucene version for cross version compatibility Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given file Exceptions Type Condition System.IO.IOException if loading the stopwords throws an System.IO.IOException | Improve this Doc View Source LoadStopwordSet(TextReader, LuceneVersion) Creates a CharArraySet from a file. Declaration protected static CharArraySet LoadStopwordSet(TextReader stopwords, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader stopwords the stopwords reader to load LuceneVersion matchVersion the Lucene version for cross version compatibility Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given reader Exceptions Type Condition System.IO.IOException if loading the stopwords throws an System.IO.IOException Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenFilterFactory.html",
    "title": "Class TokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenFilterFactory Abstract parent class for analysis factories that create TokenFilter instances. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ArabicNormalizationFilterFactory ArabicStemFilterFactory BulgarianStemFilterFactory BrazilianStemFilterFactory CJKBigramFilterFactory CJKWidthFilterFactory SoraniNormalizationFilterFactory SoraniStemFilterFactory ChineseFilterFactory CommonGramsFilterFactory DictionaryCompoundWordTokenFilterFactory HyphenationCompoundWordTokenFilterFactory LowerCaseFilterFactory StopFilterFactory TypeTokenFilterFactory UpperCaseFilterFactory CzechStemFilterFactory GermanLightStemFilterFactory GermanMinimalStemFilterFactory GermanNormalizationFilterFactory GermanStemFilterFactory GreekLowerCaseFilterFactory GreekStemFilterFactory EnglishMinimalStemFilterFactory EnglishPossessiveFilterFactory KStemFilterFactory PorterStemFilterFactory SpanishLightStemFilterFactory PersianNormalizationFilterFactory FinnishLightStemFilterFactory FrenchLightStemFilterFactory FrenchMinimalStemFilterFactory IrishLowerCaseFilterFactory GalicianMinimalStemFilterFactory GalicianStemFilterFactory HindiNormalizationFilterFactory HindiStemFilterFactory HungarianLightStemFilterFactory HunspellStemFilterFactory IndonesianStemFilterFactory IndicNormalizationFilterFactory ItalianLightStemFilterFactory LatvianStemFilterFactory ASCIIFoldingFilterFactory CapitalizationFilterFactory CodepointCountFilterFactory HyphenatedWordsFilterFactory KeepWordFilterFactory KeywordMarkerFilterFactory KeywordRepeatFilterFactory LengthFilterFactory LimitTokenCountFilterFactory LimitTokenPositionFilterFactory RemoveDuplicatesTokenFilterFactory ScandinavianFoldingFilterFactory ScandinavianNormalizationFilterFactory StemmerOverrideFilterFactory TrimFilterFactory TruncateTokenFilterFactory WordDelimiterFilterFactory EdgeNGramFilterFactory NGramFilterFactory NorwegianLightStemFilterFactory NorwegianMinimalStemFilterFactory PatternCaptureGroupFilterFactory PatternReplaceFilterFactory DelimitedPayloadTokenFilterFactory NumericPayloadTokenFilterFactory TokenOffsetPayloadTokenFilterFactory TypeAsPayloadTokenFilterFactory PositionFilterFactory PortugueseLightStemFilterFactory PortugueseMinimalStemFilterFactory PortugueseStemFilterFactory ReverseStringFilterFactory RussianLightStemFilterFactory ShingleFilterFactory SnowballPorterFilterFactory ClassicFilterFactory StandardFilterFactory SwedishLightStemFilterFactory SynonymFilterFactory ApostropheFilterFactory TurkishLowerCaseFilterFactory ElisionFilterFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class TokenFilterFactory : AbstractAnalysisFactory Constructors | Improve this Doc View Source TokenFilterFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected TokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source AvailableTokenFilters returns a list of all available tokenfilter names from the host project's referenced assemblies Declaration public static ICollection<string> AvailableTokenFilters { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(TokenStream) Transform the specified input TokenStream Declaration public abstract TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a tokenfilter by name from the host project's referenced assemblies Declaration public static TokenFilterFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name System.Collections.Generic.IDictionary < System.String , System.String > args Returns Type Description TokenFilterFactory | Improve this Doc View Source LookupClass(String) looks up a tokenfilter class by name from the host project's referenced assemblies Declaration public static Type LookupClass(string name) Parameters Type Name Description System.String name Returns Type Description System.Type | Improve this Doc View Source ReloadTokenFilters() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableTokenFilters ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadTokenFilters()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenizerFactory.html",
    "title": "Class TokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenizerFactory Abstract parent class for analysis factories that create Tokenizer instances. Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ArabicLetterTokenizerFactory CJKTokenizerFactory ChineseTokenizerFactory KeywordTokenizerFactory LetterTokenizerFactory LowerCaseTokenizerFactory WhitespaceTokenizerFactory EdgeNGramTokenizerFactory NGramTokenizerFactory PathHierarchyTokenizerFactory PatternTokenizerFactory RussianLetterTokenizerFactory ClassicTokenizerFactory StandardTokenizerFactory UAX29URLEmailTokenizerFactory WikipediaTokenizerFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class TokenizerFactory : AbstractAnalysisFactory Constructors | Improve this Doc View Source TokenizerFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected TokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source AvailableTokenizers returns a list of all available tokenizer names from the host project's referenced assemblies Declaration public static ICollection<string> AvailableTokenizers { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Creates a TokenStream of the specified input using the given AttributeSource.AttributeFactory Declaration public abstract Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer | Improve this Doc View Source Create(TextReader) Creates a TokenStream of the specified input using the default attribute factory. Declaration public Tokenizer Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description Tokenizer | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a tokenizer by name from the host project's referenced assemblies Declaration public static TokenizerFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name System.Collections.Generic.IDictionary < System.String , System.String > args Returns Type Description TokenizerFactory | Improve this Doc View Source LookupClass(String) looks up a tokenizer class by name from the host project's referenced assemblies Declaration public static Type LookupClass(string name) Parameters Type Name Description System.String name Returns Type Description System.Type | Improve this Doc View Source ReloadTokenizers() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableTokenizers ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadTokenizers()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.WordlistLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.WordlistLoader.html",
    "title": "Class WordlistLoader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WordlistLoader Loader for text files that represent a list of stopwords. IOUtils to obtain System.IO.TextReader instances. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object WordlistLoader 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.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordlistLoader Methods | Improve this Doc View Source GetLines(Stream, Encoding) Accesses a resource by name and returns the (non comment) lines containing data using the given character encoding. A comment line is any line that starts with the character \"#\" Declaration public static IList<string> GetLines(Stream stream, Encoding encoding) Parameters Type Name Description System.IO.Stream stream System.Text.Encoding encoding Returns Type Description System.Collections.Generic.IList < System.String > a list of non-blank non-comment lines with whitespace trimmed Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetSnowballWordSet(TextReader, CharArraySet) Reads stopwords from a stopword list in Snowball format. The snowball format is the following: Lines may contain multiple words separated by whitespace. The comment character is the vertical line (|). Lines may contain trailing comments. Declaration public static CharArraySet GetSnowballWordSet(TextReader reader, CharArraySet result) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing a Snowball stopword list CharArraySet result the CharArraySet to fill with the readers words Returns Type Description CharArraySet the given CharArraySet with the reader's words | Improve this Doc View Source GetSnowballWordSet(TextReader, LuceneVersion) Reads stopwords from a stopword list in Snowball format. The snowball format is the following: Lines may contain multiple words separated by whitespace. The comment character is the vertical line (|). Lines may contain trailing comments. Declaration public static CharArraySet GetSnowballWordSet(TextReader reader, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing a Snowball stopword list LuceneVersion matchVersion the Lucene LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words | Improve this Doc View Source GetStemDict(TextReader, CharArrayMap<String>) Reads a stem dictionary. Each line contains: word \\t stem (i.e. two tab separated words) Declaration public static CharArrayMap<string> GetStemDict(TextReader reader, CharArrayMap<string> result) Parameters Type Name Description System.IO.TextReader reader CharArrayMap < System.String > result Returns Type Description CharArrayMap < System.String > stem dictionary that overrules the stemming algorithm Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetWordSet(TextReader, CharArraySet) Reads lines from a System.IO.TextReader and adds every line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, CharArraySet result) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist CharArraySet result the CharArraySet to fill with the readers words Returns Type Description CharArraySet the given CharArraySet with the reader's words | Improve this Doc View Source GetWordSet(TextReader, LuceneVersion) Reads lines from a System.IO.TextReader and adds every line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist LuceneVersion matchVersion the LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words | Improve this Doc View Source GetWordSet(TextReader, String, CharArraySet) Reads lines from a System.IO.TextReader and adds every non-comment line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, string comment, CharArraySet result) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist System.String comment The string representing a comment. CharArraySet result the CharArraySet to fill with the readers words Returns Type Description CharArraySet the given CharArraySet with the reader's words | Improve this Doc View Source GetWordSet(TextReader, String, LuceneVersion) Reads lines from a System.IO.TextReader and adds every non-comment line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, string comment, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist System.String comment The string representing a comment. LuceneVersion matchVersion the LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.html",
    "title": "Namespace Lucene.Net.Analysis.Wikipedia | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Wikipedia <!-- 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. --> Tokenizer that is aware of Wikipedia syntax. Classes WikipediaTokenizer Extension of StandardTokenizer that is aware of Wikipedia syntax. It is based off of the Wikipedia tutorial available at http://en.wikipedia.org/wiki/Wikipedia:Tutorial , but it may not be complete. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WikipediaTokenizerFactory Factory for WikipediaTokenizer . <fieldType name=\"text_wiki\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WikipediaTokenizerFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html",
    "title": "Class WikipediaTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WikipediaTokenizer Extension of StandardTokenizer that is aware of Wikipedia syntax. It is based off of the Wikipedia tutorial available at http://en.wikipedia.org/wiki/Wikipedia:Tutorial , but it may not be complete. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer WikipediaTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Wikipedia Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WikipediaTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source WikipediaTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, ICollection<String>) Creates a new instance of the WikipediaTokenizer . Attaches the input to a the newly created JFlex scanner. Uses the given AttributeSource.AttributeFactory . Declaration public WikipediaTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int tokenOutput, ICollection<string> untokenizedTypes) Parameters Type Name Description AttributeSource.AttributeFactory factory The AttributeSource.AttributeFactory System.IO.TextReader input The input System.Int32 tokenOutput One of TOKENS_ONLY , UNTOKENIZED_ONLY , BOTH System.Collections.Generic.ICollection < System.String > untokenizedTypes Untokenized types | Improve this Doc View Source WikipediaTokenizer(TextReader) Creates a new instance of the WikipediaTokenizer . Attaches the input to a newly created JFlex scanner. Declaration public WikipediaTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input The Input System.IO.TextReader | Improve this Doc View Source WikipediaTokenizer(TextReader, Int32, ICollection<String>) Creates a new instance of the WikipediaTokenizer . Attaches the input to a the newly created JFlex scanner. Declaration public WikipediaTokenizer(TextReader input, int tokenOutput, ICollection<string> untokenizedTypes) Parameters Type Name Description System.IO.TextReader input The input System.Int32 tokenOutput One of TOKENS_ONLY , UNTOKENIZED_ONLY , BOTH System.Collections.Generic.ICollection < System.String > untokenizedTypes Untokenized types Fields | Improve this Doc View Source ACRONYM_ID Declaration public const int ACRONYM_ID = 2 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM_ID Declaration public const int ALPHANUM_ID = 0 Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE_ID Declaration public const int APOSTROPHE_ID = 1 Field Value Type Description System.Int32 | Improve this Doc View Source BOLD Declaration public const string BOLD = \"b\" Field Value Type Description System.String | Improve this Doc View Source BOLD_ID Declaration public const int BOLD_ID = 12 Field Value Type Description System.Int32 | Improve this Doc View Source BOLD_ITALICS Declaration public const string BOLD_ITALICS = \"bi\" Field Value Type Description System.String | Improve this Doc View Source BOLD_ITALICS_ID Declaration public const int BOLD_ITALICS_ID = 14 Field Value Type Description System.Int32 | Improve this Doc View Source BOTH Output the both the untokenized token and the splits Declaration public const int BOTH = 2 Field Value Type Description System.Int32 | Improve this Doc View Source CATEGORY Declaration public const string CATEGORY = \"c\" Field Value Type Description System.String | Improve this Doc View Source CATEGORY_ID Declaration public const int CATEGORY_ID = 11 Field Value Type Description System.Int32 | Improve this Doc View Source CITATION Declaration public const string CITATION = \"ci\" Field Value Type Description System.String | Improve this Doc View Source CITATION_ID Declaration public const int CITATION_ID = 10 Field Value Type Description System.Int32 | Improve this Doc View Source CJ_ID Declaration public const int CJ_ID = 7 Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY_ID Declaration public const int COMPANY_ID = 3 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL_ID Declaration public const int EMAIL_ID = 4 Field Value Type Description System.Int32 | Improve this Doc View Source EXTERNAL_LINK Declaration public const string EXTERNAL_LINK = \"el\" Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_LINK_ID Declaration public const int EXTERNAL_LINK_ID = 9 Field Value Type Description System.Int32 | Improve this Doc View Source EXTERNAL_LINK_URL Declaration public const string EXTERNAL_LINK_URL = \"elu\" Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_LINK_URL_ID Declaration public const int EXTERNAL_LINK_URL_ID = 17 Field Value Type Description System.Int32 | Improve this Doc View Source HEADING Declaration public const string HEADING = \"h\" Field Value Type Description System.String | Improve this Doc View Source HEADING_ID Declaration public const int HEADING_ID = 15 Field Value Type Description System.Int32 | Improve this Doc View Source HOST_ID Declaration public const int HOST_ID = 5 Field Value Type Description System.Int32 | Improve this Doc View Source INTERNAL_LINK Declaration public const string INTERNAL_LINK = \"il\" Field Value Type Description System.String | Improve this Doc View Source INTERNAL_LINK_ID Declaration public const int INTERNAL_LINK_ID = 8 Field Value Type Description System.Int32 | Improve this Doc View Source ITALICS Declaration public const string ITALICS = \"i\" Field Value Type Description System.String | Improve this Doc View Source ITALICS_ID Declaration public const int ITALICS_ID = 13 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_ID Declaration public const int NUM_ID = 6 Field Value Type Description System.Int32 | Improve this Doc View Source SUB_HEADING Declaration public const string SUB_HEADING = \"sh\" Field Value Type Description System.String | Improve this Doc View Source SUB_HEADING_ID Declaration public const int SUB_HEADING_ID = 16 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] | Improve this Doc View Source TOKENS_ONLY Only output tokens Declaration public const int TOKENS_ONLY = 0 Field Value Type Description System.Int32 | Improve this Doc View Source UNTOKENIZED_ONLY Only output untokenized tokens, which are tokens that would normally be split into several tokens Declaration public const int UNTOKENIZED_ONLY = 1 Field Value Type Description System.Int32 | Improve this Doc View Source UNTOKENIZED_TOKEN_FLAG This flag is used to indicate that the produced \"Token\" would, if TOKENS_ONLY was used, produce multiple tokens. Declaration public const int UNTOKENIZED_TOKEN_FLAG = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html",
    "title": "Class WikipediaTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WikipediaTokenizerFactory Factory for WikipediaTokenizer . <fieldType name=\"text_wiki\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WikipediaTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory WikipediaTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Wikipedia Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WikipediaTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source WikipediaTokenizerFactory(IDictionary<String, String>) Creates a new WikipediaTokenizerFactory Declaration public WikipediaTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Among.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Among.html",
    "title": "Class Among | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Among This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS Inheritance System.Object Among 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.Tartarus.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Among Constructors | Improve this Doc View Source Among(String, Int32, Int32, String, SnowballProgram) Declaration public Among(string s, int substring_i, int result, string methodname, SnowballProgram methodobject) Parameters Type Name Description System.String s System.Int32 substring_i System.Int32 result System.String methodname SnowballProgram methodobject Properties | Improve this Doc View Source Length search string Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Method method to use if substring matches Declaration public MethodInfo Method { get; } Property Value Type Description System.Reflection.MethodInfo | Improve this Doc View Source MethodObject object to invoke method on Declaration public SnowballProgram MethodObject { get; } Property Value Type Description SnowballProgram | Improve this Doc View Source Result result of the lookup Declaration public int Result { get; } Property Value Type Description System.Int32 | Improve this Doc View Source S search string Declaration public char[] S { get; } Property Value Type Description System.Char [] | Improve this Doc View Source SubstringIndex index to longest matching substring Declaration public int SubstringIndex { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html",
    "title": "Class ArmenianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArmenianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram ArmenianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArmenianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html",
    "title": "Class BasqueStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasqueStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram BasqueStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BasqueStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html",
    "title": "Class CatalanStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CatalanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram CatalanStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CatalanStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html",
    "title": "Class DanishStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram DanishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DanishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DutchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram DutchStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DutchStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html",
    "title": "Class EnglishStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram EnglishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html",
    "title": "Class FinnishStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FinnishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram FinnishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FinnishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FrenchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram FrenchStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html",
    "title": "Class German2Stemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class German2Stemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram German2Stemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class German2Stemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GermanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram GermanStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball.Ext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Tartarus.Snowball.Ext <!-- 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. --> Autogenerated snowball stemmer implementations. Classes ArmenianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. BasqueStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. CatalanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. DanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. DutchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. EnglishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. FinnishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. FrenchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. German2Stemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. GermanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. HungarianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. IrishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. ItalianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. KpStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. LovinsStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. NorwegianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. PorterStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. PortugueseStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. RomanianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. RussianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. SpanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. SwedishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. TurkishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html",
    "title": "Class HungarianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HungarianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram HungarianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HungarianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html",
    "title": "Class IrishStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IrishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram IrishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IrishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html",
    "title": "Class ItalianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ItalianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram ItalianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ItalianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html",
    "title": "Class KpStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KpStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram KpStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KpStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html",
    "title": "Class LovinsStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LovinsStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram LovinsStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LovinsStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html",
    "title": "Class NorwegianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NorwegianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram NorwegianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html",
    "title": "Class PorterStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PorterStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram PorterStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PorterStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PortugueseStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram PortugueseStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html",
    "title": "Class RomanianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RomanianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram RomanianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RomanianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html",
    "title": "Class RussianStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RussianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram RussianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html",
    "title": "Class SpanishStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram SpanishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SpanishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html",
    "title": "Class SwedishStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SwedishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram SwedishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SwedishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html",
    "title": "Class TurkishStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TurkishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram TurkishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) 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.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TurkishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Tartarus.Snowball <!-- 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. --> Snowball stemmer API. Classes Among This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS SnowballProgram This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.SnowballProgram.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.SnowballProgram.html",
    "title": "Class SnowballProgram | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SnowballProgram This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS Inheritance System.Object SnowballProgram ArmenianStemmer BasqueStemmer CatalanStemmer DanishStemmer DutchStemmer EnglishStemmer FinnishStemmer FrenchStemmer German2Stemmer GermanStemmer HungarianStemmer IrishStemmer ItalianStemmer KpStemmer LovinsStemmer NorwegianStemmer PorterStemmer PortugueseStemmer RomanianStemmer RussianStemmer SpanishStemmer SwedishStemmer TurkishStemmer 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.Tartarus.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class SnowballProgram Constructors | Improve this Doc View Source SnowballProgram() Declaration protected SnowballProgram() Fields | Improve this Doc View Source m_bra Declaration protected int m_bra Field Value Type Description System.Int32 | Improve this Doc View Source m_current Declaration protected char[] m_current Field Value Type Description System.Char [] | Improve this Doc View Source m_cursor Declaration protected int m_cursor Field Value Type Description System.Int32 | Improve this Doc View Source m_ket Declaration protected int m_ket Field Value Type Description System.Int32 | Improve this Doc View Source m_limit Declaration protected int m_limit Field Value Type Description System.Int32 | Improve this Doc View Source m_limit_backward Declaration protected int m_limit_backward Field Value Type Description System.Int32 Properties | Improve this Doc View Source Current Get the current string. Declaration public virtual string Current { get; } Property Value Type Description System.String | Improve this Doc View Source CurrentBuffer Get the current buffer containing the stem. NOTE: this may be a reference to a different character array than the one originally provided with setCurrent, in the exceptional case that stemming produced a longer intermediate or result string. It is necessary to use CurrentBufferLength to determine the valid length of the returned buffer. For example, many words are stemmed simply by subtracting from the length to remove suffixes. Declaration public virtual char[] CurrentBuffer { get; } Property Value Type Description System.Char [] See Also CurrentBufferLength | Improve this Doc View Source CurrentBufferLength Get the valid length of the character array in CurrentBuffer Declaration public virtual int CurrentBufferLength { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AssignTo(StringBuilder) Declaration protected virtual StringBuilder AssignTo(StringBuilder s) Parameters Type Name Description System.Text.StringBuilder s Returns Type Description System.Text.StringBuilder | Improve this Doc View Source CopyFrom(SnowballProgram) Declaration protected virtual void CopyFrom(SnowballProgram other) Parameters Type Name Description SnowballProgram other | Improve this Doc View Source Eq_S(Int32, String) Declaration protected virtual bool Eq_S(int s_size, string s) Parameters Type Name Description System.Int32 s_size System.String s Returns Type Description System.Boolean | Improve this Doc View Source Eq_S_B(Int32, String) Declaration protected virtual bool Eq_S_B(int s_size, string s) Parameters Type Name Description System.Int32 s_size System.String s Returns Type Description System.Boolean | Improve this Doc View Source Eq_V(String) Declaration protected virtual bool Eq_V(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean | Improve this Doc View Source Eq_V_B(String) Declaration protected virtual bool Eq_V_B(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean | Improve this Doc View Source FindAmong(Among[], Int32) Declaration protected virtual int FindAmong(Among[] v, int v_size) Parameters Type Name Description Among [] v System.Int32 v_size Returns Type Description System.Int32 | Improve this Doc View Source FindAmongB(Among[], Int32) Declaration protected virtual int FindAmongB(Among[] v, int v_size) Parameters Type Name Description Among [] v System.Int32 v_size Returns Type Description System.Int32 | Improve this Doc View Source InGrouping(Char[], Int32, Int32) Declaration protected virtual bool InGrouping(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source InGroupingB(Char[], Int32, Int32) Declaration protected virtual bool InGroupingB(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source InRange(Int32, Int32) Declaration protected virtual bool InRange(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source InRangeB(Int32, Int32) Declaration protected virtual bool InRangeB(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source Insert(Int32, Int32, String) Declaration protected virtual void Insert(int c_bra, int c_ket, string s) Parameters Type Name Description System.Int32 c_bra System.Int32 c_ket System.String s | Improve this Doc View Source OutGrouping(Char[], Int32, Int32) Declaration protected virtual bool OutGrouping(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source OutGroupingB(Char[], Int32, Int32) Declaration protected virtual bool OutGroupingB(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source OutRange(Int32, Int32) Declaration protected virtual bool OutRange(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source OutRangeB(Int32, Int32) Declaration protected virtual bool OutRangeB(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source ReplaceS(Int32, Int32, String) to replace chars between c_bra and c_ket in current by the chars in s . Declaration protected virtual int ReplaceS(int c_bra, int c_ket, string s) Parameters Type Name Description System.Int32 c_bra System.Int32 c_ket System.String s Returns Type Description System.Int32 | Improve this Doc View Source SetCurrent(Char[], Int32) Set the current string. Declaration public virtual void SetCurrent(char[] text, int length) Parameters Type Name Description System.Char [] text character array containing input System.Int32 length valid length of text. | Improve this Doc View Source SetCurrent(String) Set the current string. Declaration public virtual void SetCurrent(string value) Parameters Type Name Description System.String value | Improve this Doc View Source SliceCheck() Declaration protected virtual void SliceCheck() | Improve this Doc View Source SliceDel() Declaration protected virtual void SliceDel() | Improve this Doc View Source SliceFrom(String) Declaration protected virtual void SliceFrom(string s) Parameters Type Name Description System.String s | Improve this Doc View Source SliceTo(StringBuilder) Copy the slice into the supplied System.Text.StringBuilder Declaration protected virtual StringBuilder SliceTo(StringBuilder s) Parameters Type Name Description System.Text.StringBuilder s Returns Type Description System.Text.StringBuilder | Improve this Doc View Source Stem() Declaration public abstract bool Stem() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis.Common/overview.html": {
    "href": "api/Lucene.Net.Analysis.Common/overview.html",
    "title": "Lucene.Net.Analysis.Common | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.Analysis.Common <!-- 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. --> Analyzers for indexing content in different languages and domains. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. This module contains concrete components ( CharFilter s, Tokenizer s, and ( TokenFilter s) for analyzing different types of content. It also provides a number of Analyzer s for different languages that you can use to get started quickly."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html",
    "title": "Class BinaryDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BinaryDictionary Base class for a binary-encoded in-memory dictionary. Inheritance System.Object BinaryDictionary TokenInfoDictionary UnknownDictionary Implements IDictionary 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionary : IDictionary Constructors | Improve this Doc View Source BinaryDictionary() Declaration protected BinaryDictionary() Fields | Improve this Doc View Source DICT_FILENAME_SUFFIX Declaration public static readonly string DICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source DICT_HEADER Declaration public static readonly string DICT_HEADER Field Value Type Description System.String | Improve this Doc View Source HAS_BASEFORM flag that the entry has baseform data. otherwise its not inflected (same as surface form) Declaration public static readonly int HAS_BASEFORM Field Value Type Description System.Int32 | Improve this Doc View Source HAS_PRONUNCIATION flag that the entry has pronunciation data. otherwise pronunciation is the reading Declaration public static readonly int HAS_PRONUNCIATION Field Value Type Description System.Int32 | Improve this Doc View Source HAS_READING flag that the entry has reading data. otherwise reading is surface form converted to katakana Declaration public static readonly int HAS_READING Field Value Type Description System.Int32 | Improve this Doc View Source POSDICT_FILENAME_SUFFIX Declaration public static readonly string POSDICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source POSDICT_HEADER Declaration public static readonly string POSDICT_HEADER Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_FILENAME_SUFFIX Declaration public static readonly string TARGETMAP_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_HEADER Declaration public static readonly string TARGETMAP_HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public virtual string GetBaseForm(int wordId, char[] surfaceForm, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public virtual string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public virtual string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public virtual int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public virtual string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public virtual string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public virtual string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetResource(String) Declaration protected Stream GetResource(string suffix) Parameters Type Name Description System.String suffix Returns Type Description System.IO.Stream | Improve this Doc View Source GetRightId(Int32) Declaration public virtual int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetTypeResource(Type, String) Declaration public static Stream GetTypeResource(Type clazz, string suffix) Parameters Type Name Description System.Type clazz System.String suffix Returns Type Description System.IO.Stream | Improve this Doc View Source GetWordCost(Int32) Declaration public virtual int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source LookupWordIds(Int32, Int32sRef) Declaration public virtual void LookupWordIds(int sourceId, Int32sRef ref) Parameters Type Name Description System.Int32 sourceId Int32sRef ref Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html",
    "title": "Class CharacterDefinition | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharacterDefinition Character category data. Inheritance System.Object CharacterDefinition 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinition Fields | Improve this Doc View Source ALPHA Declaration public static readonly byte ALPHA Field Value Type Description System.Byte | Improve this Doc View Source CLASS_COUNT Declaration public static readonly int CLASS_COUNT Field Value Type Description System.Int32 | Improve this Doc View Source CYRILLIC Declaration public static readonly byte CYRILLIC Field Value Type Description System.Byte | Improve this Doc View Source DEFAULT Declaration public static readonly byte DEFAULT Field Value Type Description System.Byte | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source GREEK Declaration public static readonly byte GREEK Field Value Type Description System.Byte | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source HIRAGANA Declaration public static readonly byte HIRAGANA Field Value Type Description System.Byte | Improve this Doc View Source KANJI Declaration public static readonly byte KANJI Field Value Type Description System.Byte | Improve this Doc View Source KANJINUMERIC Declaration public static readonly byte KANJINUMERIC Field Value Type Description System.Byte | Improve this Doc View Source KATAKANA Declaration public static readonly byte KATAKANA Field Value Type Description System.Byte | Improve this Doc View Source NGRAM Declaration public static readonly byte NGRAM Field Value Type Description System.Byte | Improve this Doc View Source NUMERIC Declaration public static readonly byte NUMERIC Field Value Type Description System.Byte | Improve this Doc View Source SPACE Declaration public static readonly byte SPACE Field Value Type Description System.Byte | Improve this Doc View Source SYMBOL Declaration public static readonly byte SYMBOL Field Value Type Description System.Byte | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Properties | Improve this Doc View Source Instance Declaration public static CharacterDefinition Instance { get; } Property Value Type Description CharacterDefinition Methods | Improve this Doc View Source GetCharacterClass(Char) Declaration public byte GetCharacterClass(char c) Parameters Type Name Description System.Char c Returns Type Description System.Byte | Improve this Doc View Source IsGroup(Char) Declaration public bool IsGroup(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsInvoke(Char) Declaration public bool IsInvoke(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsKanji(Char) Declaration public bool IsKanji(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source LookupCharacterClass(String) Declaration public static byte LookupCharacterClass(string characterClassName) Parameters Type Name Description System.String characterClassName Returns Type Description System.Byte"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html",
    "title": "Class ConnectionCosts | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConnectionCosts n-gram connection cost data Inheritance System.Object ConnectionCosts 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCosts Fields | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Properties | Improve this Doc View Source Instance Declaration public static ConnectionCosts Instance { get; } Property Value Type Description ConnectionCosts Methods | Improve this Doc View Source Get(Int32, Int32) Declaration public int Get(int forwardId, int backwardId) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.Dictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Dictionary Inheritance System.Object Dictionary 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Dictionary Fields | Improve this Doc View Source INTERNAL_SEPARATOR Declaration public static readonly string INTERNAL_SEPARATOR Field Value Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Dict | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Dict <!-- 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. --> Kuromoji dictionary implementation. Classes BinaryDictionary Base class for a binary-encoded in-memory dictionary. CharacterDefinition Character category data. ConnectionCosts n-gram connection cost data Dictionary TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. UnknownDictionary Dictionary for unknown-word handling. UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Interfaces IDictionary Dictionary interface for retrieving morphological data by id."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.IDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.IDictionary.html",
    "title": "Interface IDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IDictionary Dictionary interface for retrieving morphological data by id. Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IDictionary Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Get base form of word. Declaration string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Base form (only different for inflected words, otherwise null). | Improve this Doc View Source GetInflectionForm(Int32) Get inflection form of tokens. Declaration string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection form, or null. | Improve this Doc View Source GetInflectionType(Int32) Get inflection type of tokens. Declaration string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection type, or null. | Improve this Doc View Source GetLeftId(Int32) Get left id of specified word. Declaration int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Left id. | Improve this Doc View Source GetPartOfSpeech(Int32) Get Part-Of-Speech of tokens Declaration string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Part-Of-Speech of the token. | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Get pronunciation of tokens Declaration string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Pronunciation of the token. | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Get reading of tokens. Declaration string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Reading of the token. | Improve this Doc View Source GetRightId(Int32) Get right id of specified word. Declaration int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Right id. | Improve this Doc View Source GetWordCost(Int32) Get word cost of specified word Declaration int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Word's cost."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html",
    "title": "Class TokenInfoDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. Inheritance System.Object BinaryDictionary TokenInfoDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.GetInflectionType(Int32) BinaryDictionary.GetInflectionForm(Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoDictionary : BinaryDictionary, IDictionary Fields | Improve this Doc View Source FST_FILENAME_SUFFIX Declaration public static readonly string FST_FILENAME_SUFFIX Field Value Type Description System.String Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST | Improve this Doc View Source Instance Declaration public static TokenInfoDictionary Instance { get; } Property Value Type Description TokenInfoDictionary Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html",
    "title": "Class TokenInfoFST | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. Inheritance System.Object TokenInfoFST 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoFST Constructors | Improve this Doc View Source TokenInfoFST(FST<Nullable<Int64>>, Boolean) Declaration public TokenInfoFST(FST<long?> fst, bool fasterButMoreRam) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Boolean fasterButMoreRam Properties | Improve this Doc View Source NoOutput Declaration public long? NoOutput { get; } Property Value Type Description System.Nullable < System.Int64 > Methods | Improve this Doc View Source FindTargetArc(Int32, FST.Arc<Nullable<Int64>>, FST.Arc<Nullable<Int64>>, Boolean, FST.BytesReader) Declaration public FST.Arc<long?> FindTargetArc(int ch, FST.Arc<long?> follow, FST.Arc<long?> arc, bool useCache, FST.BytesReader fstReader) Parameters Type Name Description System.Int32 ch FST.Arc < System.Nullable < System.Int64 >> follow FST.Arc < System.Nullable < System.Int64 >> arc System.Boolean useCache FST.BytesReader fstReader Returns Type Description FST.Arc < System.Nullable < System.Int64 >> | Improve this Doc View Source GetBytesReader() Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader | Improve this Doc View Source GetFirstArc(FST.Arc<Nullable<Int64>>) Declaration public FST.Arc<long?> GetFirstArc(FST.Arc<long?> arc) Parameters Type Name Description FST.Arc < System.Nullable < System.Int64 >> arc Returns Type Description FST.Arc < System.Nullable < System.Int64 >>"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html",
    "title": "Class UnknownDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UnknownDictionary Dictionary for unknown-word handling. Inheritance System.Object BinaryDictionary UnknownDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionary : BinaryDictionary, IDictionary Properties | Improve this Doc View Source CharacterDefinition Declaration public virtual CharacterDefinition CharacterDefinition { get; } Property Value Type Description CharacterDefinition | Improve this Doc View Source Instance Declaration public static UnknownDictionary Instance { get; } Property Value Type Description UnknownDictionary Methods | Improve this Doc View Source GetInflectionForm(Int32) Declaration public override string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionForm(Int32) | Improve this Doc View Source GetInflectionType(Int32) Declaration public override string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionType(Int32) | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public override string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Overrides BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) | Improve this Doc View Source Lookup(Char[], Int32, Int32) Declaration public virtual int Lookup(char[] text, int offset, int len) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 len Returns Type Description System.Int32 Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html",
    "title": "Class UserDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Inheritance System.Object UserDictionary Implements IDictionary 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.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class UserDictionary : IDictionary Constructors | Improve this Doc View Source UserDictionary(TextReader) Declaration public UserDictionary(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Fields | Improve this Doc View Source LEFT_ID Declaration public static readonly int LEFT_ID Field Value Type Description System.Int32 | Improve this Doc View Source RIGHT_ID Declaration public static readonly int RIGHT_ID Field Value Type Description System.Int32 | Improve this Doc View Source WORD_COST Declaration public static readonly int WORD_COST Field Value Type Description System.Int32 Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetRightId(Int32) Declaration public int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetWordCost(Int32) Declaration public int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source Lookup(Char[], Int32, Int32) Lookup words in text. Declaration public int[][] Lookup(char[] chars, int off, int len) Parameters Type Name Description System.Char [] chars Text. System.Int32 off Offset into text. System.Int32 len Length of text. Returns Type Description System.Int32 [][] Array of {wordId, position, length}. | Improve this Doc View Source LookupSegmentation(Int32) Declaration public int[] LookupSegmentation(int phraseID) Parameters Type Name Description System.Int32 phraseID Returns Type Description System.Int32 [] Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.GraphvizFormatter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.GraphvizFormatter.html",
    "title": "Class GraphvizFormatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. Inheritance System.Object GraphvizFormatter 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class GraphvizFormatter Constructors | Improve this Doc View Source GraphvizFormatter(ConnectionCosts) Declaration public GraphvizFormatter(ConnectionCosts costs) Parameters Type Name Description ConnectionCosts costs Methods | Improve this Doc View Source Finish() Declaration public virtual string Finish() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.html",
    "title": "Namespace Lucene.Net.Analysis.Ja | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja <!-- 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. --> Analyzer for Japanese. Classes GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Token Analyzed token with morphological data from its dictionary. Enums JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. JapaneseTokenizerType Token type reflecting the original source of this token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html",
    "title": "Class JapaneseAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. Inheritance System.Object Analyzer StopwordAnalyzerBase JapaneseAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion, UserDictionary, JapaneseTokenizerMode, CharArraySet, ISet<String>) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion, UserDictionary userDict, JapaneseTokenizerMode mode, CharArraySet stopwords, ISet<string> stoptags) Parameters Type Name Description LuceneVersion matchVersion UserDictionary userDict JapaneseTokenizerMode mode CharArraySet stopwords System.Collections.Generic.ISet < System.String > stoptags Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetDefaultStopSet() Declaration public static CharArraySet GetDefaultStopSet() Returns Type Description CharArraySet | Improve this Doc View Source GetDefaultStopTags() Declaration public static ISet<string> GetDefaultStopTags() Returns Type Description System.Collections.Generic.ISet < System.String > Implements System.IDisposable See Also JapaneseTokenizer"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html",
    "title": "Class JapaneseBaseFormFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseBaseFormFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseBaseFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseBaseFormFilter(TokenStream) Declaration public JapaneseBaseFormFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html",
    "title": "Class JapaneseBaseFormFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseBaseFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseBaseFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseBaseFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseBaseFormFilterFactory Declaration public JapaneseBaseFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html",
    "title": "Class JapaneseIterationMarkCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter JapaneseIterationMarkCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilter : CharFilter, IDisposable Remarks Sequences of iteration marks are supported. In case an illegal sequence of iteration marks is encountered, the implementation emits the illegal source character as-is without considering its script. For example, with input \"?ゝ\", we get \"??\" even though \"?\" isn't hiragana. Note that a full stop punctuation character \"。\" (U+3002) can not be iterated (see below). Iteration marks themselves can be emitted in case they are illegal, i.e. if they go back past the beginning of the character stream. The implementation buffers input until a full stop punctuation character (U+3002) or EOF is reached in order to not keep a copy of the character stream in memory. Vertical iteration marks, which are even rarer than horizontal iteration marks in contemporary Japanese, are unsupported. Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader) Constructor. Normalizes both kanji and kana iteration marks by default. Declaration public JapaneseIterationMarkCharFilter(TextReader input) Parameters Type Name Description System.IO.TextReader input Char stream. | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader, Boolean, Boolean) Constructor Declaration public JapaneseIterationMarkCharFilter(TextReader input, bool normalizeKanji, bool normalizeKana) Parameters Type Name Description System.IO.TextReader input Char stream. System.Boolean normalizeKanji Indicates whether kanji iteration marks should be normalized. System.Boolean normalizeKana Indicates whether kana iteration marks should be normalized. Fields | Improve this Doc View Source NORMALIZE_KANA_DEFAULT Normalize kana iteration marks by default Declaration public static readonly bool NORMALIZE_KANA_DEFAULT Field Value Type Description System.Boolean | Improve this Doc View Source NORMALIZE_KANJI_DEFAULT Normalize kanji iteration marks by default Declaration public static readonly bool NORMALIZE_KANJI_DEFAULT Field Value Type Description System.Boolean Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) | Improve this Doc View Source Read() Reads the next character from the text reader and advances the character position by one character. Declaration public override int Read() Returns Type Description System.Int32 The next character from the text reader, or -1 if no more characters are available. Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Reads a specified maximum number of characters from the current reader and writes the data to a buffer, beginning at the specified index. Declaration public override int Read(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer When this method returns, contains the specified character array with the values between index and (index + count - 1) replaced by the characters read from the current source. System.Int32 offset The position in buffer at which to begin writing. System.Int32 length The maximum number of characters to read. If the end of the reader is reached before the specified number of characters is read into the buffer, the method returns. Returns Type Description System.Int32 The number of characters that have been read. The number will be less than or equal to count, depending on whether the data is available within the reader. This method returns 0 (zero) if it is called when no more characters are left to read. Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html",
    "title": "Class JapaneseIterationMarkCharFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory JapaneseIterationMarkCharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilterFactory(IDictionary<String, String>) Creates a new JapaneseIterationMarkCharFilterFactory Declaration public JapaneseIterationMarkCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html",
    "title": "Class JapaneseKatakanaStemFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseKatakanaStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseKatakanaStemFilter : TokenFilter, IDisposable Remarks Note that only full-width katakana characters are supported. Please use a CJKWidthFilter to convert half-width katakana to full-width before using this filter. In order to prevent terms from being stemmed, use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Constructors | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream) Declaration public JapaneseKatakanaStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream, Int32) Declaration public JapaneseKatakanaStemFilter(TokenStream input, int minimumLength) Parameters Type Name Description TokenStream input System.Int32 minimumLength Fields | Improve this Doc View Source DEFAULT_MINIMUM_LENGTH Declaration public static readonly int DEFAULT_MINIMUM_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html",
    "title": "Class JapaneseKatakanaStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseKatakanaStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseKatakanaStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseKatakanaStemFilterFactory(IDictionary<String, String>) Creates a new JapaneseKatakanaStemFilterFactory Declaration public JapaneseKatakanaStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html",
    "title": "Class JapanesePartOfSpeechStopFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter JapanesePartOfSpeechStopFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapanesePartOfSpeechStopFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, TokenStream, ISet<String>) Create a new JapanesePartOfSpeechStopFilter . Declaration public JapanesePartOfSpeechStopFilter(LuceneVersion version, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version The Lucene match version. TokenStream input The TokenStream to consume. System.Collections.Generic.ISet < System.String > stopTags The part-of-speech tags that should be removed. | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, Boolean, TokenStream, ISet<String>) Declaration [Obsolete(\"EnablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public JapanesePartOfSpeechStopFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input System.Collections.Generic.ISet < System.String > stopTags Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html",
    "title": "Class JapanesePartOfSpeechStopFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapanesePartOfSpeechStopFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapanesePartOfSpeechStopFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilterFactory(IDictionary<String, String>) Creates a new JapanesePartOfSpeechStopFilterFactory Declaration public JapanesePartOfSpeechStopFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream stream) Parameters Type Name Description TokenStream stream Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html",
    "title": "Class JapaneseReadingFormFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseReadingFormFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseReadingFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream) Declaration public JapaneseReadingFormFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream, Boolean) Declaration public JapaneseReadingFormFilter(TokenStream input, bool useRomaji) Parameters Type Name Description TokenStream input System.Boolean useRomaji Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html",
    "title": "Class JapaneseReadingFormFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseReadingFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseReadingFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseReadingFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseReadingFormFilterFactory . Declaration public JapaneseReadingFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html",
    "title": "Class JapaneseTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. Inheritance System.Object AttributeSource TokenStream Tokenizer JapaneseTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseTokenizer : Tokenizer, IDisposable Remarks This tokenizer sets a number of additional attributes: IBaseFormAttribute containing base form for inflected adjectives and verbs. IPartOfSpeechAttribute containing part-of-speech. IReadingAttribute containing reading and pronunciation. IInflectionAttribute containing additional part-of-speech information for inflected forms. This tokenizer uses a rolling Viterbi search to find the least cost segmentation (path) of the incoming characters. For tokens that appear to be compound (> length 2 for all Kanji, or > length 7 for non-Kanji), we see if there is a 2nd best segmentation of that token after applying penalties to the long tokens. If so, and the Mode is SEARCH , we output the alternate segmentation as well. Constructors | Improve this Doc View Source JapaneseTokenizer(AttributeSource.AttributeFactory, TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Declaration public JapaneseTokenizer(AttributeSource.AttributeFactory factory, TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description AttributeSource.AttributeFactory factory The AttributeFactory to use. System.IO.TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. | Improve this Doc View Source JapaneseTokenizer(TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Uses the default AttributeFactory. Declaration public JapaneseTokenizer(TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description System.IO.TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. Fields | Improve this Doc View Source DEFAULT_MODE Default tokenization mode. Currently this is SEARCH . Declaration public static readonly JapaneseTokenizerMode DEFAULT_MODE Field Value Type Description JapaneseTokenizerMode Properties | Improve this Doc View Source GraphvizFormatter Expert: set this to produce graphviz (dot) output of the Viterbi lattice Declaration public GraphvizFormatter GraphvizFormatter { get; set; } Property Value Type Description GraphvizFormatter Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html",
    "title": "Class JapaneseTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory JapaneseTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseTokenizerFactory : TokenizerFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapaneseTokenizerFactory(IDictionary<String, String>) Creates a new JapaneseTokenizerFactory . Declaration public JapaneseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html",
    "title": "Enum JapaneseTokenizerMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerMode Fields Name Description EXTENDED Extended mode outputs unigrams for unknown words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NORMAL Ordinary segmentation: no decomposition for compounds, SEARCH Segmentation geared towards search: this includes a decompounding process for long nouns, also including the full compound token as a synonym."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html",
    "title": "Enum JapaneseTokenizerType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum JapaneseTokenizerType Token type reflecting the original source of this token Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerType Fields Name Description KNOWN Known words from the system dictionary. UNKNOWN Unknown words (heuristically segmented). USER Known words from the user dictionary."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Token.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Token Analyzed token with morphological data from its dictionary. Inheritance System.Object Token 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) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Token Constructors | Improve this Doc View Source Token(Int32, Char[], Int32, Int32, JapaneseTokenizerType, Int32, IDictionary) Declaration public Token(int wordId, char[] surfaceForm, int offset, int length, JapaneseTokenizerType type, int position, IDictionary dictionary) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 offset System.Int32 length JapaneseTokenizerType type System.Int32 position IDictionary dictionary Properties | Improve this Doc View Source Length length of surfaceForm Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset offset into surfaceForm Declaration public virtual int Offset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Get index of this token in input text. Returns position of token. Declaration public virtual int Position { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PositionLength Gets or Sets the length (in tokens) of this token. For normal tokens this is 1; for compound tokens it's > 1. Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source SurfaceForm surfaceForm Declaration public virtual char[] SurfaceForm { get; } Property Value Type Description System.Char [] Methods | Improve this Doc View Source GetBaseForm() base form or null if token is not inflected Declaration public virtual string GetBaseForm() Returns Type Description System.String base form or null if token is not inflected | Improve this Doc View Source GetInflectionForm() inflection form or null Declaration public virtual string GetInflectionForm() Returns Type Description System.String inflection form or null | Improve this Doc View Source GetInflectionType() inflection type or null Declaration public virtual string GetInflectionType() Returns Type Description System.String inflection type or null | Improve this Doc View Source GetPartOfSpeech() part of speech. Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String part of speech. | Improve this Doc View Source GetPronunciation() pronunciation. null if token doesn't have pronunciation. Declaration public virtual string GetPronunciation() Returns Type Description System.String pronunciation. null if token doesn't have pronunciation. | Improve this Doc View Source GetReading() reading. null if token doesn't have reading. Declaration public virtual string GetReading() Returns Type Description System.String reading. null if token doesn't have reading. | Improve this Doc View Source GetSurfaceFormString() surfaceForm as a String Declaration public virtual string GetSurfaceFormString() Returns Type Description System.String surfaceForm as a String | Improve this Doc View Source IsKnown() Returns true if this token is known word. Declaration public virtual bool IsKnown() Returns Type Description System.Boolean true if this token is in standard dictionary. false if not. | Improve this Doc View Source IsUnknown() Returns true if this token is unknown word. Declaration public virtual bool IsUnknown() Returns Type Description System.Boolean true if this token is unknown word. false if not. | Improve this Doc View Source IsUser() Returns true if this token is defined in user dictionary. Declaration public virtual bool IsUser() Returns Type Description System.Boolean true if this token is in user dictionary. false if not. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html",
    "title": "Class BaseFormAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseFormAttribute Attribute for GetBaseForm() . Inheritance System.Object Attribute BaseFormAttribute Implements IBaseFormAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() 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.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class BaseFormAttribute : Attribute, IBaseFormAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetBaseForm() Declaration public virtual string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IBaseFormAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes <!-- 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. --> Additional Kuromoji-specific Attributes for text analysis. Classes BaseFormAttribute Attribute for GetBaseForm() . InflectionAttribute Attribute for Kuromoji inflection data. PartOfSpeechAttribute Attribute for GetPartOfSpeech() . ReadingAttribute Attribute for Kuromoji reading data Interfaces IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html",
    "title": "Interface IBaseFormAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IBaseFormAttribute : IAttribute Methods | Improve this Doc View Source GetBaseForm() Declaration string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html",
    "title": "Interface IInflectionAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IInflectionAttribute : IAttribute Methods | Improve this Doc View Source GetInflectionForm() Declaration string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html",
    "title": "Class InflectionAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InflectionAttribute Attribute for Kuromoji inflection data. Inheritance System.Object Attribute InflectionAttribute Implements IInflectionAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() 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.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class InflectionAttribute : Attribute, IInflectionAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetInflectionForm() Declaration public virtual string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration public virtual string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IInflectionAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html",
    "title": "Interface IPartOfSpeechAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IPartOfSpeechAttribute : IAttribute Methods | Improve this Doc View Source GetPartOfSpeech() Declaration string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html",
    "title": "Interface IReadingAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IReadingAttribute : IAttribute Methods | Improve this Doc View Source GetPronunciation() Declaration string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration string GetReading() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html",
    "title": "Class PartOfSpeechAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inheritance System.Object Attribute PartOfSpeechAttribute Implements IPartOfSpeechAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() 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.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class PartOfSpeechAttribute : Attribute, IPartOfSpeechAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPartOfSpeech() Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IPartOfSpeechAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html",
    "title": "Class ReadingAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReadingAttribute Attribute for Kuromoji reading data Inheritance System.Object Attribute ReadingAttribute Implements IReadingAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() 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.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ReadingAttribute : Attribute, IReadingAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPronunciation() Declaration public virtual string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration public virtual string GetReading() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IReadingAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html",
    "title": "Class BinaryDictionaryWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BinaryDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter UnknownDictionaryWriter 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionaryWriter Constructors | Improve this Doc View Source BinaryDictionaryWriter(Type, Int32) Declaration public BinaryDictionaryWriter(Type implClazz, int size) Parameters Type Name Description System.Type implClazz System.Int32 size Fields | Improve this Doc View Source m_buffer Declaration protected ByteBuffer m_buffer Field Value Type Description J2N.IO.ByteBuffer | Improve this Doc View Source m_implClazz Declaration protected readonly Type m_implClazz Field Value Type Description System.Type Methods | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public virtual void AddMapping(int sourceId, int wordId) Parameters Type Name Description System.Int32 sourceId System.Int32 wordId | Improve this Doc View Source GetBaseFileName(String) Declaration protected string GetBaseFileName(string baseDir) Parameters Type Name Description System.String baseDir Returns Type Description System.String | Improve this Doc View Source Put(String[]) Put the entry in map. Declaration public virtual int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Current position of buffer, which will be wordId of next entry. | Improve this Doc View Source SharedPrefix(String, String) Declaration public static int SharedPrefix(string left, string right) Parameters Type Name Description System.String left System.String right Returns Type Description System.Int32 | Improve this Doc View Source Write(String) Write dictionary in file Declaration public virtual void Write(string baseDir) Parameters Type Name Description System.String baseDir Remarks Dictionary format is: [Size of dictionary(int)], [entry:{left id(short)}{right id(short)}{word cost(short)}{length of pos info(short)}{pos info(char)}], [entry...], [entry...]..... Exceptions Type Condition System.IO.IOException If an I/O error occurs writing the dictionary files. | Improve this Doc View Source WriteDictionary(String) Declaration protected virtual void WriteDictionary(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WritePosDict(String) Declaration protected virtual void WritePosDict(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WriteTargetMap(String) Declaration protected virtual void WriteTargetMap(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html",
    "title": "Class CharacterDefinitionWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharacterDefinitionWriter Inheritance System.Object CharacterDefinitionWriter 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinitionWriter Constructors | Improve this Doc View Source CharacterDefinitionWriter() Constructor for building. TODO: remove write access Declaration public CharacterDefinitionWriter() Methods | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html",
    "title": "Class ConnectionCostsBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConnectionCostsBuilder Inheritance System.Object ConnectionCostsBuilder 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ConnectionCostsBuilder Methods | Improve this Doc View Source Build(String) Declaration public static ConnectionCostsWriter Build(string filename) Parameters Type Name Description System.String filename Returns Type Description ConnectionCostsWriter"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html",
    "title": "Class ConnectionCostsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConnectionCostsWriter Inheritance System.Object ConnectionCostsWriter 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCostsWriter Constructors | Improve this Doc View Source ConnectionCostsWriter(Int32, Int32) Constructor for building. TODO: remove write access Declaration public ConnectionCostsWriter(int forwardSize, int backwardSize) Parameters Type Name Description System.Int32 forwardSize System.Int32 backwardSize Methods | Improve this Doc View Source Add(Int32, Int32, Int32) Declaration public void Add(int forwardId, int backwardId, int cost) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId System.Int32 cost | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CSVUtil.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CSVUtil.html",
    "title": "Class CSVUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CSVUtil Utility class for parsing CSV text Inheritance System.Object CSVUtil 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CSVUtil Methods | Improve this Doc View Source Parse(String) Parse CSV line Declaration public static string[] Parse(string line) Parameters Type Name Description System.String line line containing csv-encoded data Returns Type Description System.String [] Array of values | Improve this Doc View Source QuoteEscape(String) Quote and escape input value for CSV Declaration public static string QuoteEscape(string original) Parameters Type Name Description System.String original Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html",
    "title": "Enum DictionaryBuilder.DictionaryFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum DictionaryBuilder.DictionaryFormat Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum DictionaryFormat Fields Name Description IPADIC UNIDIC"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html",
    "title": "Class DictionaryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DictionaryBuilder Inheritance System.Object DictionaryBuilder 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class DictionaryBuilder Methods | Improve this Doc View Source Build(DictionaryBuilder.DictionaryFormat, String, String, String, Boolean) Declaration public static void Build(DictionaryBuilder.DictionaryFormat format, string inputDirname, string outputDirname, string encoding, bool normalizeEntry) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String inputDirname System.String outputDirname System.String encoding System.Boolean normalizeEntry | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Util <!-- 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. --> Kuromoji utility classes. Classes BinaryDictionaryWriter CharacterDefinitionWriter ConnectionCostsBuilder ConnectionCostsWriter CSVUtil Utility class for parsing CSV text DictionaryBuilder TokenInfoDictionaryBuilder TokenInfoDictionaryWriter ToStringUtil Utility class for english translations of morphological data, used only for debugging. UnknownDictionaryBuilder UnknownDictionaryWriter Enums DictionaryBuilder.DictionaryFormat"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html",
    "title": "Class TokenInfoDictionaryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenInfoDictionaryBuilder Inheritance System.Object TokenInfoDictionaryBuilder 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryBuilder Constructors | Improve this Doc View Source TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat, String, Boolean) Declaration public TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat format, string encoding, bool normalizeEntries) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String encoding System.Boolean normalizeEntries Methods | Improve this Doc View Source Build(String) Declaration public virtual TokenInfoDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source BuildDictionary(IList<String>) Declaration public virtual TokenInfoDictionaryWriter BuildDictionary(IList<string> csvFiles) Parameters Type Name Description System.Collections.Generic.IList < System.String > csvFiles Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source FormatEntry(String[]) IPADIC features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form 11 - reading 12 - pronounciation UniDic features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form reading 11 - base form 12 - surface form 13 - surface reading Declaration public virtual string[] FormatEntry(string[] features) Parameters Type Name Description System.String [] features Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html",
    "title": "Class TokenInfoDictionaryWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenInfoDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.Put(String[]) BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source TokenInfoDictionaryWriter(Int32) Declaration public TokenInfoDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source SetFST(FST<Nullable<Int64>>) Declaration public virtual void SetFST(FST<long?> fst) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String) | Improve this Doc View Source WriteFST(String) Declaration protected virtual void WriteFST(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html",
    "title": "Class ToStringUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToStringUtil Utility class for english translations of morphological data, used only for debugging. Inheritance System.Object ToStringUtil 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public static class ToStringUtil Methods | Improve this Doc View Source GetInflectedFormTranslation(String) Get the english form of inflected form Declaration public static string GetInflectedFormTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetInflectionTypeTranslation(String) Get the english form of inflection type Declaration public static string GetInflectionTypeTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetPOSTranslation(String) Get the english form of a POS tag Declaration public static string GetPOSTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetRomanization(String) Romanize katakana with modified hepburn Declaration public static string GetRomanization(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetRomanization(StringBuilder, String) Romanize katakana with modified hepburn Declaration public static void GetRomanization(StringBuilder builder, string s) Parameters Type Name Description System.Text.StringBuilder builder System.String s"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html",
    "title": "Class UnknownDictionaryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UnknownDictionaryBuilder Inheritance System.Object UnknownDictionaryBuilder 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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryBuilder Constructors | Improve this Doc View Source UnknownDictionaryBuilder(String) Declaration public UnknownDictionaryBuilder(string encoding) Parameters Type Name Description System.String encoding Methods | Improve this Doc View Source Build(String) Declaration public virtual UnknownDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadCharacterDefinition(String, UnknownDictionaryWriter) Declaration public virtual void ReadCharacterDefinition(string filename, UnknownDictionaryWriter dictionary) Parameters Type Name Description System.String filename UnknownDictionaryWriter dictionary | Improve this Doc View Source ReadDictionaryFile(String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename) Parameters Type Name Description System.String filename Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadDictionaryFile(String, String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename, string encoding) Parameters Type Name Description System.String filename System.String encoding Returns Type Description UnknownDictionaryWriter"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html",
    "title": "Class UnknownDictionaryWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UnknownDictionaryWriter Inheritance System.Object BinaryDictionaryWriter UnknownDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(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.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source UnknownDictionaryWriter(Int32) Declaration public UnknownDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source Put(String[]) Declaration public override int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Overrides BinaryDictionaryWriter.Put(String[]) | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public virtual void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public virtual void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String)"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.html",
    "title": "Lucene.Net.Analysis.Morfologik | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Morfologik <!-- 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 package provides dictionary-driven lemmatization (\"accurate stemming\") filter and analyzer for the Polish Language, driven by the Morfologik library developed by Dawid Weiss and Marcin Miłkowski. The MorfologikFilter yields one or more terms for each token. Each of those terms is given the same position in the index. Classes MorfologikAnalyzer Analyzer using Morfologik library. See: Morfologik project page MorfologikFilter TokenFilter using Morfologik library to transform input tokens into lemma and morphosyntactic (POS) tokens. Applies to Polish only. MorfologikFilter contains a MorphosyntacticTagsAttribute , which provides morphosyntactic annotations for produced lemmas. See the Morfologik documentation for details. MorfologikFilterFactory Filter factory for MorfologikFilter . An explicit resource name of the dictionary ( \".dict\" ) can be provided via the dictionary attribute, as the example below demonstrates: <fieldType name=\"text_mylang\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.MorfologikFilterFactory\" dictionary=\"mylang.dict\" /> </analyzer> </fieldType> If the dictionary attribute is not provided, the Polish dictionary is loaded and used by default. See: Morfologik web site"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikAnalyzer.html",
    "title": "Class MorfologikAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MorfologikAnalyzer Analyzer using Morfologik library. See: Morfologik project page Inheritance System.Object Analyzer MorfologikAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Morfologik Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorfologikAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source MorfologikAnalyzer(LuceneVersion) Builds an analyzer with the default Morfologik's Polish dictionary. Declaration public MorfologikAnalyzer(LuceneVersion version) Parameters Type Name Description LuceneVersion version Lucene compatibility version | Improve this Doc View Source MorfologikAnalyzer(LuceneVersion, Dictionary) Builds an analyzer with an explicit Morfologik.Stemming.Dictionary resource. See: https://github.com/morfologik/ Declaration public MorfologikAnalyzer(LuceneVersion version, Dictionary dictionary) Parameters Type Name Description LuceneVersion version Lucene compatibility version Morfologik.Stemming.Dictionary dictionary A prebuilt automaton with inflected and base word forms. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided reader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName Ignored field name. System.IO.TextReader reader Source of tokens. Returns Type Description TokenStreamComponents A TokenStreamComponents built from a StandardTokenizer filtered with MorfologikFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilter.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilter.html",
    "title": "Class MorfologikFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MorfologikFilter TokenFilter using Morfologik library to transform input tokens into lemma and morphosyntactic (POS) tokens. Applies to Polish only. MorfologikFilter contains a MorphosyntacticTagsAttribute , which provides morphosyntactic annotations for produced lemmas. See the Morfologik documentation for details. Inheritance System.Object AttributeSource TokenStream TokenFilter MorfologikFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Morfologik Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorfologikFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source MorfologikFilter(TokenStream) Creates a filter with the default (Polish) dictionary. Declaration public MorfologikFilter(TokenStream input) Parameters Type Name Description TokenStream input Input token stream. | Improve this Doc View Source MorfologikFilter(TokenStream, Dictionary) Creates a filter with a given dictionary. Declaration public MorfologikFilter(TokenStream input, Dictionary dict) Parameters Type Name Description TokenStream input Input token stream. Morfologik.Stemming.Dictionary dict Morfologik.Stemming.Dictionary to use for stemming. Methods | Improve this Doc View Source IncrementToken() Retrieves the next token (possibly from the list of lemmas). Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Resets stems accumulator and hands over to superclass. Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilterFactory.html",
    "title": "Class MorfologikFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MorfologikFilterFactory Filter factory for MorfologikFilter . An explicit resource name of the dictionary ( \".dict\" ) can be provided via the dictionary attribute, as the example below demonstrates: <fieldType name=\"text_mylang\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.MorfologikFilterFactory\" dictionary=\"mylang.dict\" /> </analyzer> </fieldType> If the dictionary attribute is not provided, the Polish dictionary is loaded and used by default. See: Morfologik web site Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory MorfologikFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Morfologik Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorfologikFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source MorfologikFilterFactory(IDictionary<String, String>) Creates a new MorfologikFilterFactory Declaration public MorfologikFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DICTIONARY_ATTRIBUTE Dictionary resource attribute (should have \".dict\" suffix), loaded from IResourceLoader . Declaration public const string DICTIONARY_ATTRIBUTE = \"dictionary\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream ts) Parameters Type Name Description TokenStream ts Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Morfologik.TokenAttributes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Morfologik.TokenAttributes Classes MorphosyntacticTagsAttribute Morphosyntactic annotations for surface forms. Interfaces IMorphosyntacticTagsAttribute Morfologik provides morphosyntactic annotations for surface forms. For the exact format and description of these, see the project's documentation."
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.IMorphosyntacticTagsAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.IMorphosyntacticTagsAttribute.html",
    "title": "Interface IMorphosyntacticTagsAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IMorphosyntacticTagsAttribute Morfologik provides morphosyntactic annotations for surface forms. For the exact format and description of these, see the project's documentation. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Morfologik.TokenAttributes Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public interface IMorphosyntacticTagsAttribute : IAttribute Properties | Improve this Doc View Source Tags Gets or sets the POS tag of the term. A single word may have multiple POS tags, depending on the interpretation (context disambiguation is typically needed to determine which particular tag is appropriate). The default value (no-value) is null. Returns a list of POS tags corresponding to current lemma. Declaration IList<StringBuilder> Tags { get; set; } Property Value Type Description System.Collections.Generic.IList < System.Text.StringBuilder > Methods | Improve this Doc View Source Clear() Clear to default value. Declaration void Clear()"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.MorphosyntacticTagsAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.MorphosyntacticTagsAttribute.html",
    "title": "Class MorphosyntacticTagsAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MorphosyntacticTagsAttribute Morphosyntactic annotations for surface forms. Inheritance System.Object Attribute MorphosyntacticTagsAttribute Implements IMorphosyntacticTagsAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Morfologik.TokenAttributes Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorphosyntacticTagsAttribute : Attribute, IMorphosyntacticTagsAttribute, IAttribute Constructors | Improve this Doc View Source MorphosyntacticTagsAttribute() Initializes this attribute with no tags Declaration public MorphosyntacticTagsAttribute() Properties | Improve this Doc View Source Tags Gets or sets the POS tag of the term. If you need a copy of this char sequence, copy its contents (and clone System.Text.StringBuilder s) because it changes with each new term to avoid unnecessary memory allocations. Declaration public virtual IList<StringBuilder> Tags { get; set; } Property Value Type Description System.Collections.Generic.IList < System.Text.StringBuilder > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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 ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements IMorphosyntacticTagsAttribute IAttribute See Also IMorphosyntacticTagsAttribute"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.html",
    "title": "Namespace Lucene.Net.Analysis.Uk | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Uk Classes UkrainianMorfologikAnalyzer A dictionary-based Analyzer for Ukrainian."
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.UkrainianMorfologikAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.UkrainianMorfologikAnalyzer.html",
    "title": "Class UkrainianMorfologikAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UkrainianMorfologikAnalyzer A dictionary-based Analyzer for Ukrainian. Inheritance System.Object Analyzer StopwordAnalyzerBase UkrainianMorfologikAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Uk Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public sealed class UkrainianMorfologikAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source UkrainianMorfologikAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public UkrainianMorfologikAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. | Improve this Doc View Source UkrainianMorfologikAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public UkrainianMorfologikAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. CharArraySet stopwords A stopword set. | Improve this Doc View Source UkrainianMorfologikAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public UkrainianMorfologikAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. CharArraySet stopwords A stopword set. CharArraySet stemExclusionSet A set of terms not to be stemmed. Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Ukrainian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet Default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and MorfologikFilter on the Ukrainian dictionary. Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source InitReader(String, TextReader) Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description System.IO.TextReader Overrides Analyzer.InitReader(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Morfologik/overview.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/overview.html",
    "title": "Lucene.Net.Analysis.Morfologik | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.Analysis.Morfologik <!-- 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 package provides dictionary-driven lemmatization (\"accurate stemming\") filter and analyzer for the Polish Language, driven by the Morfologik library developed by Dawid Weiss and Marcin Miłkowski. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. The MorfologikFilter yields one or more terms for each token. Each of those terms is given the same position in the index."
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.html",
    "title": "Namespace Lucene.Net.Analysis.OpenNlp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.OpenNlp Classes OpenNLPChunkerFilter Run OpenNLP chunker. Prerequisite: the OpenNLPTokenizer and OpenNLPPOSFilter must precede this filter. Tags terms in the TypeAttribute, replacing the POS tags previously put there by OpenNLPPOSFilter . OpenNLPChunkerFilterFactory Factory for OpenNLPChunkerFilter . <fieldType name=\"text_opennlp_chunked\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> <filter class=\"solr.OpenNLPChunkerFilterFactory\" chunkerModel=\"filename\"/> </analyzer> </fieldType> OpenNLPLemmatizerFilter Runs OpenNLP dictionary-based and/or MaxEnt lemmatizers. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported, via the \"dictionary\" and \"lemmatizerModel\" params, respectively. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The dictionary file must be encoded as UTF-8, with one entry per line, in the form word[tab]lemma[tab]part-of-speech OpenNLPLemmatizerFilterFactory Factory for OpenNLPLemmatizerFilter . <fieldType name=\"text_opennlp_lemma\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> /> <filter class=\"solr.OpenNLPLemmatizerFilterFactory\" dictionary=\"filename\" lemmatizerModel=\"filename\"/> </analyzer> </fieldType> OpenNLPPOSFilter Run OpenNLP POS tagger. Tags all terms in the ITypeAttribute . OpenNLPPOSFilterFactory Factory for OpenNLPPOSFilter . <fieldType name=\"text_opennlp_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> </analyzer> </fieldType> OpenNLPSentenceBreakIterator A that splits sentences using an OpenNLP sentence chunking model. OpenNLPTokenizer Run OpenNLP SentenceDetector and Tokenizer . The last token in each sentence is marked by setting the EOS_FLAG_BIT in the IFlagsAttribute ; following filters can use this information to apply operations to tokens one sentence at a time. OpenNLPTokenizerFactory Factory for OpenNLPTokenizer . <fieldType name=\"text_opennlp\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilter.html",
    "title": "Class OpenNLPChunkerFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPChunkerFilter Run OpenNLP chunker. Prerequisite: the OpenNLPTokenizer and OpenNLPPOSFilter must precede this filter. Tags terms in the TypeAttribute, replacing the POS tags previously put there by OpenNLPPOSFilter . Inheritance System.Object AttributeSource TokenStream TokenFilter OpenNLPChunkerFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPChunkerFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OpenNLPChunkerFilter(TokenStream, NLPChunkerOp) Declaration public OpenNLPChunkerFilter(TokenStream input, NLPChunkerOp chunkerOp) Parameters Type Name Description TokenStream input NLPChunkerOp chunkerOp Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilterFactory.html",
    "title": "Class OpenNLPChunkerFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPChunkerFilterFactory Factory for OpenNLPChunkerFilter . <fieldType name=\"text_opennlp_chunked\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> <filter class=\"solr.OpenNLPChunkerFilterFactory\" chunkerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory OpenNLPChunkerFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPChunkerFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPChunkerFilterFactory(IDictionary<String, String>) Declaration public OpenNLPChunkerFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CHUNKER_MODEL Declaration public const string CHUNKER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilter.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilter.html",
    "title": "Class OpenNLPLemmatizerFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPLemmatizerFilter Runs OpenNLP dictionary-based and/or MaxEnt lemmatizers. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported, via the \"dictionary\" and \"lemmatizerModel\" params, respectively. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The dictionary file must be encoded as UTF-8, with one entry per line, in the form word[tab]lemma[tab]part-of-speech Inheritance System.Object AttributeSource TokenStream TokenFilter OpenNLPLemmatizerFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPLemmatizerFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OpenNLPLemmatizerFilter(TokenStream, NLPLemmatizerOp) Declaration public OpenNLPLemmatizerFilter(TokenStream input, NLPLemmatizerOp lemmatizerOp) Parameters Type Name Description TokenStream input NLPLemmatizerOp lemmatizerOp Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilterFactory.html",
    "title": "Class OpenNLPLemmatizerFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPLemmatizerFilterFactory Factory for OpenNLPLemmatizerFilter . <fieldType name=\"text_opennlp_lemma\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> /> <filter class=\"solr.OpenNLPLemmatizerFilterFactory\" dictionary=\"filename\" lemmatizerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory OpenNLPLemmatizerFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPLemmatizerFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPLemmatizerFilterFactory(IDictionary<String, String>) Declaration public OpenNLPLemmatizerFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DICTIONARY Declaration public const string DICTIONARY = null Field Value Type Description System.String | Improve this Doc View Source LEMMATIZER_MODEL Declaration public const string LEMMATIZER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilter.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilter.html",
    "title": "Class OpenNLPPOSFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPPOSFilter Run OpenNLP POS tagger. Tags all terms in the ITypeAttribute . Inheritance System.Object AttributeSource TokenStream TokenFilter OpenNLPPOSFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPPOSFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OpenNLPPOSFilter(TokenStream, NLPPOSTaggerOp) Declaration public OpenNLPPOSFilter(TokenStream input, NLPPOSTaggerOp posTaggerOp) Parameters Type Name Description TokenStream input NLPPOSTaggerOp posTaggerOp Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilterFactory.html",
    "title": "Class OpenNLPPOSFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPPOSFilterFactory Factory for OpenNLPPOSFilter . <fieldType name=\"text_opennlp_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory OpenNLPPOSFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPPOSFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPPOSFilterFactory(IDictionary<String, String>) Declaration public OpenNLPPOSFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source POS_TAGGER_MODEL Declaration public const string POS_TAGGER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPSentenceBreakIterator.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPSentenceBreakIterator.html",
    "title": "Class OpenNLPSentenceBreakIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPSentenceBreakIterator A that splits sentences using an OpenNLP sentence chunking model. Inheritance System.Object OpenNLPSentenceBreakIterator Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPSentenceBreakIterator : BreakIterator Constructors | Improve this Doc View Source OpenNLPSentenceBreakIterator(NLPSentenceDetectorOp) Declaration public OpenNLPSentenceBreakIterator(NLPSentenceDetectorOp sentenceOp) Parameters Type Name Description NLPSentenceDetectorOp sentenceOp Properties | Improve this Doc View Source Current Declaration public override int Current { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public override CharacterIterator Text { get; } Property Value Type Description CharacterIterator Methods | Improve this Doc View Source First() Declaration public override int First() Returns Type Description System.Int32 | Improve this Doc View Source Following(Int32) Declaration public override int Following(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source Last() Declaration public override int Last() Returns Type Description System.Int32 | Improve this Doc View Source Next() Declaration public override int Next() Returns Type Description System.Int32 | Improve this Doc View Source Next(Int32) Declaration public override int Next(int n) Parameters Type Name Description System.Int32 n Returns Type Description System.Int32 | Improve this Doc View Source Preceding(Int32) Declaration public override int Preceding(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source Previous() Declaration public override int Previous() Returns Type Description System.Int32 | Improve this Doc View Source SetText(CharacterIterator) Declaration public override void SetText(CharacterIterator newText) Parameters Type Name Description CharacterIterator newText"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizer.html",
    "title": "Class OpenNLPTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPTokenizer Run OpenNLP SentenceDetector and Tokenizer . The last token in each sentence is marked by setting the EOS_FLAG_BIT in the IFlagsAttribute ; following filters can use this information to apply operations to tokens one sentence at a time. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase OpenNLPTokenizer Implements System.IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source OpenNLPTokenizer(AttributeSource.AttributeFactory, TextReader, NLPSentenceDetectorOp, NLPTokenizerOp) Declaration public OpenNLPTokenizer(AttributeSource.AttributeFactory factory, TextReader reader, NLPSentenceDetectorOp sentenceOp, NLPTokenizerOp tokenizerOp) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader NLPSentenceDetectorOp sentenceOp NLPTokenizerOp tokenizerOp | Improve this Doc View Source OpenNLPTokenizer(TextReader, NLPSentenceDetectorOp, NLPTokenizerOp) Creates a new OpenNLPTokenizer Declaration public OpenNLPTokenizer(TextReader reader, NLPSentenceDetectorOp sentenceOp, NLPTokenizerOp tokenizerOp) Parameters Type Name Description TextReader reader NLPSentenceDetectorOp sentenceOp NLPTokenizerOp tokenizerOp Fields | Improve this Doc View Source EOS_FLAG_BIT Declaration public static int EOS_FLAG_BIT Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides SegmentingTokenizerBase.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizerFactory.html",
    "title": "Class OpenNLPTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPTokenizerFactory Factory for OpenNLPTokenizer . <fieldType name=\"text_opennlp\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory OpenNLPTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPTokenizerFactory : TokenizerFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPTokenizerFactory(IDictionary<String, String>) Declaration public OpenNLPTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source SENTENCE_MODEL Declaration public const string SENTENCE_MODEL = null Field Value Type Description System.String | Improve this Doc View Source TOKENIZER_MODEL Declaration public const string TOKENIZER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader Returns Type Description Tokenizer | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.html",
    "title": "Namespace Lucene.Net.Analysis.OpenNlp.Tools | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.OpenNlp.Tools Classes NLPChunkerOp Supply OpenNLP Chunking tool Requires binary models from OpenNLP project on SourceForge. NLPLemmatizerOp Supply OpenNLP Lemmatizer tools. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The MaxEnt implementation requires binary models from OpenNLP project on SourceForge. NLPNERTaggerOp Supply OpenNLP Named Entity Resolution tool Requires binary models from OpenNLP project on SourceForge. Usage: from the OpenNLP documentation : \"The NameFinderME class is not thread safe, it must only be called from one thread. To use multiple threads multiple NameFinderME instances sharing the same model instance can be created. The input text should be segmented into documents, sentences and tokens. To perform entity detection an application calls the find method for every sentence in the document. After every document clearAdaptiveData must be called to clear the adaptive data in the feature generators. Not calling clearAdaptiveData can lead to a sharp drop in the detection rate after a few documents.\" NLPPOSTaggerOp Supply OpenNLP Parts-Of-Speech Tagging tool. Requires binary models from OpenNLP project on SourceForge. NLPSentenceDetectorOp Supply OpenNLP Sentence Detector tool. Requires binary models from OpenNLP project on SourceForge. NLPTokenizerOp Supply OpenNLP Sentence Tokenizer tool. Requires binary models from OpenNLP project on SourceForge. OpenNLPOpsFactory Supply OpenNLP Named Entity Recognizer. Cache model file objects. Assumes model files are thread-safe."
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPChunkerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPChunkerOp.html",
    "title": "Class NLPChunkerOp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NLPChunkerOp Supply OpenNLP Chunking tool Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPChunkerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPChunkerOp : object Constructors | Improve this Doc View Source NLPChunkerOp(ChunkerModel) Declaration public NLPChunkerOp(ChunkerModel chunkerModel) Parameters Type Name Description ChunkerModel chunkerModel Methods | Improve this Doc View Source GetChunks(String[], String[], Double[]) Declaration public virtual string[] GetChunks(string[] words, string[] tags, double[] probs) Parameters Type Name Description System.String [] words System.String [] tags System.Double [] probs Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPLemmatizerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPLemmatizerOp.html",
    "title": "Class NLPLemmatizerOp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NLPLemmatizerOp Supply OpenNLP Lemmatizer tools. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The MaxEnt implementation requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPLemmatizerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPLemmatizerOp : object Constructors | Improve this Doc View Source NLPLemmatizerOp(Stream, LemmatizerModel) Declaration public NLPLemmatizerOp(Stream dictionary, LemmatizerModel lemmatizerModel) Parameters Type Name Description Stream dictionary LemmatizerModel lemmatizerModel Methods | Improve this Doc View Source Lemmatize(String[], String[]) Declaration public virtual string[] Lemmatize(string[] words, string[] postags) Parameters Type Name Description System.String [] words System.String [] postags Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPNERTaggerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPNERTaggerOp.html",
    "title": "Class NLPNERTaggerOp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NLPNERTaggerOp Supply OpenNLP Named Entity Resolution tool Requires binary models from OpenNLP project on SourceForge. Usage: from the OpenNLP documentation : \"The NameFinderME class is not thread safe, it must only be called from one thread. To use multiple threads multiple NameFinderME instances sharing the same model instance can be created. The input text should be segmented into documents, sentences and tokens. To perform entity detection an application calls the find method for every sentence in the document. After every document clearAdaptiveData must be called to clear the adaptive data in the feature generators. Not calling clearAdaptiveData can lead to a sharp drop in the detection rate after a few documents.\" Inheritance System.Object NLPNERTaggerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPNERTaggerOp : object Constructors | Improve this Doc View Source NLPNERTaggerOp(TokenNameFinderModel) Declaration public NLPNERTaggerOp(TokenNameFinderModel model) Parameters Type Name Description TokenNameFinderModel model Methods | Improve this Doc View Source GetNames(String[]) Declaration public virtual Span[] GetNames(string[] words) Parameters Type Name Description System.String [] words Returns Type Description Span [] | Improve this Doc View Source Reset() Declaration public virtual void Reset()"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPPOSTaggerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPPOSTaggerOp.html",
    "title": "Class NLPPOSTaggerOp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NLPPOSTaggerOp Supply OpenNLP Parts-Of-Speech Tagging tool. Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPPOSTaggerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPPOSTaggerOp : object Constructors | Improve this Doc View Source NLPPOSTaggerOp(POSModel) Declaration public NLPPOSTaggerOp(POSModel model) Parameters Type Name Description POSModel model Methods | Improve this Doc View Source GetPOSTags(String[]) Declaration public virtual string[] GetPOSTags(string[] words) Parameters Type Name Description System.String [] words Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPSentenceDetectorOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPSentenceDetectorOp.html",
    "title": "Class NLPSentenceDetectorOp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NLPSentenceDetectorOp Supply OpenNLP Sentence Detector tool. Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPSentenceDetectorOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPSentenceDetectorOp : object Constructors | Improve this Doc View Source NLPSentenceDetectorOp() Declaration public NLPSentenceDetectorOp() | Improve this Doc View Source NLPSentenceDetectorOp(SentenceModel) Declaration public NLPSentenceDetectorOp(SentenceModel model) Parameters Type Name Description SentenceModel model Methods | Improve this Doc View Source SplitSentences(String) Declaration public virtual Span[] SplitSentences(string line) Parameters Type Name Description System.String line Returns Type Description Span []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPTokenizerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPTokenizerOp.html",
    "title": "Class NLPTokenizerOp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NLPTokenizerOp Supply OpenNLP Sentence Tokenizer tool. Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPTokenizerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPTokenizerOp : object Constructors | Improve this Doc View Source NLPTokenizerOp() Declaration public NLPTokenizerOp() | Improve this Doc View Source NLPTokenizerOp(TokenizerModel) Declaration public NLPTokenizerOp(TokenizerModel model) Parameters Type Name Description TokenizerModel model Methods | Improve this Doc View Source GetTerms(String) Declaration public virtual Span[] GetTerms(string sentence) Parameters Type Name Description System.String sentence Returns Type Description Span []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.OpenNLPOpsFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.OpenNLPOpsFactory.html",
    "title": "Class OpenNLPOpsFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenNLPOpsFactory Supply OpenNLP Named Entity Recognizer. Cache model file objects. Assumes model files are thread-safe. Inheritance System.Object OpenNLPOpsFactory Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public static class OpenNLPOpsFactory : object Methods | Improve this Doc View Source ClearModels() Declaration public static void ClearModels() | Improve this Doc View Source GetChunker(String) Declaration public static NLPChunkerOp GetChunker(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPChunkerOp | Improve this Doc View Source GetChunkerModel(String, IResourceLoader) Declaration public static ChunkerModel GetChunkerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description ChunkerModel | Improve this Doc View Source GetLemmatizer(String, String) Declaration public static NLPLemmatizerOp GetLemmatizer(string dictionaryFile, string lemmatizerModelFile) Parameters Type Name Description System.String dictionaryFile System.String lemmatizerModelFile Returns Type Description NLPLemmatizerOp | Improve this Doc View Source GetLemmatizerDictionary(String, IResourceLoader) Declaration public static string GetLemmatizerDictionary(string dictionaryFile, IResourceLoader loader) Parameters Type Name Description System.String dictionaryFile IResourceLoader loader Returns Type Description System.String | Improve this Doc View Source GetLemmatizerModel(String, IResourceLoader) Declaration public static LemmatizerModel GetLemmatizerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description LemmatizerModel | Improve this Doc View Source GetNERTagger(String) Declaration public static NLPNERTaggerOp GetNERTagger(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPNERTaggerOp | Improve this Doc View Source GetNERTaggerModel(String, IResourceLoader) Declaration public static TokenNameFinderModel GetNERTaggerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description TokenNameFinderModel | Improve this Doc View Source GetPOSTagger(String) Declaration public static NLPPOSTaggerOp GetPOSTagger(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPPOSTaggerOp | Improve this Doc View Source GetPOSTaggerModel(String, IResourceLoader) Declaration public static POSModel GetPOSTaggerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description POSModel | Improve this Doc View Source GetSentenceDetector(String) Declaration public static NLPSentenceDetectorOp GetSentenceDetector(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPSentenceDetectorOp | Improve this Doc View Source GetSentenceModel(String, IResourceLoader) Declaration public static SentenceModel GetSentenceModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description SentenceModel | Improve this Doc View Source GetTokenizer(String) Declaration public static NLPTokenizerOp GetTokenizer(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPTokenizerOp | Improve this Doc View Source GetTokenizerModel(String, IResourceLoader) Declaration public static TokenizerModel GetTokenizerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description TokenizerModel"
  },
  "api/Lucene.Net.Analysis.OpenNLP/overview.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/overview.html",
    "title": "| Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "<!-- 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. --> OpenNLP Library Integration"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html",
    "title": "Class BeiderMorseFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BeiderMorseFilter TokenFilter for Beider-Morse phonetic encoding. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter BeiderMorseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class BeiderMorseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BeiderMorseFilter(TokenStream, PhoneticEngine) Calls BeiderMorseFilter(TokenStream, PhoneticEngine, LanguageSet) Declaration public BeiderMorseFilter(TokenStream input, PhoneticEngine engine) Parameters Type Name Description TokenStream input TokenStream to filter PhoneticEngine engine Configured PhoneticEngine with BM settings. | Improve this Doc View Source BeiderMorseFilter(TokenStream, PhoneticEngine, LanguageSet) Create a new BeiderMorseFilter Declaration public BeiderMorseFilter(TokenStream input, PhoneticEngine engine, LanguageSet languages) Parameters Type Name Description TokenStream input TokenStream to filter PhoneticEngine engine Configured PhoneticEngine with BM settings. LanguageSet languages Optional Set of original languages. Can be null (which means it will be guessed). Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable See Also BeiderMorseEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html",
    "title": "Class BeiderMorseFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BeiderMorseFilterFactory Factory for BeiderMorseFilter . <fieldType name=\"text_bm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.BeiderMorseFilterFactory\" nameType=\"GENERIC\" ruleType=\"APPROX\" concat=\"true\" languageSet=\"auto\" </filter> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory BeiderMorseFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BeiderMorseFilterFactory(IDictionary<String, String>) Creates a new BeiderMorseFilterFactory Declaration public BeiderMorseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html",
    "title": "Class DoubleMetaphoneFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleMetaphoneFilter Filter for DoubleMetaphone (supporting secondary codes) Inheritance System.Object AttributeSource TokenStream TokenFilter DoubleMetaphoneFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class DoubleMetaphoneFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DoubleMetaphoneFilter(TokenStream, Int32, Boolean) Creates a DoubleMetaphoneFilter with the specified maximum code length, and either adding encoded forms as synonyms ( inject=true ) or replacing them. Declaration public DoubleMetaphoneFilter(TokenStream input, int maxCodeLength, bool inject) Parameters Type Name Description TokenStream input System.Int32 maxCodeLength System.Boolean inject Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html",
    "title": "Class DoubleMetaphoneFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleMetaphoneFilterFactory Factory for DoubleMetaphoneFilter . <fieldType name=\"text_dblmtphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DoubleMetaphoneFilterFactory\" inject=\"true\" maxCodeLength=\"4\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory DoubleMetaphoneFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source DoubleMetaphoneFilterFactory(IDictionary<String, String>) Creates a new DoubleMetaphoneFilterFactory Declaration public DoubleMetaphoneFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DEFAULT_MAX_CODE_LENGTH default maxCodeLength if not specified Declaration public static readonly int DEFAULT_MAX_CODE_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH parameter name: restricts the length of the phonetic code Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic <!-- 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. --> Analysis components for phonetic search. Classes BeiderMorseFilter TokenFilter for Beider-Morse phonetic encoding. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BeiderMorseFilterFactory Factory for BeiderMorseFilter . <fieldType name=\"text_bm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.BeiderMorseFilterFactory\" nameType=\"GENERIC\" ruleType=\"APPROX\" concat=\"true\" languageSet=\"auto\" </filter> </analyzer> </fieldType> DoubleMetaphoneFilter Filter for DoubleMetaphone (supporting secondary codes) DoubleMetaphoneFilterFactory Factory for DoubleMetaphoneFilter . <fieldType name=\"text_dblmtphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DoubleMetaphoneFilterFactory\" inject=\"true\" maxCodeLength=\"4\"/> </analyzer> </fieldType> PhoneticFilter Create tokens for phonetic matches. See the Language namespace. PhoneticFilterFactory Factory for PhoneticFilter . Create tokens based on phonetic encoders from the Language namespace. This takes one required argument, \"encoder\", and the rest are optional: encoder required, one of \"DoubleMetaphone\", \"Metaphone\", \"Soundex\", \"RefinedSoundex\", \"Caverphone\" (v2.0), or \"ColognePhonetic\" (case insensitive). If encoder isn't one of these, it'll be resolved as a class name either by itself if it already contains a '.' or otherwise as in the same package as these others. inject (default=true) add tokens to the stream with the offset=0 maxCodeLength The maximum length of the phonetic codes, as defined by the encoder. If an encoder doesn't support this then specifying this is an error. <fieldType name=\"text_phonetic\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PhoneticFilterFactory\" encoder=\"DoubleMetaphone\" inject=\"true\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html",
    "title": "Class AbstractCaverphone | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Inheritance System.Object AbstractCaverphone Caverphone1 Caverphone2 Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class AbstractCaverphone : IStringEncoder Constructors | Improve this Doc View Source AbstractCaverphone() Creates an instance of the Caverphone encoder Declaration public AbstractCaverphone() Methods | Improve this Doc View Source Encode(String) Declaration public abstract string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source IsEncodeEqual(String, String) Tests if the encodings of two strings are equal. This method might be promoted to a new AbstractStringEncoder superclass. Declaration public virtual bool IsEncodeEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the encodings of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html",
    "title": "Class BeiderMorseEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BeiderMorseEncoder Encodes strings into their Beider-Morse phonetic encoding. Inheritance System.Object BeiderMorseEncoder Implements IStringEncoder 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseEncoder : IStringEncoder Remarks Beider-Morse phonetic encodings are optimised for family names. However, they may be useful for a wide range of words. This encoder is intentionally mutable to allow dynamic configuration through bean properties. As such, it is mutable, and may not be thread-safe. If you require a guaranteed thread-safe encoding then use PhoneticEngine directly. Encoding overview Beider-Morse phonetic encodings is a multi-step process. Firstly, a table of rules is consulted to guess what language the word comes from. For example, if it ends in \" ault \" then it infers that the word is French. Next, the word is translated into a phonetic representation using a language-specific phonetics table. Some runs of letters can be pronounced in multiple ways, and a single run of letters may be potentially broken up into phonemes at different places, so this stage results in a set of possible language-specific phonetic representations. Lastly, this language-specific phonetic representation is processed by a table of rules that re-writes it phonetically taking into account systematic pronunciation differences between languages, to move it towards a pan-indo-european phonetic representation. Again, sometimes there are multiple ways this could be done and sometimes things that can be pronounced in several ways in the source language have only one way to represent them in this average phonetic language, so the result is again a set of phonetic spellings. Some names are treated as having multiple parts. This can be due to two things. Firstly, they may be hyphenated. In this case, each individual hyphenated word is encoded, and then these are combined end-to-end for the final encoding. Secondly, some names have standard prefixes, for example, \" Mac/Mc \" in Scottish (English) names. As sometimes it is ambiguous whether the prefix is intended or is an accident of the spelling, the word is encoded once with the prefix and once without it. The resulting encoding contains one and then the other result. Encoding format Individual phonetic spellings of an input word are represented in upper- and lower-case roman characters. Where there are multiple possible phonetic representations, these are joined with a pipe ( | ) character. If multiple hyphenated words where found, or if the word may contain a name prefix, each encoded word is placed in elipses and these blocks are then joined with hyphens. For example, \" d'ortley \" has a possible prefix. The form without prefix encodes to ortlaj|ortlej , while the form with prefix encodes to dortlaj|dortlej . Thus, the full, combined encoding is (ortlaj|ortlej)-(dortlaj|dortlej) . The encoded forms are often quite a bit longer than the input strings. This is because a single input may have many potential phonetic interpretations. For example, Renault encodes to rYnDlt|rYnalt|rYnult|rinDlt|rinalt|rinult . The APPROX rules will tend to produce larger encodings as they consider a wider range of possible, approximate phonetic interpretations of the original word. Down-stream applications may wish to further process the encoding for indexing or lookup purposes, for example, by splitting on pipe ( | ) and indexing under each of these alternatives. since 1.6 Properties | Improve this Doc View Source IsConcat Gets or Sets how multiple possible phonetic encodings are combined. true if multiple encodings are to be combined with a '|', false if just the first one is to be considered. Declaration public virtual bool IsConcat { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NameType Gets or Sets the name type currently in operation. Use GENERIC unless you specifically want phonetic encodings optimized for Ashkenazi or Sephardic Jewish family names. Declaration public virtual NameType NameType { get; set; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets or Sets the rule type to apply. This will widen or narrow the range of phonetic encodings considered. APPROX or EXACT for approximate or exact phonetic matches. Declaration public virtual RuleType RuleType { get; set; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source SetMaxPhonemes(Int32) Sets the number of maximum of phonemes that shall be considered by the engine. since 1.7 Declaration public virtual void SetMaxPhonemes(int maxPhonemes) Parameters Type Name Description System.Int32 maxPhonemes the maximum number of phonemes returned by the engine Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language.Bm | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic.Language.Bm Classes BeiderMorseEncoder Encodes strings into their Beider-Morse phonetic encoding. Lang Language guessing utility. Languages Language codes. LanguageSet A set of languages. NameTypeExtensions Phoneme PhonemeList PhoneticEngine Converts words into potential phonetic representations. Rule A phoneme rule. RuleTypeExtensions SomeLanguages Some languages, explicitly enumerated. Interfaces IPhonemeExpr IRPattern A minimal wrapper around the functionality of Rule Pattern that we use, to allow for alternate implementations. Enums NameType Supported types of names. Unless you are matching particular family names, use GENERIC . The GENERIC NameType should work reasonably well for non-name words. The other encodings are specifically tuned to family names, and may not work well at all for general text. since 1.6 RuleType Types of rule. since 1.6"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html",
    "title": "Interface IPhonemeExpr | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPhonemeExpr Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IPhonemeExpr Properties | Improve this Doc View Source Phonemes Declaration IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme >"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html",
    "title": "Interface IRPattern | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IRPattern A minimal wrapper around the functionality of Rule Pattern that we use, to allow for alternate implementations. Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IRPattern Methods | Improve this Doc View Source IsMatch(ICharSequence) Declaration bool IsMatch(ICharSequence input) Parameters Type Name Description J2N.Text.ICharSequence input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(String) Declaration bool IsMatch(string input) Parameters Type Name Description System.String input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(StringBuilder) Declaration bool IsMatch(StringBuilder input) Parameters Type Name Description System.Text.StringBuilder input Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html",
    "title": "Class Lang | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lang Language guessing utility. Inheritance System.Object Lang 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Lang Remarks This class encapsulates rules used to guess the possible languages that a word originates from. This is done by reference to a whole series of rules distributed in resource files. Instances of this class are typically managed through the static factory method GetInstance(NameType) . Unless you are developing your own language guessing rules, you will not need to interact with this class directly. This class is intended to be immutable and thread-safe. Lang resources Language guessing rules are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm.lang.txt The format of these resources is the following: Rules: Whitespace separated strings. There should be 3 columns to each row, and these will be interpreted as: pattern:a regular expression. languages:a '+'-separated list of languages. acceptOnMatch:'true' or 'false' indicating if a match rules in or rules out the language. End-of-line comments: Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments: Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines: All blank lines will be skipped. Port of lang.php since 1.6 Methods | Improve this Doc View Source GetInstance(NameType) Gets a Lang instance for one of the supported NameType s. Declaration public static Lang GetInstance(NameType nameType) Parameters Type Name Description NameType nameType The NameType to look up. Returns Type Description Lang A Lang encapsulating the language guessing rules for that name type. | Improve this Doc View Source GuessLanguage(String) Guesses the language of a word. Declaration public virtual string GuessLanguage(string text) Parameters Type Name Description System.String text The word. Returns Type Description System.String The language that the word originates from or ANY if there was no unique match. | Improve this Doc View Source GuessLanguages(String) Guesses the languages of a word. Declaration public virtual LanguageSet GuessLanguages(string input) Parameters Type Name Description System.String input The word. Returns Type Description LanguageSet A Set of Strings of language names that are potential matches for the input word. | Improve this Doc View Source LoadFromResource(String, Languages) Loads language rules from a resource. In normal use, you will obtain instances of Lang through the GetInstance(NameType) method. You will only need to call this yourself if you are developing custom language mapping rules. Declaration public static Lang LoadFromResource(string languageRulesResourceName, Languages languages) Parameters Type Name Description System.String languageRulesResourceName The fully-qualified or partially-qualified resource name to load. Languages languages The languages that these rules will support. Returns Type Description Lang A Lang encapsulating the loaded language-guessing rules."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html",
    "title": "Class Languages | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Languages Language codes. Inheritance System.Object Languages 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Languages Remarks Language codes are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm. NameType _languages.txt The format of these resources is the following: Language:A single string containing no whitespace. End-of-line comments:Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments:Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines:All blank lines will be skipped. Ported from language.php This class is immutable and thread-safe. since 1.6 Fields | Improve this Doc View Source ANY Declaration public static readonly string ANY Field Value Type Description System.String | Improve this Doc View Source ANY_LANGUAGE Any/all languages. Declaration public static readonly LanguageSet ANY_LANGUAGE Field Value Type Description LanguageSet | Improve this Doc View Source NO_LANGUAGES No languages at all. Declaration public static readonly LanguageSet NO_LANGUAGES Field Value Type Description LanguageSet Methods | Improve this Doc View Source GetInstance(NameType) Declaration public static Languages GetInstance(NameType nameType) Parameters Type Name Description NameType nameType Returns Type Description Languages | Improve this Doc View Source GetInstance(String) Declaration public static Languages GetInstance(string languagesResourceName) Parameters Type Name Description System.String languagesResourceName Returns Type Description Languages | Improve this Doc View Source GetLanguages() Declaration public virtual ISet<string> GetLanguages() Returns Type Description System.Collections.Generic.ISet < System.String >"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html",
    "title": "Class LanguageSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LanguageSet A set of languages. Inheritance System.Object LanguageSet SomeLanguages 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class LanguageSet Properties | Improve this Doc View Source IsEmpty Declaration public abstract bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsSingleton Declaration public abstract bool IsSingleton { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Contains(String) Declaration public abstract bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean | Improve this Doc View Source From(ISet<String>) Declaration public static LanguageSet From(ISet<string> langs) Parameters Type Name Description System.Collections.Generic.ISet < System.String > langs Returns Type Description LanguageSet | Improve this Doc View Source GetAny() Declaration public abstract string GetAny() Returns Type Description System.String | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public abstract LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html",
    "title": "Enum NameType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum NameType Supported types of names. Unless you are matching particular family names, use GENERIC . The GENERIC NameType should work reasonably well for non-name words. The other encodings are specifically tuned to family names, and may not work well at all for general text. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum NameType Fields Name Description ASHKENAZI Ashkenazi family names GENERIC Generic names and words SEPHARDIC Sephardic family names Extension Methods NameTypeExtensions.GetName()"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html",
    "title": "Class NameTypeExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NameTypeExtensions Inheritance System.Object NameTypeExtensions 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class NameTypeExtensions Methods | Improve this Doc View Source GetName(NameType) Gets the short version of the name type. Declaration public static string GetName(this NameType nameType) Parameters Type Name Description NameType nameType the NameType Returns Type Description System.String the NameType short string"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html",
    "title": "Class Phoneme | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Phoneme Inheritance System.Object Phoneme Implements IPhonemeExpr 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class Phoneme : IPhonemeExpr Constructors | Improve this Doc View Source Phoneme(ICharSequence, LanguageSet) Declaration public Phoneme(ICharSequence phonemeText, LanguageSet languages) Parameters Type Name Description J2N.Text.ICharSequence phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(Phoneme, Phoneme) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight | Improve this Doc View Source Phoneme(Phoneme, Phoneme, LanguageSet) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight, LanguageSet languages) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight LanguageSet languages | Improve this Doc View Source Phoneme(String, LanguageSet) Declaration public Phoneme(string phonemeText, LanguageSet languages) Parameters Type Name Description System.String phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(StringBuilder, LanguageSet) Declaration public Phoneme(StringBuilder phonemeText, LanguageSet languages) Parameters Type Name Description System.Text.StringBuilder phonemeText LanguageSet languages Fields | Improve this Doc View Source COMPARER Declaration public static readonly IComparer<Phoneme> COMPARER Field Value Type Description System.Collections.Generic.IComparer < Phoneme > Properties | Improve this Doc View Source Languages Declaration public LanguageSet Languages { get; } Property Value Type Description LanguageSet | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme > Methods | Improve this Doc View Source Append(String) Declaration public Phoneme Append(string str) Parameters Type Name Description System.String str Returns Type Description Phoneme | Improve this Doc View Source GetPhonemeText() Declaration public string GetPhonemeText() Returns Type Description System.String | Improve this Doc View Source Join(Phoneme) Declaration [Obsolete(\"since 1.9\")] public Phoneme Join(Phoneme right) Parameters Type Name Description Phoneme right Returns Type Description Phoneme Implements IPhonemeExpr"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html",
    "title": "Class PhonemeList | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhonemeList Inheritance System.Object PhonemeList Implements IPhonemeExpr 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class PhonemeList : IPhonemeExpr Constructors | Improve this Doc View Source PhonemeList(IList<Phoneme>) Declaration public PhonemeList(IList<Phoneme> phonemes) Parameters Type Name Description System.Collections.Generic.IList < Phoneme > phonemes Properties | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme > Implements IPhonemeExpr"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html",
    "title": "Class PhoneticEngine | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhoneticEngine Converts words into potential phonetic representations. Inheritance System.Object PhoneticEngine 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticEngine Remarks This is a two-stage process. Firstly, the word is converted into a phonetic representation that takes into account the likely source language. Next, this phonetic representation is converted into a pan-European 'average' representation, allowing comparison between different versions of essentially the same word from different languages. This class is intentionally immutable and thread-safe. If you wish to alter the settings for a PhoneticEngine, you must make a new one with the updated settings. Ported from phoneticengine.php since 1.6 Constructors | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean) Generates a new, fully-configured phonetic engine. Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean, Int32) Generates a new, fully-configured phonetic engine. since 1.7 Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat, int maxPhonemes) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. System.Int32 maxPhonemes The maximum number of phonemes that will be handled. Properties | Improve this Doc View Source IsConcat Gets if multiple phonetic encodings are concatenated or if just the first one is kept. Returns true if multiple phonetic encodings are returned, false if just the first is. Declaration public virtual bool IsConcat { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Lang Gets the Lang language guessing rules being used. Declaration public virtual Lang Lang { get; } Property Value Type Description Lang | Improve this Doc View Source MaxPhonemes Gets the maximum number of phonemes the engine will calculate for a given input. since 1.7 Declaration public virtual int MaxPhonemes { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NameType Gets the NameType being used. Declaration public virtual NameType NameType { get; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets the RuleType being used. Declaration public virtual RuleType RuleType { get; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Encodes a string to its phonetic representation. Declaration public virtual string Encode(string input) Parameters Type Name Description System.String input The string to encode. Returns Type Description System.String The encoding of the input. | Improve this Doc View Source Encode(String, LanguageSet) Encodes an input string into an output phonetic representation, given a set of possible origin languages. Declaration public virtual string Encode(string input, LanguageSet languageSet) Parameters Type Name Description System.String input String to phoneticise; a string with dashes or spaces separating each word. LanguageSet languageSet Returns Type Description System.String A phonetic representation of the input; a string containing '-'-separated phonetic representations of the input."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html",
    "title": "Class Rule | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Rule A phoneme rule. Inheritance System.Object Rule 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Rule Remarks Rules have a pattern, left context, right context, output phoneme, set of languages for which they apply and a logical flag indicating if all languages must be in play. A rule matches if: the pattern matches at the current position the string up until the beginning of the pattern matches the left context the string from the end of the pattern matches the right context logical is ALL and all languages are in scope; or logical is any other value and at least one language is in scope Rules are typically generated by parsing rules resources. In normal use, there will be no need for the user to explicitly construct their own. Rules are immutable and thread-safe. Rules resources Rules are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm. NameType RuleType [language].txt The format of these resources is the following: Rules: whitespace separated, double-quoted strings. There should be 4 columns to each row, and these will be interpreted as: pattern left context right context phoneme End-of-line comments: Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments: Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines: All blank lines will be skipped. since 1.6 Constructors | Improve this Doc View Source Rule(String, String, String, IPhonemeExpr) Creates a new rule. Declaration public Rule(string pattern, string lContext, string rContext, IPhonemeExpr phoneme) Parameters Type Name Description System.String pattern The pattern. System.String lContext The left context. System.String rContext The right context. IPhonemeExpr phoneme The resulting phoneme. Fields | Improve this Doc View Source ALL Declaration public const string ALL = \"ALL\" Field Value Type Description System.String | Improve this Doc View Source ALL_STRINGS_RMATCHER Declaration public static readonly IRPattern ALL_STRINGS_RMATCHER Field Value Type Description IRPattern Properties | Improve this Doc View Source LContext Gets the left context pattern. This is a regular expression that must match to the left of the pattern. Declaration public virtual IRPattern LContext { get; } Property Value Type Description IRPattern | Improve this Doc View Source Pattern Gets the pattern. This is a string-literal that must exactly match. Declaration public virtual string Pattern { get; } Property Value Type Description System.String | Improve this Doc View Source Phoneme Gets the phoneme. If the rule matches, this is the phoneme associated with the pattern match. Declaration public virtual IPhonemeExpr Phoneme { get; } Property Value Type Description IPhonemeExpr | Improve this Doc View Source RContext Gets the right context pattern. This is a regular expression that must match to the right of the pattern. Declaration public virtual IRPattern RContext { get; } Property Value Type Description IRPattern Methods | Improve this Doc View Source GetInstance(NameType, RuleType, LanguageSet) Gets rules for a combination of name type, rule type and languages. Declaration public static IList<Rule> GetInstance(NameType nameType, RuleType rt, LanguageSet langs) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. LanguageSet langs The set of languages to consider. Returns Type Description System.Collections.Generic.IList < Rule > A list of Rule s that apply. | Improve this Doc View Source GetInstance(NameType, RuleType, String) Gets rules for a combination of name type, rule type and a single language. Declaration public static IList<Rule> GetInstance(NameType nameType, RuleType rt, string lang) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. System.String lang The language to consider. Returns Type Description System.Collections.Generic.IList < Rule > A list of Rule s that apply. | Improve this Doc View Source GetInstanceMap(NameType, RuleType, LanguageSet) Gets rules for a combination of name type, rule type and languages. since 1.9 Declaration public static IDictionary<string, IList<Rule>> GetInstanceMap(NameType nameType, RuleType rt, LanguageSet langs) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. LanguageSet langs The set of languages to consider. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < Rule >> A map containing all Rule s that apply, grouped by the first character of the rule pattern. | Improve this Doc View Source GetInstanceMap(NameType, RuleType, String) Gets rules for a combination of name type, rule type and a single language. since 1.9 Declaration public static IDictionary<string, IList<Rule>> GetInstanceMap(NameType nameType, RuleType rt, string lang) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. System.String lang The language to consider. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < Rule >> A map containing all Rule s that apply, grouped by the first character of the rule pattern. | Improve this Doc View Source PatternAndContextMatches(ICharSequence, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(ICharSequence input, int i) Parameters Type Name Description J2N.Text.ICharSequence input The input J2N.Text.ICharSequence . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(String, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(string input, int i) Parameters Type Name Description System.String input The input System.String . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(StringBuilder, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(StringBuilder input, int i) Parameters Type Name Description System.Text.StringBuilder input The input System.Text.StringBuilder . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html",
    "title": "Enum RuleType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum RuleType Types of rule. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum RuleType Fields Name Description APPROX Approximate rules, which will lead to the largest number of phonetic interpretations. EXACT Exact rules, which will lead to a minimum number of phonetic interpretations. RULES For internal use only. Please use APPROX or EXACT . Extension Methods RuleTypeExtensions.GetName()"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html",
    "title": "Class RuleTypeExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RuleTypeExtensions Inheritance System.Object RuleTypeExtensions 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.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class RuleTypeExtensions Methods | Improve this Doc View Source GetName(RuleType) Gets the rule name. Declaration public static string GetName(this RuleType ruleType) Parameters Type Name Description RuleType ruleType The RuleType . Returns Type Description System.String The rule name."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html",
    "title": "Class SomeLanguages | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SomeLanguages Some languages, explicitly enumerated. Inheritance System.Object LanguageSet SomeLanguages Inherited Members LanguageSet.From(ISet<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) Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class SomeLanguages : LanguageSet Properties | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsEmpty | Improve this Doc View Source IsSingleton Declaration public override bool IsSingleton { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsSingleton Methods | Improve this Doc View Source Contains(String) Declaration public override bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean Overrides LanguageSet.Contains(String) | Improve this Doc View Source GetAny() Declaration public override string GetAny() Returns Type Description System.String Overrides LanguageSet.GetAny() | Improve this Doc View Source GetLanguages() Declaration public ISet<string> GetLanguages() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public override LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet Overrides LanguageSet.RestrictTo(LanguageSet) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html",
    "title": "Class Caverphone1 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Inheritance System.Object AbstractCaverphone Caverphone1 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone1 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html",
    "title": "Class Caverphone2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. Inheritance System.Object AbstractCaverphone Caverphone2 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone2 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone 2.0 value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html",
    "title": "Class ColognePhonetic | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ColognePhonetic Encodes a string into a Cologne Phonetic value. Inheritance System.Object ColognePhonetic Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class ColognePhonetic : IStringEncoder Remarks Implements the KÖlner Phonetik (Cologne Phonetic) algorithm issued by Hans Joachim Postel in 1969. The KÖlner Phonetik is a phonetic algorithm which is optimized for the German language. It is related to the well-known soundex algorithm. Algorithm Step 1: After preprocessing (conversion to upper case, transcription of germanic umlauts , removal of non alphabetical characters) the letters of the supplied text are replaced by their phonetic code according to the following table. LetterContextCode A, E, I, J, O, U, Y0 H- B1 Pnot before H1 D, Tnot before C, S, Z2 F, V, W3 Pbefore H3 G, K, Q4 Ct onset before A, H, K, L, O, Q, R, U, X OR before A, H, K, O, Q, U, X except after S, Z4 Xnot after C, K, Q48 L5 M, N6 R7 S, Z8 Cafter S, Z OR at onset except before A, H, K, L, O, Q, R, U, X OR not before A, H, K, O, Q, U, X 8 D, Tbefore C, S, Z8 Xafter C, K, Q8 (Source: Wikipedia (de): KÖlner Phonetik -- Buchstabencodes ) Example: \"MÜller-LÜdenscheidt\" => \"MULLERLUDENSCHEIDT\" => \"6005507500206880022\" Step 2: Collapse of all multiple consecutive code digits. Example: \"6005507500206880022\" => \"6050750206802\" Step 3: Removal of all codes \"0\" except at the beginning. This means that two or more identical consecutive digits can occur if they occur after removing the \"0\" digits. Example: \"6050750206802\" => \"65752682\" This class is thread-safe. See: Wikipedia (de): Kölner Phonetik (in German) since 1.5 Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string text) Parameters Type Name Description System.String text Returns Type Description System.String | Improve this Doc View Source GetColognePhonetic(String) Implements the Kölner Phonetik algorithm. In contrast to the initial description of the algorithm, this implementation does the encoding in one pass. Declaration public virtual string GetColognePhonetic(string text) Parameters Type Name Description System.String text Returns Type Description System.String The corresponding encoding according to the Kölner Phonetik algorithm | Improve this Doc View Source IsEncodeEqual(String, String) Declaration public virtual bool IsEncodeEqual(string text1, string text2) Parameters Type Name Description System.String text1 System.String text2 Returns Type Description System.Boolean Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html",
    "title": "Class DaitchMokotoffSoundex | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. Inheritance System.Object DaitchMokotoffSoundex Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DaitchMokotoffSoundex : IStringEncoder Remarks The Daitch-Mokotoff Soundex algorithm is a refinement of the Russel and American Soundex algorithms, yielding greater accuracy in matching especially Slavish and Yiddish surnames with similar pronunciation but differences in spelling. The main differences compared to the other soundex variants are: coded names are 6 digits long the initial character of the name is coded rules to encoded multi-character n-grams multiple possible encodings for the same name (branching) This implementation supports branching, depending on the used method: Encode(String) branching disabled, only the first code will be returned GetSoundex(String) branching enabled, all codes will be returned, separated by '|' Note: this implementation has additional branching rules compared to the original description of the algorithm. The rules can be customized by overriding the default rules contained in the resource file Lucene.Net.Analysis.Phonetic.Language.dmrules.txt . This class is thread-safe. See: Wikipedia - Daitch-Mokotoff Soundex See: Avotaynu - Soundexing and Genealogy since 1.10 Constructors | Improve this Doc View Source DaitchMokotoffSoundex() Creates a new instance with ASCII-folding enabled. Declaration public DaitchMokotoffSoundex() | Improve this Doc View Source DaitchMokotoffSoundex(Boolean) Creates a new instance. With ASCII-folding enabled, certain accented characters will be transformed to equivalent ASCII characters, e.g. è -> e. Declaration public DaitchMokotoffSoundex(bool folding) Parameters Type Name Description System.Boolean folding If ASCII-folding shall be performed before encoding. Methods | Improve this Doc View Source Encode(String) Encodes a string using the Daitch-Mokotoff soundex algorithm without branching. Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A DM Soundex code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. See Also GetSoundex(String) | Improve this Doc View Source GetSoundex(String) Encodes a string using the Daitch-Mokotoff soundex algorithm with branching. In case a string is encoded into multiple codes (see branching rules), the result will contain all codes, separated by '|'. Example: the name \"AUERBACH\" is encoded as both 097400 097500 Thus the result will be \"097400|097500\". Declaration public virtual string GetSoundex(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A string containing a set of DM Soundex codes corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. Implements IStringEncoder See Also Soundex"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html",
    "title": "Class DoubleMetaphone.DoubleMetaphoneResult | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. Inheritance System.Object DoubleMetaphone.DoubleMetaphoneResult 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneResult Constructors | Improve this Doc View Source DoubleMetaphoneResult(Int32) Declaration public DoubleMetaphoneResult(int maxLength) Parameters Type Name Description System.Int32 maxLength Properties | Improve this Doc View Source Alternate Declaration public virtual string Alternate { get; } Property Value Type Description System.String | Improve this Doc View Source IsComplete Declaration public virtual bool IsComplete { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Primary Declaration public virtual string Primary { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Append(Char) Declaration public virtual void Append(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Append(Char, Char) Declaration public virtual void Append(char primary, char alternate) Parameters Type Name Description System.Char primary System.Char alternate | Improve this Doc View Source Append(String) Declaration public virtual void Append(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Append(String, String) Declaration public virtual void Append(string primary, string alternate) Parameters Type Name Description System.String primary System.String alternate | Improve this Doc View Source AppendAlternate(Char) Declaration public virtual void AppendAlternate(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendAlternate(String) Declaration public virtual void AppendAlternate(string value) Parameters Type Name Description System.String value | Improve this Doc View Source AppendPrimary(Char) Declaration public virtual void AppendPrimary(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendPrimary(String) Declaration public virtual void AppendPrimary(string value) Parameters Type Name Description System.String value"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html",
    "title": "Class DoubleMetaphone | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone Inheritance System.Object DoubleMetaphone Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphone : IStringEncoder Constructors | Improve this Doc View Source DoubleMetaphone() Creates an instance of this DoubleMetaphone encoder Declaration public DoubleMetaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets the maxCodeLen. Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CharAt(String, Int32) Gets the character at index index if available, otherwise it returns System.Char.MinValue so that there is some sort of a default. Declaration protected virtual char CharAt(string value, int index) Parameters Type Name Description System.String value System.Int32 index Returns Type Description System.Char | Improve this Doc View Source Contains(String, Int32, Int32, String[]) Determines whether value contains any of the criteria starting at index start and matching up to length length . Declaration protected static bool Contains(string value, int start, int length, params string[] criteria) Parameters Type Name Description System.String value System.Int32 start System.Int32 length System.String [] criteria Returns Type Description System.Boolean | Improve this Doc View Source Encode(String) Encode the value using DoubleMetaphone. Declaration public virtual string Encode(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String) Encode a value with Double Metaphone. Declaration public virtual string GetDoubleMetaphone(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String, Boolean) Encode a value with Double Metaphone, optionally using the alternate encoding. Declaration public virtual string GetDoubleMetaphone(string value, bool alternate) Parameters Type Name Description System.String value String to encode. System.Boolean alternate Use alternate encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String) Check if the Double Metaphone values of two System.String values are equal. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2) Parameters Type Name Description System.String value1 The left-hand side of the encoded System.String.Equals(System.Object) . System.String value2 The right-hand side of the encoded System.String.Equals(System.Object) . Returns Type Description System.Boolean true if the encoded System.String s are equal; false otherwise. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String, Boolean) Check if the Double Metaphone values of two System.String values are equal, optionally using the alternate value. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2, bool alternate) Parameters Type Name Description System.String value1 The left-hand side of the encoded System.String.Equals(System.Object) . System.String value2 The right-hand side of the encoded System.String.Equals(System.Object) . System.Boolean alternate Use the alternate value if true . Returns Type Description System.Boolean true if the encoded System.String s are equal; false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic.Language Classes AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. ColognePhonetic Encodes a string into a Cologne Phonetic value. DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Interfaces IStringEncoder Defines common encoding methods for System.String encoders."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html",
    "title": "Interface IStringEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IStringEncoder Defines common encoding methods for System.String encoders. Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a System.String and returns a System.String . Declaration string Encode(string source) Parameters Type Name Description System.String source the System.String to encode Returns Type Description System.String the encoded System.String"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html",
    "title": "Class MatchRatingApproachEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Inheritance System.Object MatchRatingApproachEncoder Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class MatchRatingApproachEncoder : IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a string using the Match Rating Approach (MRA) algorithm. Declaration public string Encode(string name) Parameters Type Name Description System.String name String to encode. Returns Type Description System.String The MRA code corresponding to the string supplied. | Improve this Doc View Source IsEncodeEquals(String, String) Determines if two names are homophonous via Match Rating Approach (MRA) algorithm. It should be noted that the strings are cleaned in the same way as Encode(String) . Declaration public virtual bool IsEncodeEquals(string name1, string name2) Parameters Type Name Description System.String name1 First of the 2 strings (names) to compare. System.String name2 Second of the 2 names to compare. Returns Type Description System.Boolean true if the encodings are identical false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Metaphone.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Metaphone.html",
    "title": "Class Metaphone | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Inheritance System.Object Metaphone Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Metaphone : IStringEncoder Constructors | Improve this Doc View Source Metaphone() Creates an instance of the Metaphone encoder Declaration public Metaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen . Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Encode(String) Encodes a string using the Metaphone algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str String to encode. Returns Type Description System.String The metaphone code corresponding to the string supplied. | Improve this Doc View Source GetMetaphone(String) Find the metaphone value of a string. This is similar to the soundex algorithm, but better at finding similar sounding words. All input is converted to upper case. Limitations: Input format is expected to be a single ASCII word with only characters in the A - Z range, no punctuation or numbers. Declaration public virtual string GetMetaphone(string txt) Parameters Type Name Description System.String txt String to find the metaphone code for. Returns Type Description System.String A metaphone code corresponding to the string supplied. | Improve this Doc View Source IsMetaphoneEqual(String, String) Tests is the metaphones of two strings are identical. Declaration public virtual bool IsMetaphoneEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the metaphones of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Nysiis.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Nysiis.html",
    "title": "Class Nysiis | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. Inheritance System.Object Nysiis Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Nysiis : IStringEncoder Remarks NYSIIS features an accuracy increase of 2.7% over the traditional Soundex algorithm. Algorithm description: Transcode first characters of name MAC -> MCC KN -> NN K -> C PH -> FF PF -> FF SCH -> SSS Transcode last characters of name EE, IE -> Y DT,RT,RD,NT,ND -> D First character of key = first character of name Transcode remaining characters by following these rules, incrementing by one character each time EV -> AF else A,E,I,O,U -> A Q -> G Z -> S M -> N KN -> N else K -> C SCH -> SSS PH -> FF H -> If previous or next is nonvowel, previous W -> If previous is vowel, previous Add current to key if current != last key character If last character is S, remove it If last characters are AY, replace with Y If last character is A, remove it Collapse all strings of repeated characters Add original first character of name as first character of key This class is immutable and thread-safe. See: NYSIIS on Wikipedia See: NYSIIS on dropby.com since 1.7 Constructors | Improve this Doc View Source Nysiis() Creates an instance of the Nysiis encoder with strict mode (original form), i.e. encoded strings have a maximum length of 6. Declaration public Nysiis() | Improve this Doc View Source Nysiis(Boolean) Create an instance of the Nysiis encoder with the specified strict mode: true :encoded strings have a maximum length of 6 false :encoded strings may have arbitrary length Declaration public Nysiis(bool strict) Parameters Type Name Description System.Boolean strict The strict mode. Properties | Improve this Doc View Source IsStrict Indicates the strict mode for this Nysiis encoder. true if the encoder is configured for strict mode, false otherwise. Declaration public virtual bool IsStrict { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Encode(String) Encodes a string using the NYSIIS algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Nysiis code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. | Improve this Doc View Source GetNysiis(String) Retrieves the NYSIIS code for a given string. Declaration public virtual string GetNysiis(string str) Parameters Type Name Description System.String str String to encode using the NYSIIS algorithm. Returns Type Description System.String A NYSIIS code for the string supplied. Implements IStringEncoder See Also Soundex"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html",
    "title": "Class RefinedSoundex | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Inheritance System.Object RefinedSoundex Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class RefinedSoundex : IStringEncoder Constructors | Improve this Doc View Source RefinedSoundex() Creates an instance of the RefinedSoundex object using the default US English mapping. Declaration public RefinedSoundex() | Improve this Doc View Source RefinedSoundex(Char[]) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source RefinedSoundex(String) Creates a refined Soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. Fields | Improve this Doc View Source US_ENGLISH This static variable contains an instance of the RefinedSoundex using the US_ENGLISH mapping. Declaration public static readonly RefinedSoundex US_ENGLISH Field Value Type Description RefinedSoundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING since 1.4 Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String Methods | Improve this Doc View Source Difference(String, String) Returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 to the length of the shortest encoded string: 0 indicates little or no similarity, and 4 out of 4 (for example) indicates strong similarity or identical values. For refined Soundex, the return value can be greater than 4. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to to the length of the shortest encoded string. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the refined soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. | Improve this Doc View Source GetSoundex(String) Retrieves the Refined Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Refined Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Soundex.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Soundex.html",
    "title": "Class Soundex | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Inheritance System.Object Soundex Implements IStringEncoder 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.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Soundex : IStringEncoder Constructors | Improve this Doc View Source Soundex() Creates an instance using Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING . Declaration public Soundex() See Also Soundex(Char[]) Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source Soundex(Char[]) Creates a soundex instance using the given mapping. This constructor can be used to provide an internationalized mapping for a non-Western character set. Every letter of the alphabet is \"mapped\" to a numerical value. This char array holds the values to which each letter is mapped. This implementation contains a default map for US_ENGLISH . If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. Declaration public Soundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. since 1.4 Declaration public Soundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String, Boolean) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. since 1.11 Declaration public Soundex(string mapping, bool specialCaseHW) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. System.Boolean specialCaseHW if true, then Fields | Improve this Doc View Source SILENT_MARKER The marker character used to indicate a silent (ignored) character. These are ignored except when they appear as the first character. Note: the US_ENGLISH_MAPPING_STRING does not use this mechanism because changing it might break existing code. Mappings that don't contain a silent marker code are treated as though H and W are silent. To override this, use the Soundex(String, Boolean) constructor. since 1.11 Declaration public static readonly char SILENT_MARKER Field Value Type Description System.Char | Improve this Doc View Source US_ENGLISH An instance of Soundex using the US_ENGLISH_MAPPING mapping. This treats H and W as silent letters. Apart from when they appear as the first letter, they are ignored. They don't act as separators between duplicate codes. Declaration public static readonly Soundex US_ENGLISH Field Value Type Description Soundex See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING US_ENGLISH_MAPPING_STRING | Improve this Doc View Source US_ENGLISH_GENEALOGY An instance of Soundex using the mapping as per the Genealogy site: http://www.genealogy.com/articles/research/00000060.html This treats vowels (AEIOUY), H and W as silent letters. Such letters are ignored (after the first) and do not act as separators when dropping duplicate codes. The codes for consonants are otherwise the same as for US_ENGLISH_MAPPING_STRING and US_ENGLISH_SIMPLIFIED . since 1.11 Declaration public static readonly Soundex US_ENGLISH_GENEALOGY Field Value Type Description Soundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING This is a default mapping of the 26 letters used in US English. A value of 0 for a letter position means do not encode, but treat as a separator when it occurs between consonants with the same code. (This constant is provided as both an implementation convenience and to allow documentation to pick up the value for the constant values page.) Note that letters H and W are treated specially. They are ignored (after the first letter) and don't act as separators between consonants with the same code. Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source US_ENGLISH_SIMPLIFIED An instance of Soundex using the Simplified Soundex mapping, as described here: http://west-penwith.org.uk/misc/soundex.htm This treats H and W the same as vowels (AEIOUY). Such letters aren't encoded (after the first), but they do act as separators when dropping duplicate codes. The mapping is otherwise the same as for US_ENGLISH . since 1.11 Declaration public static readonly Soundex US_ENGLISH_SIMPLIFIED Field Value Type Description Soundex Properties | Improve this Doc View Source MaxLength Gets or Sets the maxLength. Standard Soundex Declaration [Obsolete(\"This feature is not needed since the encoding size must be constant. Will be removed in 2.0.\")] public virtual int MaxLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Difference(String, String) Encodes the strings and returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 through 4: 0 indicates little or no similarity, and 4 indicates strong similarity or identical values. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to 4. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. | Improve this Doc View Source GetSoundex(String) Retrieves the Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilter.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilter.html",
    "title": "Class PhoneticFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhoneticFilter Create tokens for phonetic matches. See the Language namespace. Inheritance System.Object AttributeSource TokenStream TokenFilter PhoneticFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class PhoneticFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PhoneticFilter(TokenStream, IStringEncoder, Boolean) Creates a PhoneticFilter with the specified encoder, and either adding encoded forms as synonyms ( inject=true ) or replacing them. Declaration public PhoneticFilter(TokenStream input, IStringEncoder encoder, bool inject) Parameters Type Name Description TokenStream input IStringEncoder encoder System.Boolean inject Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html",
    "title": "Class PhoneticFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhoneticFilterFactory Factory for PhoneticFilter . Create tokens based on phonetic encoders from the Language namespace. This takes one required argument, \"encoder\", and the rest are optional: encoder required, one of \"DoubleMetaphone\", \"Metaphone\", \"Soundex\", \"RefinedSoundex\", \"Caverphone\" (v2.0), or \"ColognePhonetic\" (case insensitive). If encoder isn't one of these, it'll be resolved as a class name either by itself if it already contains a '.' or otherwise as in the same package as these others. inject (default=true) add tokens to the stream with the offset=0 maxCodeLength The maximum length of the phonetic codes, as defined by the encoder. If an encoder doesn't support this then specifying this is an error. <fieldType name=\"text_phonetic\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PhoneticFilterFactory\" encoder=\"DoubleMetaphone\" inject=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PhoneticFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source PhoneticFilterFactory(IDictionary<String, String>) Creates a new PhoneticFilterFactory . Declaration public PhoneticFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source ENCODER parameter name: either a short name or a full class name Declaration public static readonly string ENCODER Field Value Type Description System.String | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetEncoder() Must be thread-safe. Declaration protected virtual IStringEncoder GetEncoder() Returns Type Description IStringEncoder | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware See Also PhoneticFilter"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.AnalyzerProfile.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.AnalyzerProfile.html",
    "title": "Class AnalyzerProfile | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzerProfile Manages analysis data configuration for SmartChineseAnalyzer SmartChineseAnalyzer has a built-in dictionary and stopword list out-of-box. NOTE: To use an alternate dicationary than the built-in one, put the \"bigramdict.dct\" and \"coredict.dct\" files in a subdirectory of your application named \"analysis-data\". This subdirectory can be placed in any directory up to and including the root directory (if the OS permission allows). To place the files in an alternate location, set an environment variable named \"analysis.data.dir\" with the name of the directory the \"bigramdict.dct\" and \"coredict.dct\" files can be located within. The default \"bigramdict.dct\" and \"coredict.dct\" files can be found at: https://issues.apache.org/jira/browse/LUCENE-1629 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AnalyzerProfile 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.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class AnalyzerProfile Fields | Improve this Doc View Source ANALYSIS_DATA_DIR Global indicating the configured analysis data directory Declaration public static string ANALYSIS_DATA_DIR Field Value Type Description System.String"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.CharType.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.CharType.html",
    "title": "Enum CharType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum CharType Internal SmartChineseAnalyzer character type constants. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public enum CharType Fields Name Description DELIMITER Punctuation Characters DIGIT Numeric Digits FULLWIDTH_DIGIT Full-Width alphanumeric characters FULLWIDTH_LETTER Full-Width letters HANZI Han Ideographs LETTER Letters OTHER Other (not fitting any of the other categories) SPACE_LIKE Characters that act as a space"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.HHMMSegmenter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.HHMMSegmenter.html",
    "title": "Class HHMMSegmenter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HHMMSegmenter Finds the optimal segmentation of a sentence into Chinese words This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HHMMSegmenter 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.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class HHMMSegmenter Methods | Improve this Doc View Source Process(String) Return a list of SegToken representing the best segmentation of a sentence Declaration public virtual IList<SegToken> Process(string sentence) Parameters Type Name Description System.String sentence input sentence Returns Type Description System.Collections.Generic.IList < SegToken > best segmentation as a IList{SegToken}"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.html",
    "title": "Namespace Lucene.Net.Analysis.Cn.Smart.Hhmm | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn.Smart.Hhmm <!-- 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. --> SmartChineseAnalyzer Hidden Markov Model package. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Classes HHMMSegmenter Finds the optimal segmentation of a sentence into Chinese words This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegToken SmartChineseAnalyzer internal token This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegTokenFilter Filters a SegToken by converting full-width latin to half-width, then lowercasing latin. Additionally, all punctuation is converted into COMMON_DELIMITER This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegToken.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegToken.html",
    "title": "Class SegToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegToken SmartChineseAnalyzer internal token This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegToken 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.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SegToken Constructors | Improve this Doc View Source SegToken(Char[], Int32, Int32, WordType, Int32) Create a new SegToken from a character array. Declaration public SegToken(char[] idArray, int start, int end, WordType wordType, int weight) Parameters Type Name Description System.Char [] idArray character array containing text System.Int32 start start offset of SegToken in original sentence System.Int32 end end offset of SegToken in original sentence WordType wordType WordType of the text System.Int32 weight word frequency Properties | Improve this Doc View Source CharArray Character array containing token text Declaration public char[] CharArray { get; set; } Property Value Type Description System.Char [] | Improve this Doc View Source EndOffset end offset into original sentence Declaration public int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Index during segmentation, this is used to store the index of the token in the token list table Declaration public int Index { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset start offset into original sentence Declaration public int StartOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Weight word frequency Declaration public int Weight { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source WordType WordType of the text Declaration public WordType WordType { get; set; } Property Value Type Description WordType Methods | Improve this Doc View Source Equals(Object) System.Object.Equals(System.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() System.Object.GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode()"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegTokenFilter.html",
    "title": "Class SegTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegTokenFilter Filters a SegToken by converting full-width latin to half-width, then lowercasing latin. Additionally, all punctuation is converted into COMMON_DELIMITER This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegTokenFilter 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.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SegTokenFilter Methods | Improve this Doc View Source Filter(SegToken) Filter an input SegToken Full-width latin will be converted to half-width, then all latin will be lowercased. All punctuation is converted into COMMON_DELIMITER Declaration public virtual SegToken Filter(SegToken token) Parameters Type Name Description SegToken token Input SegToken . Returns Type Description SegToken Normalized SegToken ."
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizer.html",
    "title": "Class HMMChineseTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HMMChineseTokenizer Tokenizer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase HMMChineseTokenizer Implements System.IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class HMMChineseTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source HMMChineseTokenizer(AttributeSource.AttributeFactory, TextReader) Creates a new HMMChineseTokenizer , supplying the AttributeSource.AttributeFactory Declaration public HMMChineseTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader | Improve this Doc View Source HMMChineseTokenizer(TextReader) Creates a new HMMChineseTokenizer Declaration public HMMChineseTokenizer(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides SegmentingTokenizerBase.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizerFactory.html",
    "title": "Class HMMChineseTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HMMChineseTokenizerFactory Factory for HMMChineseTokenizer Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenizerFactory HMMChineseTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class HMMChineseTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source HMMChineseTokenizerFactory(IDictionary<String, String>) Creates a new HMMChineseTokenizerFactory Declaration public HMMChineseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.html",
    "title": "Namespace Lucene.Net.Analysis.Cn.Smart | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn.Smart <!-- 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. --> Analyzer for Simplified Chinese, which indexes words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Three analyzers are provided for Chinese, each of which treats Chinese text in a different way. * StandardAnalyzer: Index unigrams (individual Chinese characters) as a token. * CJKAnalyzer (in the analyzers/cjk package): Index bigrams (overlapping groups of two adjacent Chinese characters) as tokens. * SmartChineseAnalyzer (in this package): Index words (attempt to segment Chinese text into words) as tokens. Example phrase： \"我是中国人\" 1. StandardAnalyzer: 我－是－中－国－人 2. CJKAnalyzer: 我是－是中－中国－国人 3. SmartChineseAnalyzer: 我－是－中国－人 Classes AnalyzerProfile Manages analysis data configuration for SmartChineseAnalyzer SmartChineseAnalyzer has a built-in dictionary and stopword list out-of-box. NOTE: To use an alternate dicationary than the built-in one, put the \"bigramdict.dct\" and \"coredict.dct\" files in a subdirectory of your application named \"analysis-data\". This subdirectory can be placed in any directory up to and including the root directory (if the OS permission allows). To place the files in an alternate location, set an environment variable named \"analysis.data.dir\" with the name of the directory the \"bigramdict.dct\" and \"coredict.dct\" files can be located within. The default \"bigramdict.dct\" and \"coredict.dct\" files can be found at: https://issues.apache.org/jira/browse/LUCENE-1629 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk HMMChineseTokenizer Tokenizer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. HMMChineseTokenizerFactory Factory for HMMChineseTokenizer Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk SentenceTokenizer Tokenizes input text into sentences. The output tokens can then be broken into words with WordTokenFilter This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseAnalyzer SmartChineseAnalyzer is an analyzer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Segmentation is based upon the Hidden Markov Model . A large training corpus was used to calculate Chinese word frequency probability. This analyzer requires a dictionary to provide statistical data. SmartChineseAnalyzer has an included dictionary out-of-box. The included dictionary data is from ICTCLAS1.0 . Thanks to ICTCLAS for their hard work, and for contributing the data under the Apache 2 License! This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseSentenceTokenizerFactory Factory for the SmartChineseAnalyzer SentenceTokenizer This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseWordTokenFilterFactory Factory for the SmartChineseAnalyzer WordTokenFilter Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Utility SmartChineseAnalyzer utility constants and methods This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordTokenFilter A TokenFilter that breaks sentences into words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums CharType Internal SmartChineseAnalyzer character type constants. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordType Internal SmartChineseAnalyzer token type constants This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SentenceTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SentenceTokenizer.html",
    "title": "Class SentenceTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SentenceTokenizer Tokenizes input text into sentences. The output tokens can then be broken into words with WordTokenFilter This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer SentenceTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizer instead\")] public sealed class SentenceTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source SentenceTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public SentenceTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader | Improve this Doc View Source SentenceTokenizer(TextReader) Declaration public SentenceTokenizer(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseAnalyzer.html",
    "title": "Class SmartChineseAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SmartChineseAnalyzer SmartChineseAnalyzer is an analyzer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Segmentation is based upon the Hidden Markov Model . A large training corpus was used to calculate Chinese word frequency probability. This analyzer requires a dictionary to provide statistical data. SmartChineseAnalyzer has an included dictionary out-of-box. The included dictionary data is from ICTCLAS1.0 . Thanks to ICTCLAS for their hard work, and for contributing the data under the Apache 2 License! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Analyzer SmartChineseAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class SmartChineseAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion) Create a new SmartChineseAnalyzer , using the default stopword list. Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion, CharArraySet) Create a new SmartChineseAnalyzer , using the provided CharArraySet of stopwords. Note: the set should include punctuation, unless you want to index punctuation! Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopWords CharArraySet of stopwords to use. | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion, Boolean) Create a new SmartChineseAnalyzer , optionally using the default stopword list. The included default stopword list is simply a list of punctuation. If you do not use this list, punctuation will not be removed from the text! Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion, bool useDefaultStopWords) Parameters Type Name Description LuceneVersion matchVersion System.Boolean useDefaultStopWords true to use the default stopword list. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetDefaultStopSet() Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet GetDefaultStopSet() Returns Type Description CharArraySet An unmodifiable instance of the default stop-words set. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseSentenceTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseSentenceTokenizerFactory.html",
    "title": "Class SmartChineseSentenceTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SmartChineseSentenceTokenizerFactory Factory for the SmartChineseAnalyzer SentenceTokenizer This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenizerFactory SmartChineseSentenceTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizerFactory instead\")] public class SmartChineseSentenceTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source SmartChineseSentenceTokenizerFactory(IDictionary<String, String>) Creates a new SmartChineseSentenceTokenizerFactory Declaration public SmartChineseSentenceTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseWordTokenFilterFactory.html",
    "title": "Class SmartChineseWordTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SmartChineseWordTokenFilterFactory Factory for the SmartChineseAnalyzer WordTokenFilter Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SmartChineseWordTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizerFactory instead\")] public class SmartChineseWordTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SmartChineseWordTokenFilterFactory(IDictionary<String, String>) Creates a new SmartChineseWordTokenFilterFactory Declaration public SmartChineseWordTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Utility.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Utility.html",
    "title": "Class Utility | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Utility SmartChineseAnalyzer utility constants and methods This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Utility 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.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class Utility Fields | Improve this Doc View Source COMMON_DELIMITER Delimiters will be filtered to this character by SegTokenFilter Declaration public static readonly char[] COMMON_DELIMITER Field Value Type Description System.Char [] | Improve this Doc View Source END_CHAR_ARRAY Declaration public static readonly char[] END_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source MAX_FREQUENCE Maximum bigram frequency (used in the smoothing function). Declaration public static readonly int MAX_FREQUENCE Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER_CHAR_ARRAY Declaration public static readonly char[] NUMBER_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source SPACES Space-like characters that need to be skipped: such as space, tab, newline, carriage return. Declaration public static readonly string SPACES Field Value Type Description System.String | Improve this Doc View Source START_CHAR_ARRAY Declaration public static readonly char[] START_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source STRING_CHAR_ARRAY Declaration public static readonly char[] STRING_CHAR_ARRAY Field Value Type Description System.Char [] Methods | Improve this Doc View Source CompareArray(Char[], Int32, Char[], Int32) Compare two arrays starting at the specified offsets. Declaration public static int CompareArray(char[] larray, int lstartIndex, char[] rarray, int rstartIndex) Parameters Type Name Description System.Char [] larray left array System.Int32 lstartIndex start offset into larray System.Char [] rarray right array System.Int32 rstartIndex start offset into rarray Returns Type Description System.Int32 0 if the arrays are equal，1 if larray > rarray , -1 if larray < rarray | Improve this Doc View Source CompareArrayByPrefix(Char[], Int32, Char[], Int32) Compare two arrays, starting at the specified offsets, but treating shortArray as a prefix to longArray . As long as shortArray is a prefix of longArray , return 0. Otherwise, behave as CompareArray(Char[], Int32, Char[], Int32) . Declaration public static int CompareArrayByPrefix(char[] shortArray, int shortIndex, char[] longArray, int longIndex) Parameters Type Name Description System.Char [] shortArray prefix array System.Int32 shortIndex offset into shortArray System.Char [] longArray long array (word) System.Int32 longIndex offset into longArray Returns Type Description System.Int32 0 if shortArray is a prefix of longArray , otherwise act as CompareArray(Char[], Int32, Char[], Int32) . | Improve this Doc View Source GetCharType(Char) Return the internal CharType constant of a given character. Declaration public static CharType GetCharType(char ch) Parameters Type Name Description System.Char ch input character Returns Type Description CharType Constant from CharType describing the character type. See Also CharType"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordTokenFilter.html",
    "title": "Class WordTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WordTokenFilter A TokenFilter that breaks sentences into words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter WordTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizer instead.\")] public sealed class WordTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source WordTokenFilter(TokenStream) Construct a new WordTokenFilter . Declaration public WordTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input TokenStream of sentences. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordType.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordType.html",
    "title": "Enum WordType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum WordType Internal SmartChineseAnalyzer token type constants This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public enum WordType Fields Name Description CHINESE_WORD Chinese Word DELIMITER Punctuation Symbol FULLWIDTH_NUMBER Full-Width Alphanumeric FULLWIDTH_STRING Full-Width String NUMBER ASCII Alphanumeric SENTENCE_BEGIN Start of a Sentence SENTENCE_END End of a Sentence STRING ASCII String"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Cell.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Cell.html",
    "title": "Class Cell | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Cell A Cell is a portion of a Trie . Inheritance System.Object Cell 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) Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Cell Methods | Improve this Doc View Source ToString() Return a string containing this Cell 's attributes. Declaration public override string ToString() Returns Type Description System.String a string representation of this Cell Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Compile.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Compile.html",
    "title": "Class Compile | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Compile The Compile class is used to compile a stemmer table. Inheritance System.Object Compile 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Compile Methods | Improve this Doc View Source Main(String[]) Entry point to the Compile application. This program takes any number of arguments: the first is the name of the desired stemming algorithm to use (a list is available in the package description) , all of the rest should be the path or paths to a file or files containing a stemmer table to compile. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args the command line arguments"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Diff.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Diff.html",
    "title": "Class Diff | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Diff The Diff object generates a patch string. A patch string is actually a command to a stemmer telling it how to reduce a word to its root. For example, to reduce the word teacher to its root teach the patch string Db would be generated. This command tells the stemmer to delete the last 2 characters from the word teacher to reach the stem (the patch commands are applied starting from the last character in order to save Inheritance System.Object Diff 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Diff Constructors | Improve this Doc View Source Diff() Constructor for the Diff object. Declaration public Diff() | Improve this Doc View Source Diff(Int32, Int32, Int32, Int32) Constructor for the Diff object Declaration public Diff(int ins, int del, int rep, int noop) Parameters Type Name Description System.Int32 ins Description of the Parameter System.Int32 del Description of the Parameter System.Int32 rep Description of the Parameter System.Int32 noop Description of the Parameter Methods | Improve this Doc View Source Apply(StringBuilder, String) Apply the given patch string diff to the given string dest Declaration public static void Apply(StringBuilder dest, string diff) Parameters Type Name Description System.Text.StringBuilder dest Destination string System.String diff Patch string | Improve this Doc View Source Exec(String, String) Construct a patch string that transforms a to b. Declaration public string Exec(string a, string b) Parameters Type Name Description System.String a 1st string System.String b 2nd string Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.DiffIt.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.DiffIt.html",
    "title": "Class DiffIt | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DiffIt The DiffIt class is a means generate patch commands from an already prepared stemmer table. Inheritance System.Object DiffIt 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class DiffIt Methods | Improve this Doc View Source Main(String[]) Entry point to the DiffIt application. This application takes one argument, the path to a file containing a stemmer table. The program reads the file and generates the patch commands for the stems. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args the path to a file containing a stemmer table"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Gener.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Gener.html",
    "title": "Class Gener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Gener The Gener object helps in the discarding of nodes which break the reduction effort and defend the structure against large reductions. Inheritance System.Object Reduce Gener 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Gener : Reduce Constructors | Improve this Doc View Source Gener() Constructor for the Gener object. Declaration public Gener() Methods | Improve this Doc View Source Eat(Row, Int32[]) Test whether the given Row of Cells in a Trie should be included in an optimized Trie. Declaration public bool Eat(Row in, int[] remap) Parameters Type Name Description Row in the Row to test System.Int32 [] remap Description of the Parameter Returns Type Description System.Boolean true if the Row should remain; otherwise, false | Improve this Doc View Source Optimize(Trie) Return a Trie with infrequent values occurring in the given Trie removed. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimize Returns Type Description Trie a new optimized Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.html",
    "title": "Namespace Egothor.Stemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Egothor.Stemmer <!-- 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. --> Egothor stemmer API. Classes Cell A Cell is a portion of a Trie . Compile The Compile class is used to compile a stemmer table. Diff The Diff object generates a patch string. A patch string is actually a command to a stemmer telling it how to reduce a word to its root. For example, to reduce the word teacher to its root teach the patch string Db would be generated. This command tells the stemmer to delete the last 2 characters from the word teacher to reach the stem (the patch commands are applied starting from the last character in order to save DiffIt The DiffIt class is a means generate patch commands from an already prepared stemmer table. Gener The Gener object helps in the discarding of nodes which break the reduction effort and defend the structure against large reductions. Lift The Lift class is a data structure that is a variation of a Patricia trie. Lift's raison d'etre is to implement reduction of the trie via the Lift-Up method., which makes the data structure less liable to overstemming. MultiTrie The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands individually (each command by itself). MultiTrie2 The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands broken into their constituent parts, as a MultiTrie does, but the commands are delimited by the skip command. Optimizer The Optimizer class is a Trie that will be reduced (have empty rows removed). The reduction will be made by joining two rows where the first is a subset of the second. Optimizer2 The Optimizer class is a Trie that will be reduced (have empty rows removed). This is the result of allowing a joining of rows when there is no collision between non- null values in the rows. Information loss, resulting in the stemmer not being able to recognize words (as in Optimizer), is curtailed, allowing the stemmer to recognize words for which the original trie was built. Use of this class allows the stemmer to be self-teaching. Reduce The Reduce object is used to remove gaps in a Trie which stores a dictionary. Row The Row class represents a row in a matrix representation of a Trie . Trie A Trie is used to store a dictionary of words and their stems. Actually, what is stored are words with their respective patch commands. A trie can be termed forward (keys read from left to right) or backward (keys read from right to left). This property will vary depending on the language for which a Trie is constructed."
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Lift.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Lift.html",
    "title": "Class Lift | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lift The Lift class is a data structure that is a variation of a Patricia trie. Lift's raison d'etre is to implement reduction of the trie via the Lift-Up method., which makes the data structure less liable to overstemming. Inheritance System.Object Reduce Lift 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Lift : Reduce Constructors | Improve this Doc View Source Lift(Boolean) Constructor for the Lift object. Declaration public Lift(bool changeSkip) Parameters Type Name Description System.Boolean changeSkip when set to true , comparison of two Cells takes a skip command into account Methods | Improve this Doc View Source LiftUp(Row, IList<Row>) Reduce the trie using Lift-Up reduction. The Lift-Up reduction propagates all leaf-values (patch commands), where possible, to higher levels which are closer to the root of the trie. Declaration public void LiftUp(Row in, IList<Row> nodes) Parameters Type Name Description Row in the Row to consider when optimizing System.Collections.Generic.IList < Row > nodes contains the patch commands | Improve this Doc View Source Optimize(Trie) Optimize (eliminate rows with no content) the given Trie and return the reduced Trie. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimized Returns Type Description Trie the reduced Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie.html",
    "title": "Class MultiTrie | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTrie The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands individually (each command by itself). Inheritance System.Object Trie MultiTrie MultiTrie2 Inherited Members Trie.GetAll(String) Trie.GetCells() Trie.GetCellsPnt() Trie.GetCellsVal() 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class MultiTrie : Trie Constructors | Improve this Doc View Source MultiTrie(IDataInput) Constructor for the MultiTrie object. Declaration public MultiTrie(IDataInput is) Parameters Type Name Description J2N.IO.IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source MultiTrie(Boolean) Constructor for the MultiTrie object Declaration public MultiTrie(bool forward) Parameters Type Name Description System.Boolean forward set to true if the elements should be read left to right Fields | Improve this Doc View Source m_tries Declaration protected List<Trie> m_tries Field Value Type Description System.Collections.Generic.List < Trie > Methods | Improve this Doc View Source Add(String, String) Add an element to this structure consisting of the given key and patch command. This method will return without executing if the cmd parameter's length is 0. Declaration public override void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command Overrides Trie.Add(String, String) | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public override string GetFully(string key) Parameters Type Name Description System.String key the key to the cell holding the desired element Returns Type Description System.String the element Overrides Trie.GetFully(String) | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path belonging to the given key. Declaration public override string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the element that is stored as last on a path Overrides Trie.GetLastOnPath(String) | Improve this Doc View Source PrintInfo(TextWriter, String) Print the given prefix and the position(s) in the Trie where it appears. Declaration public override void PrintInfo(TextWriter out, string prefix) Parameters Type Name Description System.IO.TextWriter out System.String prefix the desired prefix Overrides Trie.PrintInfo(TextWriter, String) | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie . Declaration public override Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie the newly reduced Trie Overrides Trie.Reduce(Reduce) | Improve this Doc View Source Store(IDataOutput) Write this data structure to the given output stream. Declaration public override void Store(IDataOutput os) Parameters Type Name Description J2N.IO.IDataOutput os the output stream Overrides Trie.Store(IDataOutput) Exceptions Type Condition System.IO.IOException if an I/O error occurs"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie2.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie2.html",
    "title": "Class MultiTrie2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTrie2 The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands broken into their constituent parts, as a MultiTrie does, but the commands are delimited by the skip command. Inheritance System.Object Trie MultiTrie MultiTrie2 Inherited Members MultiTrie.m_tries MultiTrie.PrintInfo(TextWriter, String) Trie.GetAll(String) Trie.GetCells() Trie.GetCellsPnt() Trie.GetCellsVal() 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class MultiTrie2 : MultiTrie Constructors | Improve this Doc View Source MultiTrie2(IDataInput) Constructor for the MultiTrie object. Declaration public MultiTrie2(IDataInput is) Parameters Type Name Description J2N.IO.IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source MultiTrie2(Boolean) Constructor for the MultiTrie2 object Declaration public MultiTrie2(bool forward) Parameters Type Name Description System.Boolean forward set to true if the elements should be read left to right Methods | Improve this Doc View Source Add(String, String) Add an element to this structure consisting of the given key and patch command. This method will return without executing if the cmd parameter's length is 0. Declaration public override void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command Overrides MultiTrie.Add(String, String) | Improve this Doc View Source Decompose(String) Break the given patch command into its constituent pieces. The pieces are delimited by NOOP commands. Declaration public virtual string[] Decompose(string cmd) Parameters Type Name Description System.String cmd the patch command Returns Type Description System.String [] an array containing the pieces of the command | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public override string GetFully(string key) Parameters Type Name Description System.String key the key to the cell holding the desired element Returns Type Description System.String the element Overrides MultiTrie.GetFully(String) | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path belonging to the given key. Declaration public override string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the element that is stored as last on a path Overrides MultiTrie.GetLastOnPath(String) | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie. Declaration public override Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie the newly reduced Trie Overrides MultiTrie.Reduce(Reduce) | Improve this Doc View Source Store(IDataOutput) Write this data structure to the given output stream. Declaration public override void Store(IDataOutput os) Parameters Type Name Description J2N.IO.IDataOutput os the output stream Overrides MultiTrie.Store(IDataOutput) Exceptions Type Condition System.IO.IOException if an I/O error occurs"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer.html",
    "title": "Class Optimizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Optimizer The Optimizer class is a Trie that will be reduced (have empty rows removed). The reduction will be made by joining two rows where the first is a subset of the second. Inheritance System.Object Reduce Optimizer Optimizer2 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Optimizer : Reduce Constructors | Improve this Doc View Source Optimizer() Constructor for the Optimizer object. Declaration public Optimizer() Methods | Improve this Doc View Source Merge(Cell, Cell) Merge the given Cell s and return the resulting Cell . Declaration public virtual Cell Merge(Cell m, Cell e) Parameters Type Name Description Cell m the master Cell Cell e the existing Cell Returns Type Description Cell the resulting Cell , or null if the operation cannot be realized | Improve this Doc View Source Merge(Row, Row) Merge the given rows and return the resulting Row . Declaration public Row Merge(Row master, Row existing) Parameters Type Name Description Row master the master Row Row existing the existing Row Returns Type Description Row the resulting Row , or null if the operation cannot be realized | Improve this Doc View Source Optimize(Trie) Optimize (remove empty rows) from the given Trie and return the resulting Trie. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to consolidate Returns Type Description Trie the newly consolidated Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer2.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer2.html",
    "title": "Class Optimizer2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Optimizer2 The Optimizer class is a Trie that will be reduced (have empty rows removed). This is the result of allowing a joining of rows when there is no collision between non- null values in the rows. Information loss, resulting in the stemmer not being able to recognize words (as in Optimizer), is curtailed, allowing the stemmer to recognize words for which the original trie was built. Use of this class allows the stemmer to be self-teaching. Inheritance System.Object Reduce Optimizer Optimizer2 Inherited Members Optimizer.Optimize(Trie) Optimizer.Merge(Row, Row) 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Optimizer2 : Optimizer Constructors | Improve this Doc View Source Optimizer2() Constructor for the Optimizer2 object. Declaration public Optimizer2() Methods | Improve this Doc View Source Merge(Cell, Cell) Merge the given Cell s and return the resulting Cell . Declaration public override Cell Merge(Cell m, Cell e) Parameters Type Name Description Cell m the master Cell Cell e the existing Cell Returns Type Description Cell the resulting Cell , or null if the operation cannot be realized Overrides Optimizer.Merge(Cell, Cell)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Reduce.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Reduce.html",
    "title": "Class Reduce | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Reduce The Reduce object is used to remove gaps in a Trie which stores a dictionary. Inheritance System.Object Reduce Gener Lift Optimizer 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Reduce Constructors | Improve this Doc View Source Reduce() Constructor for the Reduce object. Declaration public Reduce() Methods | Improve this Doc View Source Optimize(Trie) Optimize (remove holes in the rows) the given Trie and return the restructured Trie . Declaration public virtual Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimize Returns Type Description Trie the restructured Trie"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Row.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Row.html",
    "title": "Class Row | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Row The Row class represents a row in a matrix representation of a Trie . Inheritance System.Object Row 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Row Constructors | Improve this Doc View Source Row() The default constructor for the Row object. Declaration public Row() | Improve this Doc View Source Row(Row) Construct a Row using the cells of the given Row . Declaration public Row(Row old) Parameters Type Name Description Row old the Row to copy | Improve this Doc View Source Row(IDataInput) Construct a Row object from input carried in via the given input stream. Declaration public Row(IDataInput is) Parameters Type Name Description J2N.IO.IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs Methods | Improve this Doc View Source GetCells() Return the number of cells in use. Declaration public int GetCells() Returns Type Description System.Int32 the number of cells in use | Improve this Doc View Source GetCellsPnt() Return the number of references (how many transitions) to other rows. Declaration public int GetCellsPnt() Returns Type Description System.Int32 the number of references | Improve this Doc View Source GetCellsVal() Return the number of patch commands saved in this Row. Declaration public int GetCellsVal() Returns Type Description System.Int32 the number of patch commands | Improve this Doc View Source GetCmd(Char) Return the command in the Cell associated with the given System.Char . Declaration public int GetCmd(char way) Parameters Type Name Description System.Char way the System.Char associated with the Cell holding the desired command Returns Type Description System.Int32 the command | Improve this Doc View Source GetCnt(Char) Return the number of patch commands were in the Cell associated with the given System.Char before the Trie containing this Row was reduced. Declaration public int GetCnt(char way) Parameters Type Name Description System.Char way the System.Char associated with the desired Cell Returns Type Description System.Int32 the number of patch commands before reduction | Improve this Doc View Source GetRef(Char) Return the reference to the next Row in the Cell associated with the given System.Char . Declaration public int GetRef(char way) Parameters Type Name Description System.Char way the System.Char associated with the desired Cell Returns Type Description System.Int32 the reference, or -1 if the Cell is null | Improve this Doc View Source Print(TextWriter) Write the contents of this Row to the System.IO.TextWriter . Declaration public virtual void Print(TextWriter out) Parameters Type Name Description System.IO.TextWriter out | Improve this Doc View Source SetCmd(Char, Int32) Set the command in the Cell of the given System.Char to the given System.Int32 . Declaration public void SetCmd(char way, int cmd) Parameters Type Name Description System.Char way the System.Char defining the Cell System.Int32 cmd the new command | Improve this Doc View Source SetRef(Char, Int32) Set the reference to the next row in the Cell of the given System.Char to the given System.Int32 . Declaration public void SetRef(char way, int ref) Parameters Type Name Description System.Char way the System.Char defining the Cell System.Int32 ref The new ref value | Improve this Doc View Source Store(IDataOutput) Write the contents of this Row to the given output stream. Declaration public virtual void Store(IDataOutput os) Parameters Type Name Description J2N.IO.IDataOutput os the output stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source UniformCmd(Boolean) Return the number of identical Cell s (containing patch commands) in this Row. Declaration public int UniformCmd(bool eqSkip) Parameters Type Name Description System.Boolean eqSkip when set to false the removed patch commands are considered Returns Type Description System.Int32 the number of identical Cell s, or -1 if there are (at least) two different Cell s"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Trie.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Trie.html",
    "title": "Class Trie | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Trie A Trie is used to store a dictionary of words and their stems. Actually, what is stored are words with their respective patch commands. A trie can be termed forward (keys read from left to right) or backward (keys read from right to left). This property will vary depending on the language for which a Trie is constructed. Inheritance System.Object Trie MultiTrie 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 : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Trie Constructors | Improve this Doc View Source Trie(IDataInput) Constructor for the Trie object. Declaration public Trie(IDataInput is) Parameters Type Name Description J2N.IO.IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source Trie(Boolean) Constructor for the Trie object. Declaration public Trie(bool forward) Parameters Type Name Description System.Boolean forward set to true | Improve this Doc View Source Trie(Boolean, Int32, IList<String>, IList<Row>) Constructor for the Trie object. Declaration public Trie(bool forward, int root, IList<string> cmds, IList<Row> rows) Parameters Type Name Description System.Boolean forward true if read left to right, false if read right to left System.Int32 root index of the row that is the root node System.Collections.Generic.IList < System.String > cmds the patch commands to store System.Collections.Generic.IList < Row > rows a Vector of Vectors. Each inner Vector is a node of this Trie Methods | Improve this Doc View Source Add(String, String) Add the given key associated with the given patch command. If either parameter is null this method will return without executing. Declaration public virtual void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command | Improve this Doc View Source GetAll(String) Gets the all attribute of the Trie object Declaration public virtual string[] GetAll(string key) Parameters Type Name Description System.String key Description of the Parameter Returns Type Description System.String [] The all value | Improve this Doc View Source GetCells() Return the number of cells in this Trie object. Declaration public virtual int GetCells() Returns Type Description System.Int32 the number of cells | Improve this Doc View Source GetCellsPnt() Gets the cellsPnt attribute of the Trie object Declaration public virtual int GetCellsPnt() Returns Type Description System.Int32 The cellsPnt value | Improve this Doc View Source GetCellsVal() Gets the cellsVal attribute of the Trie object Declaration public virtual int GetCellsVal() Returns Type Description System.Int32 The cellsVal value | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public virtual string GetFully(string key) Parameters Type Name Description System.String key the key Returns Type Description System.String the associated element | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path associated with the given key. Declaration public virtual string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the last on path element | Improve this Doc View Source PrintInfo(TextWriter, String) writes debugging info to the printstream Declaration public virtual void PrintInfo(TextWriter out, string prefix) Parameters Type Name Description System.IO.TextWriter out System.String prefix | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie . Declaration public virtual Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie newly reduced Trie | Improve this Doc View Source Store(IDataOutput) Write this Trie to the given output stream. Declaration public virtual void Store(IDataOutput os) Parameters Type Name Description J2N.IO.IDataOutput os the output stream Exceptions Type Condition System.IO.IOException if an I/O error occurs"
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.html",
    "title": "Namespace Lucene.Net.Analysis.Pl | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pl <!-- 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. --> Analyzer for Polish. Classes PolishAnalyzer Analyzer for Polish."
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.PolishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.PolishAnalyzer.html",
    "title": "Class PolishAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PolishAnalyzer Analyzer for Polish. Inheritance System.Object Analyzer StopwordAnalyzerBase PolishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Pl Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public sealed class PolishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source PolishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PolishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source PolishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public PolishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source PolishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public PolishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STEMMER_FILE File containing default Polish stemmer table. Declaration public static readonly string DEFAULT_STEMMER_FILE Field Value Type Description System.String | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Polish stopwords. Declaration public static readonly string DEFAULT_STOPWORD_FILE Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. | Improve this Doc View Source DefaultTable Returns an unmodifiable instance of the default stemmer table. Declaration public static Trie DefaultTable { get; } Property Value Type Description Trie Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem excusion set is provided and StempelFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.html",
    "title": "Namespace Lucene.Net.Analysis.Stempel | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Stempel <!-- 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. --> Stempel - Algorithmic Stemmer for Polish Language Introduction A method for conflation of different inflected word forms is an important component of many Information Retrieval systems. It helps to improve the system's recall and can significantly reduce the index size. This is especially true for highly-inflectional languages like those from the Slavic language family (Czech, Slovak, Polish, Russian, Bulgarian, etc). This page describes a software package consisting of high-quality stemming tables for Polish, and a universal algorithmic stemmer, which operates using these tables. The stemmer code is taken virtually unchanged from the Egothor project . The software distribution includes stemmer tables prepared using an extensive corpus of Polish language (see details below). This work is available under Apache-style Open Source license - the stemmer code is covered by Egothor License, the tables and other additions are covered by Apache License 2.0. Both licenses allow to use the code in Open Source as well as commercial (closed source) projects. Terminology A short explanation is in order about the terminology used in this text. In the following sections I make a distinction between stem and lemma . Lemma is a base grammatical form (dictionary form, headword) of a word. Lemma is an existing, grammatically correct word in some human language. Stem on the other hand is just a unique token, not necessarily making any sense in any human language, but which can serve as a unique label instead of lemma for the same set of inflected forms. Quite often stem is referred to as a \"root\" of the word - which is incorrect and misleading (stems sometimes have very little to do with the linguistic root of a word, i.e. a pattern found in a word which is common to all inflected forms or within a family of languages). For an IR system stems are usually sufficient, for a morphological analysis system obviously lemmas are a must. In practice, various stemmers produce a mix of stems and lemmas, as is the case with the stemmer described here. Additionally, for some languages, which use suffix-based inflection rules many stemmers based on suffix-stripping will produce a large percentage of stems equivalent to lemmas. This is however not the case for languages with complex, irregular inflection rules (such as Slavic languages) - here simplistic suffix-stripping stemmers produce very poor results. Background Lemmatization is a process of finding the base, non-inflected form of a word. The result of lemmatization is a correct existing word, often in nominative case for nouns and infinitive form for verbs. A given inflected form may correspond to several lemmas (e.g. \"found\" -> find, found) - the correct choice depends on the context. Stemming is concerned mostly with finding a unique \"root\" of a word, which not necessarily results in any existing word or lemma. The quality of stemming is measured by the rate of collisions (overstemming - which causes words with different lemmas to be incorrectly conflated into one \"root\"), and the rate of superfluous word \"roots\" (understemming - which assigns several \"roots\" to words with the same lemma). Both stemmer and lemmatizer can be implemented in various ways. The two most common approaches are: dictionary-based: where the stemmer uses an extensive dictionary of morphological forms in order to find the corresponding stem or lemma algorithmic: where the stemmer uses an algorithm, based on general morphological properties of a given language plus a set of heuristic rules There are many existing and well-known implementations of stemmers for English (Porter, Lovins, Krovetz) and other European languages ( Snowball ). There are also good quality commercial lemmatizers for Polish. However, there is only one freely available Polish stemmer, implemented by Dawid Weiss , based on the \"ispell\" dictionary and Jan Daciuk's FSA package . That stemmer is dictionary-based. This means that even though it can achieve perfect accuracy for previously known word forms found in its dictionary, it completely fails in case of all other word forms. This deficiency is somewhat mitigated by the comprehensive dictionary distributed with this stemmer (so there is a high probability that most of the words in the input text will be found in the dictionary), however the problem still remains (please see the page above for more detailed description). The implementation described here uses an algorithmic method. This method and particular algorithm implementation are described in detail in [1][2]. The main advantage of algorithmic stemmers is their ability to process previously unseen word forms with high accuracy. This particular algorithm uses a set of transformation rules (patch commands), which describe how a word with a given pattern should be transformed to its stem. These rules are first learned from a training corpus. They don't cover all possible cases, so there is always some loss of precision/recall (which means that even the words from the training corpus are sometimes incorrectly stemmed). Algorithm and implementation The algorithm and its Java implementation is described in detail in the publications cited below. Here's just a short excerpt from [2]: \"The aim is separation of the stemmer execution code from the data structures [...]. In other words, a static algorithm configurable by data must be developed. The word transformations that happen in the stemmer must be then encoded to the data tables. The tacit input of our method is a sample set (a so-called dictionary) of words (as keys) and their stems. Each record can be equivalently stored as a key and the record of key's transformation to its respective stem. The transformation record is termed a patch command (P-command). It must be ensured that P-commands are universal, and that P-commands can transform any word to its stem. Our solution[6,8] is based on the Levenstein metric [10], which produces P-command as the minimum cost path in a directed graph. One can imagine the P-command as an algorithm for an operator (editor) that rewrites a string to another string. The operator can use these instructions (PP-command's): removal - deletes a sequence of characters starting at the current cursor position and moves the cursor to the next character. The length of this sequence is the parameter; insertion - inserts a character ch, without moving the cursor. The character ch is a parameter; substitution - rewrites a character at the current cursor position to the character ch and moves the cursor to the next character. The character ch is a parameter; no operation (NOOP) - skip a sequence of characters starting at the current cursor position. The length of this sequence is the parameter. The P-commands are applied from the end of a word (right to left). This assumption can reduce the set of P-command's, because the last NOOP, moving the cursor to the end of a string without any changes, need not be stored.\" Data structure used to keep the dictionary (words and their P-commands) is a trie. Several optimization steps are applied in turn to reduce and optimize the initial trie, by eliminating useless information and shortening the paths in the trie. Finally, in order to obtain a stem from the input word, the word is passed once through a matching path in the trie (applying at each node the P-commands stored there). The result is a word stem. Corpus (to be completed...) The following Polish corpora have been used: Polish dictionary from ispell distribution Wzbogacony korpus sÅ‚ownika frekwencyjnego The Bible (so called \"TysiÄ…clecia\") - unauthorized electronic version Analizator morfologiczny SAM v. 3.4 - this was used to recover lemmas missing from other texts This step was the most time-consuming - and it would probably be even more tedious and difficult if not for the help of Python . The source texts had to be brought to a common encoding (UTF-8) - some of them used quite ancient encodings like Mazovia or DHN - and then scripts were written to collect all lemmas and inflected forms from the source texts. In cases when the source text was not tagged, I used the SAM analyzer to produce lemmas. In cases of ambiguous lemmatization I decided to put references to inflected forms from all base forms. All grammatical categories were allowed to appear in the corpus, i.e. nouns, verbs, adjectives, numerals, and pronouns. The resulting corpus consisted of roughly 87,000+ inflection sets, i.e. each set consisted of one base form (lemma) and many inflected forms. However, because of the nature of the training method I restricted these sets to include only those where there were at least 4 inflected forms. Sets with 3 or less inflected forms were removed, so that the final corpus consisted of ~69,000 unique sets, which in turn contained ~1.5 mln inflected forms. Testing I tested the stemmer tables produced using the implementation described above. The following sections give some details about the testing setup. Testing procedure The testing procedure was as follows: the whole corpus of ~69,000 unique sets was shuffled, so that the input sets were in random order. the corpus was split into two parts - one with 30,000 sets (Part 1), the other with ~39,000 sets (Part 2). Training samples were drawn in sequential order from the Part 1. Since the sets were already randomized, the training samples were also randomized, but this procedure ensured that each larger training sample contained all smaller samples. Part 2 was used for testing. Note: this means that the testing run used only words previously unseen during the training phase. This is the worst scenario, because it means that stemmer must extrapolate the learned rules to unknown cases. This also means that in a real-life case (where the input is a mix between known and unknown words) the F-measure of the stemmer will be even higher than in the table below. Test results The following table summarizes test results for varying sizes of training samples. The meaning of the table columns is described below: training sets: the number of training sets. One set consists of one lemma and at least 4 and up to ~80 inflected forms (including pre- and suffixed forms). testing forms: the number of testing forms. Only inflected forms were used in testing. stem OK: the number of cases when produced output was a correct (unique) stem. Note: quite often correct stems were also correct lemmas. lemma OK: the number of cases when produced output was a correct lemma. missing: the number of cases when stemmer was unable to provide any output. stem bad: the number of cases when produced output was a stem, but already in use identifying a different set. lemma bad: the number of cases when produced output was an incorrect lemma. Note: quite often in such case the output was a correct stem. table size: the size in bytes of the stemmer table. Training sets Testing forms Stem OK Lemma OK Missing Stem Bad Lemma Bad Table size [B] 100 1022985 842209 593632 172711 22331 256642 28438 200 1022985 862789 646488 153288 16306 223209 48660 500 1022985 885786 685009 130772 14856 207204 108798 700 1022985 909031 704609 107084 15442 211292 139291 1000 1022985 926079 725720 90117 14941 207148 183677 2000 1022985 942886 746641 73429 14903 202915 313516 5000 1022985 954721 759930 61476 14817 201579 640969 7000 1022985 956165 764033 60364 14620 198588 839347 10000 1022985 965427 775507 50797 14662 196681 1144537 12000 1022985 967664 782143 48722 14284 192120 1313508 15000 1022985 973188 788867 43247 14349 190871 1567902 17000 1022985 974203 791804 42319 14333 188862 1733957 20000 1022985 976234 791554 40058 14601 191373 1977615 I also measured the time to produce a stem (which involves traversing a trie, retrieving a patch command and applying the patch command to the input string). On a machine running Windows XP (Pentium 4, 1.7 GHz, JDK 1.4.2_03 HotSpot), for tables ranging in size from 1,000 to 20,000 cells, the time to produce a single stem varies between 5-10 microseconds. This means that the stemmer can process up to 200,000 words per second , an outstanding result when compared to other stemmers (Morfeusz - ~2,000 w/s, FormAN (MS Word analyzer) - ~1,000 w/s). The package contains a class org.getopt.stempel.Benchmark , which you can use to produce reports like the one below: --------- Stemmer benchmark report: ----------- Stemmer table: /res/tables/stemmer_2000.out Input file: ../test3.txt Number of runs: 3 RUN NUMBER: 1 2 3 Total input words 1378176 1378176 1378176 Missed output words 112 112 112 Time elapsed [ms] 6989 6940 6640 Hit rate percent 99.99% 99.99% 99.99% Miss rate percent 00.01% 00.01% 00.01% Words per second 197192 198584 207557 Time per word [us] 5.07 5.04 4.82 Summary The results of these tests are very encouraging. It seems that using the training corpus and the stemming algorithm described above results in a high-quality stemmer useful for most applications. Moreover, it can also be used as a better than average lemmatizer. Both the author of the implementation (Leo Galambos, <leo.galambos AT egothor DOT org>) and the author of this compilation (Andrzej Bialecki ) would appreciate any feedback and suggestions for further improvements. Bibliography Galambos, L.: Multilingual Stemmer in Web Environment, PhD Thesis, Faculty of Mathematics and Physics, Charles University in Prague, in press. Galambos, L.: Semi-automatic Stemmer Evaluation. International Intelligent Information Processing and Web Mining Conference, 2004, Zakopane, Poland. Galambos, L.: Lemmatizer for Document Information Retrieval Systems in JAVA. <http://www.informatik.uni-trier.de/%7Eley/db/conf/sofsem/sofsem2001.html#Galambos01> SOFSEM 2001, Piestany, Slovakia. Classes StempelFilter Transforms the token stream as per the stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! StempelPolishStemFilterFactory Factory for StempelFilter using a Polish stemming table. StempelStemmer Stemmer class is a convenient facade for other stemmer-related classes. The core stemming algorithm and its implementation is taken verbatim from the Egothor project ( www.egothor.org ). Even though the stemmer tables supplied in the distribution package are built for Polish language, there is nothing language-specific here."
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelFilter.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelFilter.html",
    "title": "Class StempelFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StempelFilter Transforms the token stream as per the stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! Inheritance System.Object AttributeSource TokenStream TokenFilter StempelFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public sealed class StempelFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StempelFilter(TokenStream, StempelStemmer) Create filter using the supplied stemming table. Declaration public StempelFilter(TokenStream in, StempelStemmer stemmer) Parameters Type Name Description TokenStream in input token stream StempelStemmer stemmer stemmer | Improve this Doc View Source StempelFilter(TokenStream, StempelStemmer, Int32) Create filter using the supplied stemming table. Declaration public StempelFilter(TokenStream in, StempelStemmer stemmer, int minLength) Parameters Type Name Description TokenStream in input token stream StempelStemmer stemmer stemmer System.Int32 minLength For performance reasons words shorter than minLength characters are not processed, but simply returned. Fields | Improve this Doc View Source DEFAULT_MIN_LENGTH Minimum length of input words to be processed. Shorter words are returned unchanged. Declaration public static readonly int DEFAULT_MIN_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Returns the next input Token , after being stemmed Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelPolishStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelPolishStemFilterFactory.html",
    "title": "Class StempelPolishStemFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StempelPolishStemFilterFactory Factory for StempelFilter using a Polish stemming table. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StempelPolishStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class StempelPolishStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source StempelPolishStemFilterFactory(IDictionary<String, String>) Creates a new StempelPolishStemFilterFactory Declaration public StempelPolishStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelStemmer.html",
    "title": "Class StempelStemmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StempelStemmer Stemmer class is a convenient facade for other stemmer-related classes. The core stemming algorithm and its implementation is taken verbatim from the Egothor project ( www.egothor.org ). Even though the stemmer tables supplied in the distribution package are built for Polish language, there is nothing language-specific here. Inheritance System.Object StempelStemmer 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.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class StempelStemmer Constructors | Improve this Doc View Source StempelStemmer(Trie) Create a Stemmer using pre-loaded stemmer table Declaration public StempelStemmer(Trie stemmer) Parameters Type Name Description Trie stemmer pre-loaded stemmer table | Improve this Doc View Source StempelStemmer(Stream) Create a Stemmer using selected stemmer table Declaration public StempelStemmer(Stream stemmerTable) Parameters Type Name Description System.IO.Stream stemmerTable stemmer table. Methods | Improve this Doc View Source Load(Stream) Load a stemmer table from an inputstream. Declaration public static Trie Load(Stream stemmerTable) Parameters Type Name Description System.IO.Stream stemmerTable Returns Type Description Trie | Improve this Doc View Source Stem(String) Stem a word. Declaration public StringBuilder Stem(string word) Parameters Type Name Description System.String word input word to be stemmed. Returns Type Description System.Text.StringBuilder stemmed word, or null if the stem could not be generated."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Benchmark.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Benchmark.html",
    "title": "Class Benchmark | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Benchmark Run the benchmark algorithm. Inheritance System.Object Benchmark 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.Benchmarks.ByTask Assembly : Lucene.Net.Benchmark.dll Syntax public class Benchmark Remarks Read algorithm. Run the algorithm. Things to be added/fixed in \"Benchmarking by tasks\": TODO - report into Excel and/or graphed view. TODO - perf comparison between Lucene releases over the years. TODO - perf report adequate to include in Lucene nightly build site? (so we can easily track performance changes.) TODO - add overall time control for repeated execution (vs. current by-count only). TODO - query maker that is based on index statistics. Constructors | Improve this Doc View Source Benchmark(TextReader) Declaration public Benchmark(TextReader algReader) Parameters Type Name Description System.IO.TextReader algReader Properties | Improve this Doc View Source Algorithm Returns the algorithm. Declaration public virtual Algorithm Algorithm { get; } Property Value Type Description Algorithm | Improve this Doc View Source RunData Returns the runData. Declaration public virtual PerfRunData RunData { get; } Property Value Type Description PerfRunData Methods | Improve this Doc View Source Exec(String[]) Utility: execute benchmark from command line. Declaration public static void Exec(string[] args) Parameters Type Name Description System.String [] args Single argument is expected: algorithm-file. | Improve this Doc View Source Execute() Execute this benchmark. Declaration public virtual void Execute() | Improve this Doc View Source Main(String[]) Run the benchmark algorithm. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args Benchmark config and algorithm files."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.AbstractQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.AbstractQueryMaker.html",
    "title": "Class AbstractQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractQueryMaker Abstract base query maker. Each query maker should just implement the PrepareQueries() method. Inheritance System.Object AbstractQueryMaker EnwikiQueryMaker FileBasedQueryMaker ReutersQueryMaker SimpleQueryMaker SpatialFileQueryMaker Implements IQueryMaker 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class AbstractQueryMaker : IQueryMaker Fields | Improve this Doc View Source m_config Declaration protected Config m_config Field Value Type Description Config | Improve this Doc View Source m_qnum Declaration protected int m_qnum Field Value Type Description System.Int32 | Improve this Doc View Source m_queries Declaration protected Query[] m_queries Field Value Type Description Query [] Methods | Improve this Doc View Source MakeQuery() Declaration public virtual Query MakeQuery() Returns Type Description Query | Improve this Doc View Source MakeQuery(Int32) Declaration public virtual Query MakeQuery(int size) Parameters Type Name Description System.Int32 size Returns Type Description Query See Also MakeQuery ( System.Int32 ) | Improve this Doc View Source NextQnum() Declaration protected virtual int NextQnum() Returns Type Description System.Int32 | Improve this Doc View Source PrepareQueries() Declaration protected abstract Query[] PrepareQueries() Returns Type Description Query [] | Improve this Doc View Source PrintQueries() Declaration public virtual string PrintQueries() Returns Type Description System.String | Improve this Doc View Source ResetInputs() Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public virtual void SetConfig(Config config) Parameters Type Name Description Config config Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentItemsSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentItemsSource.html",
    "title": "Class ContentItemsSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ContentItemsSource Base class for source of data for benchmarking. Inheritance System.Object ContentItemsSource ContentSource FacetSource 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ContentItemsSource : IDisposable Remarks Keeps track of various statistics, such as how many data items were generated, size in bytes etc. Supports the following configuration parameters: content.source.foreverspecifies whether to generate items forever ( default=true ). content.source.verbosespecifies whether messages should be output by the content source ( default=false ). content.source.encoding specifies which encoding to use when reading the files of that content source. Certain implementations may define a default value if this parameter is not specified. ( default=null ). content.source.log.step specifies for how many items a message should be logged. If set to 0 it means no logging should occur. NOTE: if verbose is set to false, logging should not occur even if logStep is not 0 ( default=0 ). Fields | Improve this Doc View Source m_encoding Declaration protected Encoding m_encoding Field Value Type Description System.Text.Encoding | Improve this Doc View Source m_forever Declaration protected bool m_forever Field Value Type Description System.Boolean | Improve this Doc View Source m_logStep Declaration protected int m_logStep Field Value Type Description System.Int32 | Improve this Doc View Source m_verbose Declaration protected bool m_verbose Field Value Type Description System.Boolean Properties | Improve this Doc View Source BytesCount Returns the number of bytes generated since last reset. Declaration public long BytesCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Config Declaration public Config Config { get; } Property Value Type Description Config | Improve this Doc View Source ItemsCount Returns the number of generated items since last reset. Declaration public int ItemsCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBytesCount Returns the total number of bytes that were generated by this source. Declaration public long TotalBytesCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalItemsCount Returns the total number of generated items. Declaration public int TotalItemsCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddBytes(Int64) update count of bytes generated by this source Declaration protected void AddBytes(long numBytes) Parameters Type Name Description System.Int64 numBytes | Improve this Doc View Source AddItem() update count of items generated by this source Declaration protected void AddItem() | Improve this Doc View Source CollectFiles(DirectoryInfo, IList<FileInfo>) A convenience method for collecting all the files of a content source from a given directory. The collected System.IO.FileInfo instances are stored in the given files . Declaration protected void CollectFiles(DirectoryInfo dir, IList<FileInfo> files) Parameters Type Name Description System.IO.DirectoryInfo dir System.Collections.Generic.IList < System.IO.FileInfo > files | Improve this Doc View Source Dispose() Called when reading from this content source is no longer required. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Called when reading from this content source is no longer required. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source PrintStatistics(String) Declaration public virtual void PrintStatistics(string itemsName) Parameters Type Name Description System.String itemsName | Improve this Doc View Source ResetInputs() Resets the input for this content source, so that the test would behave as if it was just started, input-wise. NOTE: the default implementation resets the number of bytes and items generated since the last reset, so it's important to call base.ResetInputs() in case you override this method. Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config) Sets the Config for this content source. If you override this method, you must call base.SetConfig(config) . Declaration public virtual void SetConfig(Config config) Parameters Type Name Description Config config | Improve this Doc View Source ShouldLog() Returns true whether it's time to log a message (depending on verbose and the number of items generated). Declaration protected bool ShouldLog() Returns Type Description System.Boolean Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentSource.html",
    "title": "Class ContentSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ContentSource Represents content from a specified source, such as TREC, Reuters etc. A ContentSource is responsible for creating DocData objects for its documents to be consumed by DocMaker . It also keeps track of various statistics, such as how many documents were generated, size in bytes etc. For supported configuration parameters see ContentItemsSource . Inheritance System.Object ContentItemsSource ContentSource DirContentSource EnwikiContentSource Int64ToEnglishContentSource LineDocSource ReutersContentSource SingleDocSource TrecContentSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.Dispose(Boolean) ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.ResetInputs() ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ContentSource : ContentItemsSource, IDisposable Methods | Improve this Doc View Source GetNextDocData(DocData) Returns the next DocData from the content source. Implementations must account for multi-threading, as multiple threads can call this method simultaneously. Declaration public abstract DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.html",
    "title": "Class DemoHTMLParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DemoHTMLParser Simple HTML Parser extracting title, meta tags, and body text that is based on NekoHTML . Inheritance System.Object DemoHTMLParser Implements IHTMLParser 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DemoHTMLParser : IHTMLParser Methods | Improve this Doc View Source Parse(DocData, String, Nullable<DateTime>, InputSource, TrecContentSource) Declaration public virtual DocData Parse(DocData docData, string name, DateTime? date, InputSource source, TrecContentSource trecSrc) Parameters Type Name Description DocData docData System.String name System.Nullable < System.DateTime > date InputSource source TrecContentSource trecSrc Returns Type Description DocData | Improve this Doc View Source Parse(DocData, String, Nullable<DateTime>, TextReader, TrecContentSource) Declaration public virtual DocData Parse(DocData docData, string name, DateTime? date, TextReader reader, TrecContentSource trecSrc) Parameters Type Name Description DocData docData System.String name System.Nullable < System.DateTime > date System.IO.TextReader reader TrecContentSource trecSrc Returns Type Description DocData Implements IHTMLParser"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.Parser.html",
    "title": "Class DemoHTMLParser.Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DemoHTMLParser.Parser The actual parser to read HTML documents. Inheritance System.Object DemoHTMLParser.Parser 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public sealed class Parser Constructors | Improve this Doc View Source Parser(InputSource) Declaration public Parser(InputSource source) Parameters Type Name Description InputSource source | Improve this Doc View Source Parser(TextReader) Declaration public Parser(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Properties | Improve this Doc View Source Body Declaration public string Body { get; } Property Value Type Description System.String | Improve this Doc View Source MetaTags Declaration public IDictionary<string, string> MetaTags { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Title Declaration public string Title { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.html",
    "title": "Class DirContentSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirContentSource A ContentSource using the Dir collection for its input. Supports the following configuration parameters (on top of ContentSource ): work.dirspecifies the working directory. Required if \"docs.dir\" denotes a relative path ( default=work ). docs.dirspecifies the directory the Dir collection. Can be set to a relative path if \"work.dir\" is also specified ( default=dir-out ). Inheritance System.Object ContentItemsSource ContentSource DirContentSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DirContentSource : ContentSource, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.Iterator.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.Iterator.html",
    "title": "Class DirContentSource.Iterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirContentSource.Iterator Iterator over the files in the directory. Inheritance System.Object DirContentSource.Iterator Implements System.Collections.Generic.IEnumerator < System.IO.FileInfo > System.Collections.IEnumerator 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class Iterator : IEnumerator<FileInfo>, IEnumerator, IDisposable Constructors | Improve this Doc View Source Iterator(DirectoryInfo) Declaration public Iterator(DirectoryInfo f) Parameters Type Name Description System.IO.DirectoryInfo f Properties | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Current Declaration public virtual FileInfo Current { get; } Property Value Type Description System.IO.FileInfo Methods | 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 MoveNext() Declaration public virtual bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public virtual void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocData.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocData.html",
    "title": "Class DocData | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocData Output of parsing (e.g. HTML parsing) of an input document. Inheritance System.Object DocData 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DocData Properties | Improve this Doc View Source Body Declaration public string Body { get; set; } Property Value Type Description System.String | Improve this Doc View Source Date Gets the date. If the ctor with System.DateTime was called, then the string returned is the output of DateToString(DateTime, DateTools.Resolution) . Otherwise it's the string passed to the other ctor. Declaration public virtual string Date { get; } Property Value Type Description System.String | Improve this Doc View Source ID Declaration public int ID { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Declaration public string Name { get; set; } Property Value Type Description System.String | Improve this Doc View Source Props Declaration public IDictionary<string, string> Props { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Title Declaration public string Title { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source SetDate(Nullable<DateTime>) Declaration public virtual void SetDate(DateTime? date) Parameters Type Name Description System.Nullable < System.DateTime > date | Improve this Doc View Source SetDate(String) Declaration public virtual void SetDate(string date) Parameters Type Name Description System.String date"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.DocState.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.DocState.html",
    "title": "Class DocMaker.DocState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocMaker.DocState Document state, supports reuse of field instances across documents (see reuseFields parameter). Inheritance System.Object DocMaker.DocState 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax protected class DocState Constructors | Improve this Doc View Source DocState(Boolean, FieldType, FieldType) Declaration public DocState(bool reuseFields, FieldType ft, FieldType bodyFt) Parameters Type Name Description System.Boolean reuseFields FieldType ft FieldType bodyFt"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.html",
    "title": "Class DocMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocMaker Creates Document objects. Uses a ContentSource to generate DocData objects. Inheritance System.Object DocMaker SpatialDocMaker 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DocMaker : IDisposable Remarks Supports the following parameters: content.sourcespecifies the ContentSource class to use (default SingleDocSource ). doc.storedspecifies whether fields should be stored (default false ). doc.body.storedspecifies whether the body field should be stored (default = doc.stored ). doc.tokenizedspecifies whether fields should be tokenized (default true ). doc.body.tokenizedspecifies whether the body field should be tokenized (default = doc.tokenized ). doc.tokenized.normsspecifies whether norms should be stored in the index or not. (default false ). doc.body.tokenized.norms specifies whether norms should be stored in the index for the body field. This can be set to true, while doc.tokenized.norms is set to false, to allow norms storing just for the body field. (default true ). doc.term.vectorspecifies whether term vectors should be stored for fields (default false ). doc.term.vector.positionsspecifies whether term vectors should be stored with positions (default false ). doc.term.vector.offsetsspecifies whether term vectors should be stored with offsets (default false ). doc.store.body.bytesspecifies whether to store the raw bytes of the document's content in the document (default false ). doc.reuse.fieldsspecifies whether Field and Document objects should be reused (default true ). doc.index.propsspecifies whether the properties returned by doc.random.id.limit if specified, docs will be assigned random IDs from 0 to this limit. This is useful with UpdateDoc for testing performance of UpdateDocument(Term, IEnumerable<IIndexableField>) . Props will be indexed. (default false ). Constructors | Improve this Doc View Source DocMaker() Declaration public DocMaker() Fields | Improve this Doc View Source BODY_FIELD Declaration public static readonly string BODY_FIELD Field Value Type Description System.String | Improve this Doc View Source BYTES_FIELD Declaration public static readonly string BYTES_FIELD Field Value Type Description System.String | Improve this Doc View Source DATE_FIELD Declaration public static readonly string DATE_FIELD Field Value Type Description System.String | Improve this Doc View Source DATE_MSEC_FIELD Declaration public static readonly string DATE_MSEC_FIELD Field Value Type Description System.String | Improve this Doc View Source ID_FIELD Declaration public static readonly string ID_FIELD Field Value Type Description System.String | Improve this Doc View Source m_bodyValType Declaration protected FieldType m_bodyValType Field Value Type Description FieldType | Improve this Doc View Source m_config Declaration protected Config m_config Field Value Type Description Config | Improve this Doc View Source m_indexProperties Declaration protected bool m_indexProperties Field Value Type Description System.Boolean | Improve this Doc View Source m_reuseFields Declaration protected bool m_reuseFields Field Value Type Description System.Boolean | Improve this Doc View Source m_source Declaration protected ContentSource m_source Field Value Type Description ContentSource | Improve this Doc View Source m_valType Declaration protected FieldType m_valType Field Value Type Description FieldType | Improve this Doc View Source NAME_FIELD Declaration public static readonly string NAME_FIELD Field Value Type Description System.String | Improve this Doc View Source TIME_SEC_FIELD Declaration public static readonly string TIME_SEC_FIELD Field Value Type Description System.String | Improve this Doc View Source TITLE_FIELD Declaration public static readonly string TITLE_FIELD Field Value Type Description System.String Methods | Improve this Doc View Source Dispose() Closes the DocMaker . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes the DocMaker . The base implementation closes the ContentSource , and it can be overridden to do more work (but make sure to call base.Dispose(bool) ). Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetDocState() Declaration protected virtual DocMaker.DocState GetDocState() Returns Type Description DocMaker.DocState | Improve this Doc View Source MakeDocument() Creates a Document object ready for indexing. This method uses the ContentSource to get the next document from the source, and creates a Document object from the returned fields. If reuseFields was set to true , it will reuse Document and Field instances. Declaration public virtual Document MakeDocument() Returns Type Description Document | Improve this Doc View Source MakeDocument(Int32) Same as MakeDocument() , only this method creates a document of the given size input by size . Declaration public virtual Document MakeDocument(int size) Parameters Type Name Description System.Int32 size Returns Type Description Document | Improve this Doc View Source ResetInputs() Reset inputs so that the test run would behave, input wise, as if it just started. Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config, ContentSource) Set the configuration parameters of this doc maker. Declaration public virtual void SetConfig(Config config, ContentSource source) Parameters Type Name Description Config config ContentSource source Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiContentSource.html",
    "title": "Class EnwikiContentSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnwikiContentSource A ContentSource which reads the English Wikipedia dump. You can read the .bz2 file directly (it will be decompressed on the fly). Config properties: keep.image.only.docsfalse|true (default true ). docs.file<path to the file> Inheritance System.Object ContentItemsSource ContentSource EnwikiContentSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class EnwikiContentSource : ContentSource, IDisposable Constructors | Improve this Doc View Source EnwikiContentSource() Declaration public EnwikiContentSource() Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source OpenInputStream() Open the input stream. Declaration protected virtual Stream OpenInputStream() Returns Type Description System.IO.Stream | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiQueryMaker.html",
    "title": "Class EnwikiQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnwikiQueryMaker A QueryMaker that uses common and uncommon actual Wikipedia queries for searching the English Wikipedia collection. 90 queries total. Inheritance System.Object AbstractQueryMaker EnwikiQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class EnwikiQueryMaker : AbstractQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FacetSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FacetSource.html",
    "title": "Class FacetSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FacetSource Source items for facets. For supported configuration parameters see ContentItemsSource . Inheritance System.Object ContentItemsSource FacetSource RandomFacetSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.Dispose(Boolean) ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class FacetSource : ContentItemsSource, IDisposable Methods | Improve this Doc View Source Configure(FacetsConfig) Declaration public abstract void Configure(FacetsConfig config) Parameters Type Name Description FacetsConfig config | Improve this Doc View Source GetNextFacets(IList<FacetField>) Fills the next facets content items in the given list. Implementations must account for multi-threading, as multiple threads can call this method simultaneously. Declaration public abstract void GetNextFacets(IList<FacetField> facets) Parameters Type Name Description System.Collections.Generic.IList < FacetField > facets | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FileBasedQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FileBasedQueryMaker.html",
    "title": "Class FileBasedQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FileBasedQueryMaker Create queries from a System.IO.FileStream . One per line, pass them through the QueryParser. Lines beginning with # are treated as comments. Inheritance System.Object AbstractQueryMaker FileBasedQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class FileBasedQueryMaker : AbstractQueryMaker, IQueryMaker Remarks File can be specified as a absolute, relative or resource. Two properties can be set: file.query.maker.file<Full path to file containing queries> file.query.maker.default.field<Name of default field - Default value is \"body\"> Example: file.query.maker.file=c:/myqueries.txt file.query.maker.default.field=body Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.GeonamesLineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.GeonamesLineParser.html",
    "title": "Class GeonamesLineParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GeonamesLineParser A line parser for Geonames.org data. See 'geoname' table . Requires SpatialDocMaker . Inheritance System.Object LineParser GeonamesLineParser Inherited Members LineParser.m_header 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class GeonamesLineParser : LineParser Constructors | Improve this Doc View Source GeonamesLineParser(String[]) This header will be ignored; the geonames format is fixed and doesn't have a header line. Declaration public GeonamesLineParser(string[] header) Parameters Type Name Description System.String [] header Methods | Improve this Doc View Source ParseLine(DocData, String) Declaration public override void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line Overrides LineParser.ParseLine(DocData, String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.HeaderLineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.HeaderLineParser.html",
    "title": "Class HeaderLineParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HeaderLineParser LineParser which sets field names and order by the header - any header - of the lines file. It is less efficient than SimpleLineParser but more powerful. Inheritance System.Object LineParser HeaderLineParser Inherited Members LineParser.m_header 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class HeaderLineParser : LineParser Constructors | Improve this Doc View Source HeaderLineParser(String[]) Declaration public HeaderLineParser(string[] header) Parameters Type Name Description System.String [] header Methods | Improve this Doc View Source ParseLine(DocData, String) Declaration public override void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line Overrides LineParser.ParseLine(DocData, String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Feeds | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Feeds <!-- 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. --> Sources for benchmark inputs: documents and queries. Classes AbstractQueryMaker Abstract base query maker. Each query maker should just implement the PrepareQueries() method. ContentItemsSource Base class for source of data for benchmarking. ContentSource Represents content from a specified source, such as TREC, Reuters etc. A ContentSource is responsible for creating DocData objects for its documents to be consumed by DocMaker . It also keeps track of various statistics, such as how many documents were generated, size in bytes etc. For supported configuration parameters see ContentItemsSource . DemoHTMLParser Simple HTML Parser extracting title, meta tags, and body text that is based on NekoHTML . DemoHTMLParser.Parser The actual parser to read HTML documents. DirContentSource A ContentSource using the Dir collection for its input. Supports the following configuration parameters (on top of ContentSource ): work.dirspecifies the working directory. Required if \"docs.dir\" denotes a relative path ( default=work ). docs.dirspecifies the directory the Dir collection. Can be set to a relative path if \"work.dir\" is also specified ( default=dir-out ). DirContentSource.Iterator Iterator over the files in the directory. DocData Output of parsing (e.g. HTML parsing) of an input document. DocMaker Creates Document objects. Uses a ContentSource to generate DocData objects. DocMaker.DocState Document state, supports reuse of field instances across documents (see reuseFields parameter). EnwikiContentSource A ContentSource which reads the English Wikipedia dump. You can read the .bz2 file directly (it will be decompressed on the fly). Config properties: keep.image.only.docsfalse|true (default true ). docs.file<path to the file> EnwikiQueryMaker A QueryMaker that uses common and uncommon actual Wikipedia queries for searching the English Wikipedia collection. 90 queries total. FacetSource Source items for facets. For supported configuration parameters see ContentItemsSource . FileBasedQueryMaker Create queries from a System.IO.FileStream . One per line, pass them through the QueryParser. Lines beginning with # are treated as comments. GeonamesLineParser A line parser for Geonames.org data. See 'geoname' table . Requires SpatialDocMaker . HeaderLineParser LineParser which sets field names and order by the header - any header - of the lines file. It is less efficient than SimpleLineParser but more powerful. Int64ToEnglishContentSource Creates documents whose content is a System.Int64 number starting from System.Int64.MinValue + 10 . Int64ToEnglishQueryMaker Creates queries whose content is a spelled-out System.Int64 number starting from System.Int64.MinValue + 10 . LineDocSource A ContentSource reading one line at a time as a Document from a single file. This saves IO cost (over DirContentSource) of recursing through a directory and opening a new file for every document. LineParser Reader of a single input line into DocData . NoMoreDataException Exception indicating there is no more data. Thrown by Docs Makers if doc.maker.forever is false and docs sources of that maker where exhausted. This is useful for iterating all document of a source, in case we don't know in advance how many docs there are. RandomFacetSource Simple implementation of a random facet source. ReutersContentSource A ContentSource reading from the Reuters collection. Config properties: work.dir path to the root of docs and indexes dirs (default work ). docs.dir path to the docs dir (default reuters-out ). ReutersQueryMaker A IQueryMaker that makes queries devised manually (by Grant Ingersoll) for searching in the Reuters collection. SimpleLineParser LineParser which ignores the header passed to its constructor and assumes simply that field names and their order are the same as in DEFAULT_FIELDS . SimpleQueryMaker A IQueryMaker that makes queries for a collection created using SingleDocSource . SimpleSloppyPhraseQueryMaker Create sloppy phrase queries for performance test, in an index created using simple doc maker. SingleDocSource Creates the same document each time GetNextDocData(DocData) is called. SortableSingleDocSource Adds fields appropriate for sorting: country, random_string and sort_field (int). Supports the following parameters: sort.rng defines the range for sort-by-int field (default 20000 ). rand.seed defines the seed to initialize Random with (default 13 ). SpatialDocMaker Indexes spatial data according to a configured SpatialStrategy with optional shape transformation via a configured IShapeConverter . The converter can turn points into circles and bounding boxes, in order to vary the type of indexing performance tests. Unless it's subclass-ed to do otherwise, this class configures a Spatial4n.Core.Context.SpatialContext , SpatialPrefixTree , and RecursivePrefixTreeStrategy . The Strategy is made available to a query maker via the static method GetSpatialStrategy(Int32) . See spatial.alg for a listing of spatial parameters, in particular those starting with \"spatial.\" and \"doc.spatial\". SpatialFileQueryMaker Reads spatial data from the body field docs from an internally created LineDocSource . It's parsed by Spatial4n.Core.Context.SpatialContext.ReadShapeFromWkt(System.String) and then further manipulated via a configurable IShapeConverter . When using point data, it's likely you'll want to configure the shape converter so that the query shapes actually cover a region. The queries are all created & cached in advance. This query maker works in conjunction with SpatialDocMaker . See spatial.alg for a listing of options, in particular the options starting with \"query.\". TrecContentSource Implements a ContentSource over the TREC collection. TrecDocParser Parser for trec doc content, invoked on doc text excluding <DOC> and <DOCNO> which are handled in TrecContentSource. Required to be stateless and hence thread safe. TrecFBISParser Parser for the FBIS docs in trec disks 4+5 collection format TrecFR94Parser Parser for the FR94 docs in trec disks 4+5 collection format TrecFTParser Parser for the FT docs in trec disks 4+5 collection format TrecGov2Parser Parser for the GOV2 collection format TrecLATimesParser Parser for the FT docs in trec disks 4+5 collection format TrecParserByPath Parser for trec docs which selects the parser to apply according to the source files path, defaulting to TrecGov2Parser . Interfaces IHTMLParser HTML Parsing Interface for test purposes. IQueryMaker Create queries for the test. IShapeConverter Converts one shape to another. Created by MakeShapeConverter(SpatialStrategy, Config, String) . Enums TrecDocParser.ParsePathType Types of trec parse paths,"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IHTMLParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IHTMLParser.html",
    "title": "Interface IHTMLParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IHTMLParser HTML Parsing Interface for test purposes. Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public interface IHTMLParser Methods | Improve this Doc View Source Parse(DocData, String, Nullable<DateTime>, TextReader, TrecContentSource) Parse the input TextReader and return DocData. The provided name, title, date are used for the result, unless when they're null, in which case an attempt is made to set them from the parsed data. Declaration DocData Parse(DocData docData, string name, DateTime? date, TextReader reader, TrecContentSource trecSrc) Parameters Type Name Description DocData docData Result reused. System.String name Name of the result doc data. System.Nullable < System.DateTime > date Date of the result doc data. If null, attempt to set by parsed data. System.IO.TextReader reader Reader of html text to parse. TrecContentSource trecSrc The TrecContentSource used to parse dates. Returns Type Description DocData Parsed doc data. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishContentSource.html",
    "title": "Class Int64ToEnglishContentSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64ToEnglishContentSource Creates documents whose content is a System.Int64 number starting from System.Int64.MinValue + 10 . Inheritance System.Object ContentItemsSource ContentSource Int64ToEnglishContentSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class Int64ToEnglishContentSource : ContentSource, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishQueryMaker.html",
    "title": "Class Int64ToEnglishQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64ToEnglishQueryMaker Creates queries whose content is a spelled-out System.Int64 number starting from System.Int64.MinValue + 10 . Inheritance System.Object Int64ToEnglishQueryMaker Implements IQueryMaker 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class Int64ToEnglishQueryMaker : IQueryMaker Fields | Improve this Doc View Source m_parser Declaration protected QueryParser m_parser Field Value Type Description QueryParser Methods | Improve this Doc View Source MakeQuery() Declaration public virtual Query MakeQuery() Returns Type Description Query | Improve this Doc View Source MakeQuery(Int32) Declaration public virtual Query MakeQuery(int size) Parameters Type Name Description System.Int32 size Returns Type Description Query | Improve this Doc View Source PrintQueries() Declaration public virtual string PrintQueries() Returns Type Description System.String | Improve this Doc View Source ResetInputs() Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public virtual void SetConfig(Config config) Parameters Type Name Description Config config Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IQueryMaker.html",
    "title": "Interface IQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IQueryMaker Create queries for the test. Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public interface IQueryMaker Methods | Improve this Doc View Source MakeQuery() Create the next query Declaration Query MakeQuery() Returns Type Description Query | Improve this Doc View Source MakeQuery(Int32) Create the next query, of the given size. Declaration Query MakeQuery(int size) Parameters Type Name Description System.Int32 size The size of the query - number of terms, etc. Returns Type Description Query Exceptions Type Condition System.Exception If cannot make the query, or if size > 0 was specified but this feature is not supported. | Improve this Doc View Source PrintQueries() Print the queries Declaration string PrintQueries() Returns Type Description System.String | Improve this Doc View Source ResetInputs() Reset inputs so that the test run would behave, input wise, as if it just started. Declaration void ResetInputs() | Improve this Doc View Source SetConfig(Config) Set the properties Declaration void SetConfig(Config config) Parameters Type Name Description Config config"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IShapeConverter.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IShapeConverter.html",
    "title": "Interface IShapeConverter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IShapeConverter Converts one shape to another. Created by MakeShapeConverter(SpatialStrategy, Config, String) . Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public interface IShapeConverter Methods | Improve this Doc View Source Convert(IShape) Declaration IShape Convert(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Spatial4n.Core.Shapes.IShape"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineDocSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineDocSource.html",
    "title": "Class LineDocSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LineDocSource A ContentSource reading one line at a time as a Document from a single file. This saves IO cost (over DirContentSource) of recursing through a directory and opening a new file for every document. Inheritance System.Object ContentItemsSource ContentSource LineDocSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class LineDocSource : ContentSource, IDisposable Remarks The expected format of each line is (arguments are separated by <TAB>): title, date, body . If a line is read in a different format, a System.Exception will be thrown. In general, you should use this content source for files that were created with WriteLineDocTask . Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineParser.html",
    "title": "Class LineParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LineParser Reader of a single input line into DocData . Inheritance System.Object LineParser GeonamesLineParser HeaderLineParser SimpleLineParser 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class LineParser Constructors | Improve this Doc View Source LineParser(String[]) Construct with the header Declaration public LineParser(string[] header) Parameters Type Name Description System.String [] header header line found in the input file, or null if none. Fields | Improve this Doc View Source m_header Declaration protected readonly string[] m_header Field Value Type Description System.String [] Methods | Improve this Doc View Source ParseLine(DocData, String) parse an input line and fill doc data appropriately Declaration public abstract void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.NoMoreDataException.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.NoMoreDataException.html",
    "title": "Class NoMoreDataException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoMoreDataException Exception indicating there is no more data. Thrown by Docs Makers if doc.maker.forever is false and docs sources of that maker where exhausted. This is useful for iterating all document of a source, in case we don't know in advance how many docs there are. Inheritance System.Object System.Exception NoMoreDataException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class NoMoreDataException : Exception, ISerializable Constructors | Improve this Doc View Source NoMoreDataException() Declaration public NoMoreDataException() Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.RandomFacetSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.RandomFacetSource.html",
    "title": "Class RandomFacetSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomFacetSource Simple implementation of a random facet source. Inheritance System.Object ContentItemsSource FacetSource RandomFacetSource Implements System.IDisposable Inherited Members FacetSource.ResetInputs() ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class RandomFacetSource : FacetSource, IDisposable Remarks Supports the following parameters: rand.seeddefines the seed to initialize System.Random with (default: 13 ). max.doc.facet.dimsMax number of random dimensions to create (default: 5 ); actual number of dimensions would be anything between 1 and that number. max.doc.facetsmaximal #facets per doc (default: 10 ). Actual number of facets in a certain doc would be anything between 1 and that number. max.facet.depthmaximal #components in a facet (default: 3 ). Actual number of components in a certain facet would be anything between 1 and that number. Methods | Improve this Doc View Source Configure(FacetsConfig) Declaration public override void Configure(FacetsConfig config) Parameters Type Name Description FacetsConfig config Overrides FacetSource.Configure(FacetsConfig) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextFacets(IList<FacetField>) Declaration public override void GetNextFacets(IList<FacetField> facets) Parameters Type Name Description System.Collections.Generic.IList < FacetField > facets Overrides FacetSource.GetNextFacets(IList<FacetField>) | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersContentSource.html",
    "title": "Class ReutersContentSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReutersContentSource A ContentSource reading from the Reuters collection. Config properties: work.dir path to the root of docs and indexes dirs (default work ). docs.dir path to the docs dir (default reuters-out ). Inheritance System.Object ContentItemsSource ContentSource ReutersContentSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class ReutersContentSource : ContentSource, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersQueryMaker.html",
    "title": "Class ReutersQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReutersQueryMaker A IQueryMaker that makes queries devised manually (by Grant Ingersoll) for searching in the Reuters collection. Inheritance System.Object AbstractQueryMaker ReutersQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class ReutersQueryMaker : AbstractQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleLineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleLineParser.html",
    "title": "Class SimpleLineParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleLineParser LineParser which ignores the header passed to its constructor and assumes simply that field names and their order are the same as in DEFAULT_FIELDS . Inheritance System.Object LineParser SimpleLineParser Inherited Members LineParser.m_header 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleLineParser : LineParser Constructors | Improve this Doc View Source SimpleLineParser(String[]) Declaration public SimpleLineParser(string[] header) Parameters Type Name Description System.String [] header Methods | Improve this Doc View Source ParseLine(DocData, String) Declaration public override void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line Overrides LineParser.ParseLine(DocData, String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleQueryMaker.html",
    "title": "Class SimpleQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleQueryMaker A IQueryMaker that makes queries for a collection created using SingleDocSource . Inheritance System.Object AbstractQueryMaker SimpleQueryMaker SimpleSloppyPhraseQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleQueryMaker : AbstractQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Prepare the queries for this test. Extending classes can override this method for preparing different queries. Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Prepared queries. Overrides AbstractQueryMaker.PrepareQueries() Exceptions Type Condition System.Exception If cannot prepare the queries. Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleSloppyPhraseQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleSloppyPhraseQueryMaker.html",
    "title": "Class SimpleSloppyPhraseQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleSloppyPhraseQueryMaker Create sloppy phrase queries for performance test, in an index created using simple doc maker. Inheritance System.Object AbstractQueryMaker SimpleQueryMaker SimpleSloppyPhraseQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleSloppyPhraseQueryMaker : SimpleQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides SimpleQueryMaker.PrepareQueries() See Also PrepareQueries () Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SingleDocSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SingleDocSource.html",
    "title": "Class SingleDocSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleDocSource Creates the same document each time GetNextDocData(DocData) is called. Inheritance System.Object ContentItemsSource ContentSource SingleDocSource SortableSingleDocSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SingleDocSource : ContentSource, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SortableSingleDocSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SortableSingleDocSource.html",
    "title": "Class SortableSingleDocSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortableSingleDocSource Adds fields appropriate for sorting: country, random_string and sort_field (int). Supports the following parameters: sort.rng defines the range for sort-by-int field (default 20000 ). rand.seed defines the seed to initialize Random with (default 13 ). Inheritance System.Object ContentItemsSource ContentSource SingleDocSource SortableSingleDocSource Implements System.IDisposable Inherited Members SingleDocSource.Dispose(Boolean) SingleDocSource.ResetInputs() ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SortableSingleDocSource : SingleDocSource, IDisposable Methods | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides SingleDocSource.GetNextDocData(DocData) | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialDocMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialDocMaker.html",
    "title": "Class SpatialDocMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialDocMaker Indexes spatial data according to a configured SpatialStrategy with optional shape transformation via a configured IShapeConverter . The converter can turn points into circles and bounding boxes, in order to vary the type of indexing performance tests. Unless it's subclass-ed to do otherwise, this class configures a Spatial4n.Core.Context.SpatialContext , SpatialPrefixTree , and RecursivePrefixTreeStrategy . The Strategy is made available to a query maker via the static method GetSpatialStrategy(Int32) . See spatial.alg for a listing of spatial parameters, in particular those starting with \"spatial.\" and \"doc.spatial\". Inheritance System.Object DocMaker SpatialDocMaker Implements System.IDisposable Inherited Members DocMaker.BODY_FIELD DocMaker.TITLE_FIELD DocMaker.DATE_FIELD DocMaker.DATE_MSEC_FIELD DocMaker.TIME_SEC_FIELD DocMaker.ID_FIELD DocMaker.BYTES_FIELD DocMaker.NAME_FIELD DocMaker.m_config DocMaker.m_valType DocMaker.m_bodyValType DocMaker.m_source DocMaker.m_reuseFields DocMaker.m_indexProperties DocMaker.GetDocState() DocMaker.Dispose() DocMaker.Dispose(Boolean) DocMaker.ResetInputs() 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SpatialDocMaker : DocMaker, IDisposable Fields | Improve this Doc View Source SPATIAL_FIELD Declaration public static readonly string SPATIAL_FIELD Field Value Type Description System.String Methods | Improve this Doc View Source GetSpatialStrategy(Int32) Looks up the SpatialStrategy from the given round -- RoundNumber . It's an error if it wasn't created already for this round -- when SpatialDocMaker is initialized. Declaration public static SpatialStrategy GetSpatialStrategy(int roundNumber) Parameters Type Name Description System.Int32 roundNumber Returns Type Description SpatialStrategy | Improve this Doc View Source MakeDocument() Declaration public override Document MakeDocument() Returns Type Description Document Overrides DocMaker.MakeDocument() | Improve this Doc View Source MakeDocument(Int32) Declaration public override Document MakeDocument(int size) Parameters Type Name Description System.Int32 size Returns Type Description Document Overrides DocMaker.MakeDocument(Int32) | Improve this Doc View Source MakeShapeConverter(SpatialStrategy, Config, String) Optionally converts points to circles, and optionally bbox'es result. Declaration public static IShapeConverter MakeShapeConverter(SpatialStrategy spatialStrategy, Config config, string configKeyPrefix) Parameters Type Name Description SpatialStrategy spatialStrategy Config config System.String configKeyPrefix Returns Type Description IShapeConverter | Improve this Doc View Source MakeShapeFromString(SpatialStrategy, String, String) Declaration public static IShape MakeShapeFromString(SpatialStrategy strategy, string name, string shapeStr) Parameters Type Name Description SpatialStrategy strategy System.String name System.String shapeStr Returns Type Description Spatial4n.Core.Shapes.IShape | Improve this Doc View Source MakeSpatialStrategy(Config) Builds a SpatialStrategy from configuration options. Declaration protected virtual SpatialStrategy MakeSpatialStrategy(Config config) Parameters Type Name Description Config config Returns Type Description SpatialStrategy | Improve this Doc View Source MakeSpatialStrategy(Config, IDictionary<String, String>, SpatialContext) Declaration protected virtual SpatialStrategy MakeSpatialStrategy(Config config, IDictionary<string, string> configMap, SpatialContext ctx) Parameters Type Name Description Config config System.Collections.Generic.IDictionary < System.String , System.String > configMap Spatial4n.Core.Context.SpatialContext ctx Returns Type Description SpatialStrategy | Improve this Doc View Source SetConfig(Config, ContentSource) Declaration public override void SetConfig(Config config, ContentSource source) Parameters Type Name Description Config config ContentSource source Overrides DocMaker.SetConfig(Config, ContentSource) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialFileQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialFileQueryMaker.html",
    "title": "Class SpatialFileQueryMaker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialFileQueryMaker Reads spatial data from the body field docs from an internally created LineDocSource . It's parsed by Spatial4n.Core.Context.SpatialContext.ReadShapeFromWkt(System.String) and then further manipulated via a configurable IShapeConverter . When using point data, it's likely you'll want to configure the shape converter so that the query shapes actually cover a region. The queries are all created & cached in advance. This query maker works in conjunction with SpatialDocMaker . See spatial.alg for a listing of options, in particular the options starting with \"query.\". Inheritance System.Object AbstractQueryMaker SpatialFileQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SpatialFileQueryMaker : AbstractQueryMaker, IQueryMaker Fields | Improve this Doc View Source m_distErrPct Declaration protected double m_distErrPct Field Value Type Description System.Double | Improve this Doc View Source m_operation Declaration protected SpatialOperation m_operation Field Value Type Description SpatialOperation | Improve this Doc View Source m_score Declaration protected bool m_score Field Value Type Description System.Boolean | Improve this Doc View Source m_shapeConverter Declaration protected IShapeConverter m_shapeConverter Field Value Type Description IShapeConverter | Improve this Doc View Source m_strategy Declaration protected SpatialStrategy m_strategy Field Value Type Description SpatialStrategy Methods | Improve this Doc View Source MakeQueryFromShape(IShape) Declaration protected virtual Query MakeQueryFromShape(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Query | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides AbstractQueryMaker.SetConfig(Config) Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecContentSource.html",
    "title": "Class TrecContentSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecContentSource Implements a ContentSource over the TREC collection. Inheritance System.Object ContentItemsSource ContentSource TrecContentSource Implements System.IDisposable Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecContentSource : ContentSource, IDisposable Remarks Supports the following configuration parameters (on top of ContentSource ): work.dirspecifies the working directory. Required if \"docs.dir\" denotes a relative path ( default=work ). docs.dirspecifies the directory where the TREC files reside. Can be set to a relative path if \"work.dir\" is also specified ( default=trec ). trec.doc.parserspecifies the TrecDocParser class to use for parsing the TREC documents content ( default=TrecGov2Parser ). html.parserspecifies the IHTMLParser class to use for parsing the HTML parts of the TREC documents content ( default=DemoHTMLParser ). content.source.encodingif not specified, ISO-8859-1 is used. if true , do not append iteration number to docname Fields | Improve this Doc View Source DOC Declaration public static readonly string DOC Field Value Type Description System.String | Improve this Doc View Source DOCNO Declaration public static readonly string DOCNO Field Value Type Description System.String | Improve this Doc View Source NEW_LINE separator between lines in the buffer Declaration public static readonly string NEW_LINE Field Value Type Description System.String | Improve this Doc View Source TERMINATING_DOC Declaration public static readonly string TERMINATING_DOC Field Value Type Description System.String | Improve this Doc View Source TERMINATING_DOCNO Declaration public static readonly string TERMINATING_DOCNO Field Value Type Description System.String Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ParseDate(String) Declaration public virtual DateTime? ParseDate(string dateStr) Parameters Type Name Description System.String dateStr Returns Type Description System.Nullable < System.DateTime > | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.html",
    "title": "Class TrecDocParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecDocParser Parser for trec doc content, invoked on doc text excluding <DOC> and <DOCNO> which are handled in TrecContentSource. Required to be stateless and hence thread safe. Inheritance System.Object TrecDocParser TrecFBISParser TrecFR94Parser TrecFTParser TrecGov2Parser TrecLATimesParser TrecParserByPath 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class TrecDocParser Fields | Improve this Doc View Source DEFAULT_PATH_TYPE trec parser type used for unknown extensions Declaration public static readonly TrecDocParser.ParsePathType DEFAULT_PATH_TYPE Field Value Type Description TrecDocParser.ParsePathType Methods | Improve this Doc View Source Extract(StringBuilder, String, String, Int32, String[]) Extract from buf the text of interest within specified tags. Declaration public static string Extract(StringBuilder buf, string startTag, string endTag, int maxPos, string[] noisePrefixes) Parameters Type Name Description System.Text.StringBuilder buf Entire input text. System.String startTag Tag marking start of text of interest. System.String endTag Tag marking end of text of interest. System.Int32 maxPos if ≥ 0 sets a limit on start of text of interest. System.String [] noisePrefixes Text of interest or null if not found. Returns Type Description System.String | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Parse the text prepared in docBuf into a result DocData, no synchronization is required. Declaration public abstract DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData Reusable result. System.String name Name that should be set to the result. TrecContentSource trecSrc Calling trec content source. System.Text.StringBuilder docBuf Text to parse. TrecDocParser.ParsePathType pathType Type of parsed file, or UNKNOWN if unknown - may be used by parsers to alter their behavior according to the file path type. Returns Type Description DocData | Improve this Doc View Source PathType(FileInfo) Compute the path type of a file by inspecting name of file and its parents. Declaration public static TrecDocParser.ParsePathType PathType(FileInfo f) Parameters Type Name Description System.IO.FileInfo f Returns Type Description TrecDocParser.ParsePathType | Improve this Doc View Source StripTags(String, Int32) Strip tags from input. Declaration public static string StripTags(string buf, int start) Parameters Type Name Description System.String buf System.Int32 start Returns Type Description System.String See Also StripTags(StringBuilder, Int32) | Improve this Doc View Source StripTags(StringBuilder, Int32) strip tags from buf : each tag is replaced by a single blank. Declaration public static string StripTags(StringBuilder buf, int start) Parameters Type Name Description System.Text.StringBuilder buf System.Int32 start Returns Type Description System.String Text obtained when stripping all tags from buf (input System.Text.StringBuilder is unmodified)."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.ParsePathType.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.ParsePathType.html",
    "title": "Enum TrecDocParser.ParsePathType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum TrecDocParser.ParsePathType Types of trec parse paths, Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public enum ParsePathType Fields Name Description FBIS FR94 FT GOV2 LATIMES UNKNOWN"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFBISParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFBISParser.html",
    "title": "Class TrecFBISParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecFBISParser Parser for the FBIS docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecFBISParser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecFBISParser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc System.Text.StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFR94Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFR94Parser.html",
    "title": "Class TrecFR94Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecFR94Parser Parser for the FR94 docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecFR94Parser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecFR94Parser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc System.Text.StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFTParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFTParser.html",
    "title": "Class TrecFTParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecFTParser Parser for the FT docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecFTParser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecFTParser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc System.Text.StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecGov2Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecGov2Parser.html",
    "title": "Class TrecGov2Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecGov2Parser Parser for the GOV2 collection format Inheritance System.Object TrecDocParser TrecGov2Parser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecGov2Parser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc System.Text.StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecLATimesParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecLATimesParser.html",
    "title": "Class TrecLATimesParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecLATimesParser Parser for the FT docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecLATimesParser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecLATimesParser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc System.Text.StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecParserByPath.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecParserByPath.html",
    "title": "Class TrecParserByPath | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecParserByPath Parser for trec docs which selects the parser to apply according to the source files path, defaulting to TrecGov2Parser . Inheritance System.Object TrecDocParser TrecParserByPath Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, 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.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecParserByPath : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc System.Text.StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask <!-- 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. --> Benchmarking Lucene By Tasks. This package provides \"task based\" performance benchmarking of Lucene. One can use the predefined benchmarks, or create new ones. Contained packages: Package Description stats Statistics maintained when running benchmark tasks. tasks Benchmark tasks. feeds Sources for benchmark inputs: documents and queries. utils Utilities used for the benchmark, and for the reports. programmatic Sample performance test written programmatically. Table Of Contents Benchmarking By Tasks 2. How to use 3. Benchmark \"algorithm\" 4. Supported tasks/commands 5. Benchmark properties 6. Example input algorithm and the result benchmark report. 7. Results record counting clarified Benchmarking By Tasks Benchmark Lucene using task primitives. A benchmark is composed of some predefined tasks, allowing for creating an index, adding documents, optimizing, searching, generating reports, and more. A benchmark run takes an \"algorithm\" file that contains a description of the sequence of tasks making up the run, and some properties defining a few additional characteristics of the benchmark run. How to use Easiest way to run a benchmarks is using the predefined ant task: * ant run-task would run the micro-standard.alg \"algorithm\". * ant run-task -Dtask.alg=conf/compound-penalty.alg would run the compound-penalty.alg \"algorithm\". * ant run-task -Dtask.alg=[full-path-to-your-alg-file] would run your perf test \"algorithm\". * java org.apache.lucene.benchmark.byTask.programmatic.Sample would run a performance test programmatically - without using an alg file. This is less readable, and less convenient, but possible. You may find existing tasks sufficient for defining the benchmark you need, otherwise, you can extend the framework to meet your needs, as explained herein. Each benchmark run has a DocMaker and a QueryMaker. These two should usually match, so that \"meaningful\" queries are used for a certain collection. Properties set at the header of the alg file define which \"makers\" should be used. You can also specify your own makers, extending DocMaker and implementing QueryMaker. Note: since 2.9, DocMaker is a concrete class which accepts a ContentSource. In most cases, you can use the DocMaker class to create Documents, while providing your own ContentSource implementation. For example, the current Benchmark package includes ContentSource implementations for TREC, Enwiki and Reuters collections, as well as others like LineDocSource which reads a 'line' file produced by WriteLineDocTask. Benchmark .alg file contains the benchmark \"algorithm\". The syntax is described below. Within the algorithm, you can specify groups of commands, assign them names, specify commands that should be repeated, do commands in serial or in parallel, and also control the speed of \"firing\" the commands. This allows, for instance, to specify that an index should be opened for update, documents should be added to it one by one but not faster than 20 docs a minute, and, in parallel with this, some N queries should be searched against that index, again, no more than 2 queries a second. You can have the searches all share an index reader, or have them each open its own reader and close it afterwords. If the commands available for use in the algorithm do not meet your needs, you can add commands by adding a new task under org.apache.lucene.benchmark.byTask.tasks - you should extend the PerfTask abstract class. Make sure that your new task class name is suffixed by Task. Assume you added the class \"WonderfulTask\" - doing so also enables the command \"Wonderful\" to be used in the algorithm. External classes : It is sometimes useful to invoke the benchmark package with your external alg file that configures the use of your own doc/query maker and or html parser. You can work this out without modifying the benchmark package code, by passing your class path with the benchmark.ext.classpath property: * ant run-task -Dtask.alg=[full-path-to-your-alg-file] -Dbenchmark.ext.classpath=/mydir/classes -Dtask.mem=512M External tasks : When writing your own tasks under a package other than org.apache.lucene.benchmark.byTask.tasks specify that package thru the alt.tasks.packages property. Benchmark \"algorithm\" The following is an informal description of the supported syntax. Measuring : When a command is executed, statistics for the elapsed execution time and memory consumption are collected. At any time, those statistics can be printed, using one of the available ReportTasks. Comments start with ' # '. Serial sequences are enclosed within ' { } '. Parallel sequences are enclosed within ' [ ] ' Sequence naming: To name a sequence, put ' \"name\" ' just after ' { ' or ' [ '. Example - { \"ManyAdds\" AddDoc } : 1000000 - would name the sequence of 1M add docs \"ManyAdds\", and this name would later appear in statistic reports. If you don't specify a name for a sequence, it is given one: you can see it as the algorithm is printed just before benchmark execution starts. Repeating : To repeat sequence tasks N times, add ' : N ' just after the sequence closing tag - ' } ' or ' ] ' or ' > '. Example - [ AddDoc ] : 4 - would do 4 addDoc in parallel, spawning 4 threads at once. Example - [ AddDoc AddDoc ] : 4 - would do 8 addDoc in parallel, spawning 8 threads at once. Example - { AddDoc } : 30 - would do addDoc 30 times in a row. Example - { AddDoc AddDoc } : 30 - would do addDoc 60 times in a row. Exhaustive repeating : use * instead of a number to repeat exhaustively. This is sometimes useful, for adding as many files as a doc maker can create, without iterating over the same file again, especially when the exact number of documents is not known in advance. For instance, TREC files extracted from a zip file. Note: when using this, you must also set doc.maker.forever to false. Example - { AddDoc } : * - would add docs until the doc maker is \"exhausted\". Command parameter : a command can optionally take a single parameter. If the certain command does not support a parameter, or if the parameter is of the wrong type, reading the algorithm will fail with an exception and the test would not start. Currently the following tasks take optional parameters: AddDoc takes a numeric parameter, indicating the required size of added document. Note: if the DocMaker implementation used in the test does not support makeDoc(size), an exception would be thrown and the test would fail. DeleteDoc takes numeric parameter, indicating the docid to be deleted. The latter is not very useful for loops, since the docid is fixed, so for deletion in loops it is better to use the doc.delete.step property. SetProp takes a name,value mandatory param, ',' used as a separator. SearchTravRetTask and SearchTravTask take a numeric parameter, indicating the required traversal size. SearchTravRetLoadFieldSelectorTask takes a string parameter: a comma separated list of Fields to load. SearchTravRetHighlighterTask takes a string parameter: a comma separated list of parameters to define highlighting. See that tasks javadocs for more information Example - AddDoc(2000) - would add a document of size 2000 (~bytes). See conf/task-sample.alg for how this can be used, for instance, to check which is faster, adding many smaller documents, or few larger documents. Next candidates for supporting a parameter may be the Search tasks, for controlling the query size. Statistic recording elimination : - a sequence can also end with ' > ', in which case child tasks would not store their statistics. This can be useful to avoid exploding stats data, for adding say 1M docs. Example - { \"ManyAdds\" AddDoc > : 1000000 - would add million docs, measure that total, but not save stats for each addDoc. Notice that the granularity of System.currentTimeMillis() (which is used here) is system dependant, and in some systems an operation that takes 5 ms to complete may show 0 ms latency time in performance measurements. Therefore it is sometimes more accurate to look at the elapsed time of a larger sequence, as demonstrated here. Rate : To set a rate (ops/sec or ops/min) for a sequence, add ' : N : R ' just after sequence closing tag. This would specify repetition of N with rate of R operations/sec. Use ' R/sec ' or ' R/min ' to explicitly specify that the rate is per second or per minute. The default is per second, Example - [ AddDoc ] : 400 : 3 - would do 400 addDoc in parallel, starting up to 3 threads per second. Example - { AddDoc } : 100 : 200/min - would do 100 addDoc serially, waiting before starting next add, if otherwise rate would exceed 200 adds/min. Disable Counting : Each task executed contributes to the records count. This count is reflected in reports under recs/s and under recsPerRun. Most tasks count 1, some count 0, and some count more. (See Results record counting clarified for more details.) It is possible to disable counting for a task by preceding it with - . Example - -CreateIndex - would count 0 while the default behavior for CreateIndex is to count 1. Command names : Each class \"AnyNameTask\" in the package org.apache.lucene.benchmark.byTask.tasks, that extends PerfTask, is supported as command \"AnyName\" that can be used in the benchmark \"algorithm\" description. This allows to add new commands by just adding such classes. Supported tasks/commands Existing tasks can be divided into a few groups: regular index/search work tasks, report tasks, and control tasks. Report tasks : There are a few Report commands for generating reports. Only task runs that were completed are reported. (The 'Report tasks' themselves are not measured and not reported.) RepAll - all (completed) task runs. RepSumByName - all statistics, aggregated by name. So, if AddDoc was executed 2000 times, only 1 report line would be created for it, aggregating all those 2000 statistic records. RepSelectByPref prefixWord - all records for tasks whose name start with prefixWord . RepSumByPref prefixWord - all records for tasks whose name start with prefixWord , aggregated by their full task name. RepSumByNameRound - all statistics, aggregated by name and by Round . So, if AddDoc was executed 2000 times in each of 3 rounds , 3 report lines would be created for it, aggregating all those 2000 statistic records in each round. See more about rounds in the NewRound command description below. RepSumByPrefRound prefixWord - similar to RepSumByNameRound , just that only tasks whose name starts with prefixWord are included. If needed, additional reports can be added by extending the abstract class ReportTask, and by manipulating the statistics data in Points and TaskStats. Control tasks : Few of the tasks control the benchmark algorithm all over: ClearStats - clears the entire statistics. Further reports would only include task runs that would start after this call. NewRound - virtually start a new round of performance test. Although this command can be placed anywhere, it mostly makes sense at the end of an outermost sequence. This increments a global \"round counter\". All task runs that would start now would record the new, updated round counter as their round number. This would appear in reports. In particular, see RepSumByNameRound above. An additional effect of NewRound, is that numeric and boolean properties defined (at the head of the .alg file) as a sequence of values, e.g. merge.factor=mrg:10 💯 10:100 would increment (cyclic) to the next value. Note: this would also be reflected in the reports, in this case under a column that would be named \"mrg\". * <font color=\"#FF0066\">ResetInputs</font> - DocMaker and the various QueryMakers would reset their counters to start. The way these Maker interfaces work, each call for makeDocument() or makeQuery() creates the next document or query that it \"knows\" to create. If that pool is \"exhausted\", the \"maker\" start over again. The ResetInputs command therefore allows to make the rounds comparable. It is therefore useful to invoke ResetInputs together with NewRound. * <font color=\"#FF0066\">ResetSystemErase</font> - reset all index and input data and call gc. Does NOT reset statistics. This contains ResetInputs. All writers/readers are nullified, deleted, closed. Index is erased. Directory is erased. You would have to call CreateIndex once this was called... * <font color=\"#FF0066\">ResetSystemSoft</font> - reset all index and input data and call gc. Does NOT reset statistics. This contains ResetInputs. All writers/readers are nullified, closed. Index is NOT erased. Directory is NOT erased. This is useful for testing performance on an existing index, for instance if the construction of a large index took a very long time and now you would to test its search or update performance. Other existing tasks are quite straightforward and would just be briefly described here. CreateIndex and OpenIndex both leave the index open for later update operations. CloseIndex would close it. OpenReader , similarly, would leave an index reader open for later search operations. But this have further semantics. If a Read operation is performed, and an open reader exists, it would be used. Otherwise, the read operation would open its own reader and close it when the read operation is done. This allows testing various scenarios - sharing a reader, searching with \"cold\" reader, with \"warmed\" reader, etc. The read operations affected by this are: Warm , Search , SearchTrav (search and traverse), and SearchTravRet (search and traverse and retrieve). Notice that each of the 3 search task types maintains its own queryMaker instance. CommitIndex and ForceMerge can be used to commit changes to the index then merge the index segments. The integer parameter specifies how many segments to merge down to (default 1). WriteLineDoc prepares a 'line' file where each line holds a document with title , date and body elements, separated by [TAB]. A line file is useful if one wants to measure pure indexing performance, without the overhead of parsing the data. You can use LineDocSource as a ContentSource over a 'line' file. ConsumeContentSource consumes a ContentSource. Useful for e.g. testing a ContentSource performance, without the overhead of preparing a Document out of it. Benchmark properties Properties are read from the header of the .alg file, and define several parameters of the performance test. As mentioned above for the NewRound task, numeric and boolean properties that are defined as a sequence of values, e.g. merge.factor=mrg:10 💯 10:100 would increment (cyclic) to the next value, when NewRound is called, and would also appear as a named column in the reports (column name would be \"mrg\" in this example). Some of the currently defined properties are: analyzer - full class name for the analyzer to use. Same analyzer would be used in the entire test. directory - valid values are This tells which directory to use for the performance test. Index work parameters : Multi int/boolean values would be iterated with calls to NewRound. There would be also added as columns in the reports, first string in the sequence is the column name. (Make sure it is no shorter than any value in the sequence). max.buffered Example: max.buffered=buf:10:10 💯 100 - this would define using maxBufferedDocs of 10 in iterations 0 and 1, and 100 in iterations 2 and 3. * <font color=\"#FF0066\">merge.factor</font> - which merge factor to use. * <font color=\"#FF0066\">compound</font> - whether the index is using the compound format or not. Valid values are \"true\" and \"false\". Here is a list of currently defined properties: Root directory for data and indexes: work.dir (default is System property \"benchmark.work.dir\" or \"work\".) Docs and queries creation: analyzer doc.maker doc.maker.forever html.parser doc.stored doc.tokenized doc.term.vector doc.term.vector.positions doc.term.vector.offsets doc.store.body.bytes docs.dir query.maker file.query.maker.file file.query.maker.default.field search.num.hits Logging : log.step log.step.[class name]Task ie log.step.DeleteDoc (e.g. log.step.Wonderful for the WonderfulTask example above). log.queries task.max.depth.log Index writing : compound merge.factor max.buffered directory ram.flush.mb Doc deletion : doc.delete.step Spatial : Numerous; see spatial.alg Task alternative packages : alt.tasks.packages comma separated list of additional packages where tasks classes will be looked for when not found in the default package (that of PerfTask). If the same task class appears in more than one package, the package indicated first in this list will be used. For sample use of these properties see the *.alg files under conf. Example input algorithm and the result benchmark report The following example is in conf/sample.alg: # -------------------------------------------------------- # # Sample: what is the effect of doc size on indexing time? # # There are two parts in this test: # - PopulateShort adds 2N documents of length L # - PopulateLong adds N documents of length 2L # Which one would be faster? # The comparison is done twice. # # -------------------------------------------------------- # ------------------------------------------------------------------------------------- # multi val params are iterated by NewRound's, added to reports, start with column name. merge.factor=mrg:10:20 max.buffered=buf 💯 1000 compound=true analyzer=org.apache.lucene.analysis.standard.StandardAnalyzer directory=FSDirectory doc.stored=true doc.tokenized=true doc.term.vector=false doc.add.log.step=500 docs.dir=reuters-out doc.maker=org.apache.lucene.benchmark.byTask.feeds.SimpleDocMaker query.maker=org.apache.lucene.benchmark.byTask.feeds.SimpleQueryMaker # task at this depth or less would print when they start task.max.depth.log=2 log.queries=false # ------------------------------------------------------------------------------------- { { \"PopulateShort\" CreateIndex { AddDoc(4000) > : 20000 Optimize CloseIndex > ResetSystemErase { \"PopulateLong\" CreateIndex { AddDoc(8000) > : 10000 Optimize CloseIndex > ResetSystemErase NewRound } : 2 RepSumByName RepSelectByPref Populate The command line for running this sample: ant run-task -Dtask.alg=conf/sample.alg The output report from running this test contains the following: Operation round mrg buf runCnt recsPerRun rec/s elapsedSec avgUsedMem avgTotalMem PopulateShort 0 10 100 1 20003 119.6 167.26 12,959,120 14,241,792 PopulateLong - - 0 10 100 - - 1 - - 10003 - - - 74.3 - - 134.57 - 17,085,208 - 20,635,648 PopulateShort 1 20 1000 1 20003 143.5 139.39 63,982,040 94,756,864 PopulateLong - - 1 20 1000 - - 1 - - 10003 - - - 77.0 - - 129.92 - 87,309,608 - 100,831,232 Results record counting clarified Two columns in the results table indicate records counts: records-per-run and records-per-second. What does it mean? Almost every task gets 1 in this count just for being executed. Task sequences aggregate the counts of their child tasks, plus their own count of 1. So, a task sequence containing 5 other task sequences, each running a single other task 10 times, would have a count of 1 + 5 * (1 + 10) = 56. The traverse and retrieve tasks \"count\" more: a traverse task would add 1 for each traversed result (hit), and a retrieve task would additionally add 1 for each retrieved doc. So, regular Search would count 1, SearchTrav that traverses 10 hits would count 11, and a SearchTravRet task that retrieves (and traverses) 10, would count 21. Confusing? this might help: always examine the elapsedSec column, and always compare \"apples to apples\", .i.e. it is interesting to check how the rec/s changed for the same task (or sequence) between two different runs, but it is not very useful to know how the rec/s differs between Search and SearchTrav tasks. For the latter, elapsedSec would bring more insight. Classes Benchmark Run the benchmark algorithm. PerfRunData Data maintained by a performance test run."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.PerfRunData.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.PerfRunData.html",
    "title": "Class PerfRunData | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PerfRunData Data maintained by a performance test run. Inheritance System.Object PerfRunData 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.Benchmarks.ByTask Assembly : Lucene.Net.Benchmark.dll Syntax public class PerfRunData : IDisposable Remarks Data includes: Configuration. Directory, Writer, Reader. Taxonomy Directory, Writer, Reader. DocMaker, FacetSource and a few instances of QueryMaker. Named AnalysisFactories. Analyzer. Statistics data which updated during the run. Config properties: work.dir<path to root of docs and index dirs| Default: work> analyzer<class name for analyzer| Default: StandardAnalyzer> doc.maker<class name for doc-maker| Default: DocMaker> facet.source<class name for facet-source| Default: RandomFacetSource> query.maker<class name for query-maker| Default: SimpleQueryMaker> log.queries<whether queries should be printed| Default: false> directory<type of directory to use for the index| Default: RAMDirectory> taxonomy.directory<type of directory for taxonomy index| Default: RAMDirectory> Constructors | Improve this Doc View Source PerfRunData(Config) Declaration public PerfRunData(Config config) Parameters Type Name Description Config config Properties | Improve this Doc View Source Analyzer Gets or sets the analyzer. Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source AnalyzerFactories Declaration public virtual IDictionary<string, AnalyzerFactory> AnalyzerFactories { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , AnalyzerFactory > | Improve this Doc View Source Config Gets the config. Declaration public virtual Config Config { get; } Property Value Type Description Config | Improve this Doc View Source ContentSource Gets the ContentSource . Declaration public virtual ContentSource ContentSource { get; } Property Value Type Description ContentSource | Improve this Doc View Source Directory Gets or sets the directory. Declaration public virtual Directory Directory { get; set; } Property Value Type Description Directory | Improve this Doc View Source DocMaker Returns the DocMaker . Declaration public virtual DocMaker DocMaker { get; } Property Value Type Description DocMaker | Improve this Doc View Source FacetSource Gets the FacetSource . Declaration public virtual FacetSource FacetSource { get; } Property Value Type Description FacetSource | Improve this Doc View Source IndexWriter Gets or sets the indexWriter. Declaration public virtual IndexWriter IndexWriter { get; set; } Property Value Type Description IndexWriter | Improve this Doc View Source Locale Gets or sets the culture. Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source Points Gets the points. Declaration public virtual Points Points { get; } Property Value Type Description Points | Improve this Doc View Source StartTimeMillis Gets start time in milliseconds. Declaration public virtual long StartTimeMillis { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TaxonomyDir Gets the taxonomy directory. Declaration public virtual Directory TaxonomyDir { get; } Property Value Type Description Directory | Improve this Doc View Source TaxonomyWriter Gets or sets the taxonomy writer. Declaration public virtual ITaxonomyWriter TaxonomyWriter { get; set; } Property Value Type Description ITaxonomyWriter Methods | 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 GetIndexReader() Returns the indexReader. NOTE: this returns a reference. You must call IndexReader.DecRef() when you're done. Declaration public virtual DirectoryReader GetIndexReader() Returns Type Description DirectoryReader | Improve this Doc View Source GetIndexSearcher() Returns the indexSearcher. NOTE: this returns a reference to the underlying IndexReader. You must call IndexReader.DecRef() when you're done. Declaration public virtual IndexSearcher GetIndexSearcher() Returns Type Description IndexSearcher | Improve this Doc View Source GetPerfObject(String) Returns an object that was previously set by SetPerfObject(String, Object) . Declaration public virtual object GetPerfObject(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetQueryMaker(ReadTask) Returns the queryMaker by read task type (class). Declaration public virtual IQueryMaker GetQueryMaker(ReadTask readTask) Parameters Type Name Description ReadTask readTask Returns Type Description IQueryMaker | Improve this Doc View Source GetTaxonomyReader() Returns the taxonomyReader. NOTE: this returns a reference. You must call TaxonomyReader.DecRef() when you're done. Declaration public virtual TaxonomyReader GetTaxonomyReader() Returns Type Description TaxonomyReader | Improve this Doc View Source Reinit(Boolean) Declaration public virtual void Reinit(bool eraseIndex) Parameters Type Name Description System.Boolean eraseIndex | Improve this Doc View Source ResetInputs() Declaration public virtual void ResetInputs() | Improve this Doc View Source SetIndexReader(DirectoryReader) Set the index reader. Takes ownership of that index reader, that is, internally performs indexReader.incRef() (If caller no longer needs that reader it should decRef()/close() it after calling this method, otherwise, the reader will remain open). Declaration public virtual void SetIndexReader(DirectoryReader indexReader) Parameters Type Name Description DirectoryReader indexReader The indexReader to set. | Improve this Doc View Source SetPerfObject(String, Object) Sets an object that is required by PerfTask s, keyed by the given key . If the object implements System.IDisposable , it will be disposed by Dispose() . Declaration public virtual void SetPerfObject(string key, object obj) Parameters Type Name Description System.String key System.Object obj | Improve this Doc View Source SetStartTimeMillis() Declaration public virtual long SetStartTimeMillis() Returns Type Description System.Int64 | Improve this Doc View Source SetTaxonomyReader(TaxonomyReader) Set the taxonomy reader. Takes ownership of that taxonomy reader, that is, internally performs taxoReader.IncRef() (If caller no longer needs that reader it should DecRef()/Dispose() it after calling this method, otherwise, the reader will remain open). Declaration public virtual void SetTaxonomyReader(TaxonomyReader taxoReader) Parameters Type Name Description TaxonomyReader taxoReader The taxonomy reader to set. Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Programmatic | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Programmatic <!-- 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. --> Sample performance test written programmatically - no algorithm file is needed here. Classes Sample Sample performance test written programmatically - no algorithm file is needed here."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.Sample.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.Sample.html",
    "title": "Class Sample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Sample Sample performance test written programmatically - no algorithm file is needed here. Inheritance System.Object Sample 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.Benchmarks.ByTask.Programmatic Assembly : Lucene.Net.Benchmark.dll Syntax public class Sample Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Stats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Stats <!-- 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. --> Statistics maintained when running benchmark tasks. Classes Points Test run data points collected as the test proceeds. Report Textual report of current statistics. TaskStats Statistics for a task run. The same task can run more than once, but, if that task records statistics, each run would create its own TaskStats."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Points.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Points.html",
    "title": "Class Points | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Points Test run data points collected as the test proceeds. Inheritance System.Object Points 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.Benchmarks.ByTask.Stats Assembly : Lucene.Net.Benchmark.dll Syntax public class Points Constructors | Improve this Doc View Source Points(Config) Create a Points statistics object. Declaration public Points(Config config) Parameters Type Name Description Config config Properties | Improve this Doc View Source CurrentStats Declaration public virtual TaskStats CurrentStats { get; } Property Value Type Description TaskStats | Improve this Doc View Source TaskStats Gets the current task stats. The actual task stats are returned, so caller should not modify this task stats. Declaration public virtual IList<TaskStats> TaskStats { get; } Property Value Type Description System.Collections.Generic.IList < TaskStats > Methods | Improve this Doc View Source ClearData() Clear all data, prepare for more tests. Declaration public virtual void ClearData() | Improve this Doc View Source MarkTaskEnd(TaskStats, Int32) mark the end of a task Declaration public virtual void MarkTaskEnd(TaskStats stats, int count) Parameters Type Name Description TaskStats stats System.Int32 count | Improve this Doc View Source MarkTaskStart(PerfTask, Int32) Mark that a task is starting. Create a task stats for it and store it as a point. Declaration public virtual TaskStats MarkTaskStart(PerfTask task, int round) Parameters Type Name Description PerfTask task The starting task. System.Int32 round The new task stats created for the starting task. Returns Type Description TaskStats"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Report.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Report.html",
    "title": "Class Report | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Report Textual report of current statistics. Inheritance System.Object Report 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.Benchmarks.ByTask.Stats Assembly : Lucene.Net.Benchmark.dll Syntax public class Report Constructors | Improve this Doc View Source Report(String, Int32, Int32, Int32) Declaration public Report(string text, int size, int reported, int outOf) Parameters Type Name Description System.String text System.Int32 size System.Int32 reported System.Int32 outOf Properties | Improve this Doc View Source Count Gets number of lines in the report. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OutOf Gets total number of stats points when this report was created. Declaration public virtual int OutOf { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Reported Gets number of stats points represented in this report. Declaration public virtual int Reported { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Gets the report text. Declaration public virtual string Text { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.TaskStats.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.TaskStats.html",
    "title": "Class TaskStats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TaskStats Statistics for a task run. The same task can run more than once, but, if that task records statistics, each run would create its own TaskStats. Inheritance System.Object TaskStats 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) Namespace : Lucene.Net.Benchmarks.ByTask.Stats Assembly : Lucene.Net.Benchmark.dll Syntax public class TaskStats Properties | Improve this Doc View Source Count Gets the count. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source CountsByTimeStepMSec Declaration public virtual long CountsByTimeStepMSec { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Elapsed Gets elapsed time. Declaration public virtual long Elapsed { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxTotMem Gets the maxTotMem. Declaration public virtual long MaxTotMem { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxUsedMem Gets the maxUsedMem. Declaration public virtual long MaxUsedMem { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NumParallelTasks Gets the numParallelTasks. Declaration public virtual int NumParallelTasks { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumRuns Gets the numRuns. Declaration public virtual int NumRuns { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Round Gets the round number. Declaration public virtual int Round { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Task Gets the task. Declaration public virtual PerfTask Task { get; } Property Value Type Description PerfTask | Improve this Doc View Source TaskRunNum Gets the taskRunNum. Declaration public virtual int TaskRunNum { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(TaskStats) Add data from another stat, for aggregation. Declaration public virtual void Add(TaskStats stat2) Parameters Type Name Description TaskStats stat2 The added stat data. | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source GetCountsByTime() Declaration public virtual int[] GetCountsByTime() Returns Type Description System.Int32 [] | Improve this Doc View Source SetCountsByTime(Int32[], Int64) Declaration public virtual void SetCountsByTime(int[] counts, long msecStep) Parameters Type Name Description System.Int32 [] counts System.Int64 msecStep | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also System.Object.ToString ()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddDocTask.html",
    "title": "Class AddDocTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AddDocTask Add a document, optionally of a certain size. Other side effects: none. Takes optional param: document size. Inheritance System.Object PerfTask AddDocTask AddFacetedDocTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AddDocTask : PerfTask, IDisposable Constructors | Improve this Doc View Source AddDocTask(PerfRunData) Declaration public AddDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_doc Volatile data passed between Setup() , DoLogic() , TearDown() . The doc is created at Setup() and added at DoLogic() . Declaration protected Document m_doc Field Value Type Description Document Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source SetParams(String) Set the params (docSize only). Declaration public override void SetParams(string params) Parameters Type Name Description System.String params docSize, or 0 for no limit. Overrides PerfTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddFacetedDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddFacetedDocTask.html",
    "title": "Class AddFacetedDocTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AddFacetedDocTask Add a faceted document. Inheritance System.Object PerfTask AddDocTask AddFacetedDocTask Implements System.IDisposable Inherited Members AddDocTask.m_doc AddDocTask.TearDown() AddDocTask.SetParams(String) AddDocTask.SupportsParams PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AddFacetedDocTask : AddDocTask, IDisposable Remarks Config properties: with.facets <tells whether to actually add any facets to the document| Default: true> This config property allows to easily compare the performance of adding docs with and without facets. Note that facets are created even when this is false , just that they are not added to the document (nor to the taxonomy). See AddDocTask for general document parameters and configuration. Makes use of the FacetSource in effect - see PerfRunData for facet source settings. Constructors | Improve this Doc View Source AddFacetedDocTask(PerfRunData) Declaration public AddFacetedDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides AddDocTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides AddDocTask.GetLogMessage(Int32) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides AddDocTask.Setup() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.html",
    "title": "Class AddIndexesTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AddIndexesTask Adds an input index to an existing index, using AddIndexes(Directory[]) or AddIndexes(IndexReader[]) . The location of the input index is specified by the parameter ADDINDEXES_INPUT_DIR and is assumed to be a directory on the file system. Takes optional parameter Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.useAddIndexesDir which specifies which AddIndexes variant to use (defaults to true , to use AddIndexes(Directory) ). Inheritance System.Object PerfTask AddIndexesTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AddIndexesTask : PerfTask, IDisposable Constructors | Improve this Doc View Source AddIndexesTask(PerfRunData) Declaration public AddIndexesTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source ADDINDEXES_INPUT_DIR Declaration public static readonly string ADDINDEXES_INPUT_DIR Field Value Type Description System.String Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Set the params (useAddIndexesDir only) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params useAddIndexesDir=true for using AddIndexes(Directory[]) or false for using AddIndexes(IndexReader[]) . Defaults to true . Overrides PerfTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AnalyzerFactoryTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AnalyzerFactoryTask.html",
    "title": "Class AnalyzerFactoryTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzerFactoryTask Analyzer factory construction task. The name given to the constructed factory may be given to NewAnalyzerTask , which will call Create() . Inheritance System.Object PerfTask AnalyzerFactoryTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AnalyzerFactoryTask : PerfTask, IDisposable Remarks Params are in the form argname:argvalue or argname:\"argvalue\" or argname:'argvalue'; use backslashes to escape '\"' or \"'\" inside a quoted value when it's used as the enclosing quotation mark, Specify params in a comma separated list of the following, in order: Required : name: analyzer-factory-name Optional: positionIncrementGap: int value (default: 0) Optional: offsetGap: int value (default: 1) zero or more CharFilterFactory's, followed by exactly one TokenizerFactory, followed by zero or more TokenFilterFactory's Each component analysis factory map specify luceneMatchVersion (defaults to LUCENE_CURRENT ) and any of the args understood by the specified *Factory class, in the above-describe param format. Example: -AnalyzerFactory(name:'strip html, fold to ascii, whitespace tokenize, max 10k tokens', positionIncrementGap:100, HTMLStripCharFilter, MappingCharFilter(mapping:'mapping-FoldToASCII.txt'), WhitespaceTokenizer(luceneMatchVersion:LUCENE_43), TokenLimitFilter(maxTokenCount:10000, consumeAllTokens:false)) [...] -NewAnalyzer('strip html, fold to ascii, whitespace tokenize, max 10k tokens') AnalyzerFactory will direct analysis component factories to look for resources under the directory specified in the \"work.dir\" property. Constructors | Improve this Doc View Source AnalyzerFactoryTask(PerfRunData) Declaration public AnalyzerFactoryTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLineNumber(StreamTokenizer) Returns the current line in the algorithm file Declaration public virtual int GetLineNumber(StreamTokenizer stok) Parameters Type Name Description J2N.IO.StreamTokenizer stok Returns Type Description System.Int32 | Improve this Doc View Source LookupAnalysisClass(String, Type) This method looks up a class with its fully qualified name (FQN), or a short-name class-simplename, or with a package suffix, assuming \"Lucene.Net.Analysis.\" as the namespace prefix (e.g. \"standard.ClassicTokenizerFactory\" -> \"Lucene.Net.Analysis.Standard.ClassicTokenizerFactory\"). Declaration public virtual Type LookupAnalysisClass(string className, Type expectedType) Parameters Type Name Description System.String className The namespace qualified name or the short name of the class. System.Type expectedType The superclass className is expected to extend. Returns Type Description System.Type The loaded type. Remarks If className contains a period, the class is first looked up as-is, assuming that it is an FQN. If this fails, lookup is retried after prepending the Lucene analysis package prefix to the class name. If className does not contain a period, the analysis SPI *Factory.LookupClass() methods are used to find the class. Exceptions Type Condition System.TypeLoadException If lookup fails. | Improve this Doc View Source SetParams(String) Sets the params. Analysis component factory names may optionally include the \"Factory\" suffix. Declaration public override void SetParams(string params) Parameters Type Name Description System.String params analysis pipeline specification: name, (optional) positionIncrementGap, (optional) offsetGap, 0+ CharFilterFactory's, 1 TokenizerFactory, and 0+ TokenFilterFactory's Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.BenchmarkHighlighter.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.BenchmarkHighlighter.html",
    "title": "Class BenchmarkHighlighter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BenchmarkHighlighter Abstract class for benchmarking highlighting performance Inheritance System.Object BenchmarkHighlighter 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class BenchmarkHighlighter Methods | Improve this Doc View Source DoHighlight(IndexReader, Int32, String, Document, Analyzer, String) Declaration public abstract int DoHighlight(IndexReader reader, int doc, string field, Document document, Analyzer analyzer, string text) Parameters Type Name Description IndexReader reader System.Int32 doc System.String field Document document Analyzer analyzer System.String text Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ClearStatsTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ClearStatsTask.html",
    "title": "Class ClearStatsTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClearStatsTask Clear statistics data. Other side effects: None. Inheritance System.Object PerfTask ClearStatsTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ClearStatsTask : PerfTask, IDisposable Constructors | Improve this Doc View Source ClearStatsTask(PerfRunData) Declaration public ClearStatsTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseIndexTask.html",
    "title": "Class CloseIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CloseIndexTask Close index writer. Other side effects: index writer object in perfRunData is nullified. Takes optional param \"doWait\": if false, then close(false) is called. Inheritance System.Object PerfTask CloseIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseIndexTask : PerfTask, IDisposable Constructors | Improve this Doc View Source CloseIndexTask(PerfRunData) Declaration public CloseIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseReaderTask.html",
    "title": "Class CloseReaderTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CloseReaderTask Close index reader. Other side effects: index reader in perfRunData is nullified. This would cause read related tasks to reopen their own reader. Inheritance System.Object PerfTask CloseReaderTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseReaderTask : PerfTask, IDisposable Constructors | Improve this Doc View Source CloseReaderTask(PerfRunData) Declaration public CloseReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyIndexTask.html",
    "title": "Class CloseTaxonomyIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CloseTaxonomyIndexTask Close taxonomy index. Other side effects: taxonomy writer object in perfRunData is nullified. Inheritance System.Object PerfTask CloseTaxonomyIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseTaxonomyIndexTask : PerfTask, IDisposable Constructors | Improve this Doc View Source CloseTaxonomyIndexTask(PerfRunData) Declaration public CloseTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyReaderTask.html",
    "title": "Class CloseTaxonomyReaderTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CloseTaxonomyReaderTask Close taxonomy reader. Other side effects: taxonomy reader in perfRunData is nullified. Inheritance System.Object PerfTask CloseTaxonomyReaderTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseTaxonomyReaderTask : PerfTask, IDisposable Constructors | Improve this Doc View Source CloseTaxonomyReaderTask(PerfRunData) Declaration public CloseTaxonomyReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitIndexTask.html",
    "title": "Class CommitIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommitIndexTask Commits the IndexWriter . Inheritance System.Object PerfTask CommitIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CommitIndexTask : PerfTask, IDisposable Constructors | Improve this Doc View Source CommitIndexTask(PerfRunData) Declaration public CommitIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitTaxonomyIndexTask.html",
    "title": "Class CommitTaxonomyIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommitTaxonomyIndexTask Commits the Taxonomy Index. Inheritance System.Object PerfTask CommitTaxonomyIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CommitTaxonomyIndexTask : PerfTask, IDisposable Constructors | Improve this Doc View Source CommitTaxonomyIndexTask(PerfRunData) Declaration public CommitTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ConsumeContentSourceTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ConsumeContentSourceTask.html",
    "title": "Class ConsumeContentSourceTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConsumeContentSourceTask Consumes a ContentSource . Inheritance System.Object PerfTask ConsumeContentSourceTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ConsumeContentSourceTask : PerfTask, IDisposable Constructors | Improve this Doc View Source ConsumeContentSourceTask(PerfRunData) Declaration public ConsumeContentSourceTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateIndexTask.html",
    "title": "Class CreateIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CreateIndexTask Creates an index. Inheritance System.Object PerfTask CreateIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CreateIndexTask : PerfTask, IDisposable Remarks Other side effects: index writer object in perfRunData is set. Relevant properties: merge.factor(default 10) max.buffered(default no flush) compound(default true) ram.flush.mb[default 0] merge.policy(default Lucene.Net.Index.LogByteSizeMergePolicy, Lucene.Net) merge.scheduler(default Lucene.Net.Index.ConcurrentMergeScheduler, Lucene.Net) concurrent.merge.scheduler.max.thread.count(defaults per ConcurrentMergeScheduler) concurrent.merge.scheduler.max.merge.count(defaults per ConcurrentMergeScheduler) default.codec This task also supports a \"writer.info.stream\" property with the following values: SystemOutSets SetInfoStream(InfoStream) to Out . SystemErrSets SetInfoStream(InfoStream) to Error <file_name> Attempts to create a file given that name and sets SetInfoStream(InfoStream) to that file. If this denotes an invalid file name, or some error occurs, an exception will be thrown. Constructors | Improve this Doc View Source CreateIndexTask(PerfRunData) Declaration public CreateIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source ConfigureWriter(Config, PerfRunData, OpenMode, IndexCommit) Declaration public static IndexWriter ConfigureWriter(Config config, PerfRunData runData, OpenMode mode, IndexCommit commit) Parameters Type Name Description Config config PerfRunData runData OpenMode mode IndexCommit commit Returns Type Description IndexWriter | Improve this Doc View Source CreateWriterConfig(Config, PerfRunData, OpenMode, IndexCommit) Declaration public static IndexWriterConfig CreateWriterConfig(Config config, PerfRunData runData, OpenMode mode, IndexCommit commit) Parameters Type Name Description Config config PerfRunData runData OpenMode mode IndexCommit commit Returns Type Description IndexWriterConfig | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetIndexDeletionPolicy(Config) Declaration public static IndexDeletionPolicy GetIndexDeletionPolicy(Config config) Parameters Type Name Description Config config Returns Type Description IndexDeletionPolicy Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateTaxonomyIndexTask.html",
    "title": "Class CreateTaxonomyIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CreateTaxonomyIndexTask Create a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. Inheritance System.Object PerfTask CreateTaxonomyIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CreateTaxonomyIndexTask : PerfTask, IDisposable Constructors | Improve this Doc View Source CreateTaxonomyIndexTask(PerfRunData) Declaration public CreateTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ForceMergeTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ForceMergeTask.html",
    "title": "Class ForceMergeTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ForceMergeTask Runs forceMerge on the index. Other side effects: none. Inheritance System.Object PerfTask ForceMergeTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ForceMergeTask : PerfTask, IDisposable Constructors | Improve this Doc View Source ForceMergeTask(PerfRunData) Declaration public ForceMergeTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Tasks | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Tasks <!-- 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. --> Extendable benchmark tasks. Classes AddDocTask Add a document, optionally of a certain size. Other side effects: none. Takes optional param: document size. AddFacetedDocTask Add a faceted document. AddIndexesTask Adds an input index to an existing index, using AddIndexes(Directory[]) or AddIndexes(IndexReader[]) . The location of the input index is specified by the parameter ADDINDEXES_INPUT_DIR and is assumed to be a directory on the file system. Takes optional parameter Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.useAddIndexesDir which specifies which AddIndexes variant to use (defaults to true , to use AddIndexes(Directory) ). AnalyzerFactoryTask Analyzer factory construction task. The name given to the constructed factory may be given to NewAnalyzerTask , which will call Create() . BenchmarkHighlighter Abstract class for benchmarking highlighting performance ClearStatsTask Clear statistics data. Other side effects: None. CloseIndexTask Close index writer. Other side effects: index writer object in perfRunData is nullified. Takes optional param \"doWait\": if false, then close(false) is called. CloseReaderTask Close index reader. Other side effects: index reader in perfRunData is nullified. This would cause read related tasks to reopen their own reader. CloseTaxonomyIndexTask Close taxonomy index. Other side effects: taxonomy writer object in perfRunData is nullified. CloseTaxonomyReaderTask Close taxonomy reader. Other side effects: taxonomy reader in perfRunData is nullified. CommitIndexTask Commits the IndexWriter . CommitTaxonomyIndexTask Commits the Taxonomy Index. ConsumeContentSourceTask Consumes a ContentSource . CreateIndexTask Creates an index. CreateTaxonomyIndexTask Create a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. ForceMergeTask Runs forceMerge on the index. Other side effects: none. ImplementationExtensions LUCENENET specific extension methods for the NewCollationAnalyzerTask.Implementation enumeration. NearRealtimeReaderTask Spawns a BG thread that periodically (defaults to 3.0 seconds, but accepts param in seconds) wakes up and asks IndexWriter for a near real-time reader. Then runs a single query (body: 1) sorted by docdate, and prints time to reopen and time to run the search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk It's also not generally usable, eg you cannot change which query is executed. NewAnalyzerTask Create a new Analyzer and set it it in the getRunData() for use by all future tasks. NewCollationAnalyzerTask NewLocaleTask Set a System.Globalization.CultureInfo for use in benchmarking. NewRoundTask Increment the counter for properties maintained by Round Number. Other side effects: if there are props by round number, log value change. OpenIndexTask Open an index writer. OpenReaderTask Open an index reader. Other side effects: index reader object in perfRunData is set. Optional params commitUserData eg. OpenReader(false,commit1) OpenTaxonomyIndexTask Open a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. OpenTaxonomyReaderTask Open a taxonomy index reader. Other side effects: taxonomy reader object in perfRunData is set. PerfTask An abstract task to be tested for performance. PrintReaderTask Opens a reader and prints basic statistics. ReadTask Read index (abstract) task. Sub classes implement WithSearch , WithWarm , WithTraverse and WithRetrieve ReadTokensTask Simple task to test performance of tokenizers. It just creates a token stream for each field of the document and read all tokens out of that stream. ReopenReaderTask Reopens IndexReader and closes old IndexReader . RepAllTask Report all statistics with no aggregations. Other side effects: None. ReportTask Report (abstract) task - all report tasks extend this task. RepSelectByPrefTask Report by-name-prefix statistics with no aggregations. Other side effects: None. RepSumByNameRoundTask Report all statistics grouped/aggregated by name and round. Other side effects: None. RepSumByNameTask Report all statistics aggregated by name. Other side effects: None. RepSumByPrefRoundTask Report all prefix matching statistics grouped/aggregated by name and round. Other side effects: None. RepSumByPrefTask Report by-name-prefix statistics aggregated by name. Other side effects: None. ResetInputsTask Reset inputs so that the test run would behave, input wise, as if it just started. This affects e.g. the generation of docs and queries. ResetSystemEraseTask Reset all index and input data and call gc, erase index and dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, deleted, closed. Index is erased. Directory is erased. ResetSystemSoftTask Reset all index and input data and call gc, does NOT erase index/dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, closed. Index is NOT erased. Directory is NOT erased. RollbackIndexTask Rollback the index writer. SearchTask Search task. Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. SearchTravRetHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents. SearchTravRetLoadFieldSelectorTask Search and Traverse and Retrieve docs task using a FieldVisitor loading only the requested fields. SearchTravRetTask Search and Traverse and Retrieve docs task. SearchTravRetVectorHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents by using FastVectorHighlighter . SearchTravTask Search and Traverse task. SearchWithCollectorTask Does search w/ a custom collector SearchWithSortTask Does sort search on specified field. SetPropTask Set a performance test configuration property. A property may have a single value, or a sequence of values, separated by \":\". If a sequence of values is specified, each time a new round starts, the next (cyclic) value is taken. Other side effects: none. Takes mandatory param: \"name,value\" pair. TaskSequence Sequence of parallel or sequential tasks. UpdateDocTask Update a document, using UpdateDocument(Term, IEnumerable<IIndexableField>) , optionally with of a certain size. Other side effects: none. Takes optional param: document size. WaitForMergesTask Waits for merges to finish. WaitTask Simply waits for the specified (via the parameter) amount of time. For example Wait(30s) waits for 30 seconds. This is useful with background tasks to control how long the tasks run. You can specify h, m, or s (hours, minutes, seconds) as the trailing time unit. No unit is interpreted as seconds. WarmTask Warm reader task: retrieve all reader documents. WriteEnwikiLineDocTask A WriteLineDocTask which for Wikipedia input, will write category pages to another file, while remaining pages will be written to the original file. The categories file is derived from the original file, by adding a prefix \"categories-\". WriteLineDocTask A task which writes documents, one line per document. Each line is in the following format: title <TAB> date <TAB> body. The output of this task can be consumed by LineDocSource and is intended to save the IO overhead of opening a file per document to be indexed. Enums NewCollationAnalyzerTask.Implementation Different Collation implementations: currently limited to what is provided in ICU. See Comparison of implementations"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ImplementationExtensions.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ImplementationExtensions.html",
    "title": "Class ImplementationExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ImplementationExtensions LUCENENET specific extension methods for the NewCollationAnalyzerTask.Implementation enumeration. Inheritance System.Object ImplementationExtensions 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public static class ImplementationExtensions Methods | Improve this Doc View Source GetAnalyzerType(NewCollationAnalyzerTask.Implementation) Declaration public static Type GetAnalyzerType(this NewCollationAnalyzerTask.Implementation impl) Parameters Type Name Description NewCollationAnalyzerTask.Implementation impl Returns Type Description System.Type | Improve this Doc View Source GetCollatorType(NewCollationAnalyzerTask.Implementation) Declaration public static Type GetCollatorType(this NewCollationAnalyzerTask.Implementation impl) Parameters Type Name Description NewCollationAnalyzerTask.Implementation impl Returns Type Description System.Type"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NearRealtimeReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NearRealtimeReaderTask.html",
    "title": "Class NearRealtimeReaderTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NearRealtimeReaderTask Spawns a BG thread that periodically (defaults to 3.0 seconds, but accepts param in seconds) wakes up and asks IndexWriter for a near real-time reader. Then runs a single query (body: 1) sorted by docdate, and prints time to reopen and time to run the search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk It's also not generally usable, eg you cannot change which query is executed. Inheritance System.Object PerfTask NearRealtimeReaderTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NearRealtimeReaderTask : PerfTask, IDisposable Constructors | Improve this Doc View Source NearRealtimeReaderTask(PerfRunData) Declaration public NearRealtimeReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PerfTask.Dispose(Boolean) | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewAnalyzerTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewAnalyzerTask.html",
    "title": "Class NewAnalyzerTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NewAnalyzerTask Create a new Analyzer and set it it in the getRunData() for use by all future tasks. Inheritance System.Object PerfTask NewAnalyzerTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewAnalyzerTask : PerfTask, IDisposable Constructors | Improve this Doc View Source NewAnalyzerTask(PerfRunData) Declaration public NewAnalyzerTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source CreateAnalyzer(String) Declaration public static Analyzer CreateAnalyzer(string className) Parameters Type Name Description System.String className Returns Type Description Analyzer | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Set the params (analyzerName only), Comma-separate list of Analyzer class names. If the Analyzer lives in Lucene.Net.Analysis, the name can be shortened by dropping the Lucene.Net.Analysis part of the Fully Qualified Class Name. Analyzer names may also refer to previously defined AnalyzerFactory's. Example Declaration: {\"NewAnalyzer\" NewAnalyzer(WhitespaceAnalyzer, SimpleAnalyzer, StopAnalyzer, Standard.StandardAnalyzer) > Example AnalyzerFactory usage: -AnalyzerFactory(name:'whitespace tokenized',WhitespaceTokenizer) -NewAnalyzer('whitespace tokenized') Declaration public override void SetParams(string params) Parameters Type Name Description System.String params analyzerClassName, or empty for the StandardAnalyzer Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.html",
    "title": "Class NewCollationAnalyzerTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NewCollationAnalyzerTask Inheritance System.Object PerfTask NewCollationAnalyzerTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewCollationAnalyzerTask : PerfTask, IDisposable Constructors | Improve this Doc View Source NewCollationAnalyzerTask(PerfRunData) Declaration public NewCollationAnalyzerTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.Implementation.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.Implementation.html",
    "title": "Enum NewCollationAnalyzerTask.Implementation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum NewCollationAnalyzerTask.Implementation Different Collation implementations: currently limited to what is provided in ICU. See Comparison of implementations Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public enum Implementation Fields Name Description ICU Extension Methods ImplementationExtensions.GetAnalyzerType() ImplementationExtensions.GetCollatorType()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewLocaleTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewLocaleTask.html",
    "title": "Class NewLocaleTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NewLocaleTask Set a System.Globalization.CultureInfo for use in benchmarking. Inheritance System.Object PerfTask NewLocaleTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewLocaleTask : PerfTask, IDisposable Remarks Locales can be specified in the following ways: de : Language \"de\" en,US : Language \"en\", country \"US\" nb-NO : Language \"nb\" (Bokmål), country \"NO\" ROOT : The System.Globalization.CultureInfo.InvariantCulture Constructors | Improve this Doc View Source NewLocaleTask(PerfRunData) Create a new System.Globalization.CultureInfo and set it it in the RunData for use by all future tasks. Declaration public NewLocaleTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewRoundTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewRoundTask.html",
    "title": "Class NewRoundTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NewRoundTask Increment the counter for properties maintained by Round Number. Other side effects: if there are props by round number, log value change. Inheritance System.Object PerfTask NewRoundTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewRoundTask : PerfTask, IDisposable Constructors | Improve this Doc View Source NewRoundTask(PerfRunData) Declaration public NewRoundTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenIndexTask.html",
    "title": "Class OpenIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenIndexTask Open an index writer. Inheritance System.Object PerfTask OpenIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenIndexTask : PerfTask, IDisposable Remarks Other side effects: index writer object in perfRunData is set. Relevant properties: merge.factor max.buffered max.field.length ram.flush.mb[default 0] Accepts a param specifying the commit point as previously saved with CommitIndexTask . If you specify this, it rolls the index back to that commit on opening the IndexWriter . Constructors | Improve this Doc View Source OpenIndexTask(PerfRunData) Declaration public OpenIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source DEFAULT_MAX_BUFFERED Declaration public static readonly int DEFAULT_MAX_BUFFERED Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MERGE_PFACTOR Declaration public static readonly int DEFAULT_MERGE_PFACTOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_RAM_FLUSH_MB Declaration public static readonly double DEFAULT_RAM_FLUSH_MB Field Value Type Description System.Double Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenReaderTask.html",
    "title": "Class OpenReaderTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenReaderTask Open an index reader. Other side effects: index reader object in perfRunData is set. Optional params commitUserData eg. OpenReader(false,commit1) Inheritance System.Object PerfTask OpenReaderTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenReaderTask : PerfTask, IDisposable Constructors | Improve this Doc View Source OpenReaderTask(PerfRunData) Declaration public OpenReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source USER_DATA Declaration public static readonly string USER_DATA Field Value Type Description System.String Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source FindIndexCommit(Directory, String) Declaration public static IndexCommit FindIndexCommit(Directory dir, string userData) Parameters Type Name Description Directory dir System.String userData Returns Type Description IndexCommit | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyIndexTask.html",
    "title": "Class OpenTaxonomyIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenTaxonomyIndexTask Open a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. Inheritance System.Object PerfTask OpenTaxonomyIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenTaxonomyIndexTask : PerfTask, IDisposable Constructors | Improve this Doc View Source OpenTaxonomyIndexTask(PerfRunData) Declaration public OpenTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyReaderTask.html",
    "title": "Class OpenTaxonomyReaderTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenTaxonomyReaderTask Open a taxonomy index reader. Other side effects: taxonomy reader object in perfRunData is set. Inheritance System.Object PerfTask OpenTaxonomyReaderTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenTaxonomyReaderTask : PerfTask, IDisposable Constructors | Improve this Doc View Source OpenTaxonomyReaderTask(PerfRunData) Declaration public OpenTaxonomyReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PerfTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PerfTask.html",
    "title": "Class PerfTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PerfTask An abstract task to be tested for performance. Inheritance System.Object PerfTask AddDocTask AddIndexesTask AnalyzerFactoryTask ClearStatsTask CloseIndexTask CloseReaderTask CloseTaxonomyIndexTask CloseTaxonomyReaderTask CommitIndexTask CommitTaxonomyIndexTask ConsumeContentSourceTask CreateIndexTask CreateTaxonomyIndexTask ForceMergeTask NearRealtimeReaderTask NewAnalyzerTask NewCollationAnalyzerTask NewLocaleTask NewRoundTask OpenIndexTask OpenReaderTask OpenTaxonomyIndexTask OpenTaxonomyReaderTask PrintReaderTask ReadTask ReadTokensTask ReopenReaderTask ReportTask ResetInputsTask RollbackIndexTask SetPropTask TaskSequence UpdateDocTask WaitForMergesTask WaitTask WriteLineDocTask 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) Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class PerfTask : IDisposable Remarks Every performance task extends this class, and provides its own DoLogic() method, which performs the actual task. Tasks performing some work that should be measured for the task, can override Setup() and/or TearDown() and place that work there. Relevant properties: task.max.depth.log Also supports the following logging attributes: log.step specifies how often to log messages about the current running task. Default is 1000 DoLogic() invocations. Set to -1 to disable logging. log.step.[class Task Name] specifies the same as 'log.step', only for a particular task name. For example, log.step.AddDoc will be applied only for AddDocTask . It's a way to control per task logging settings. If you want to omit logging for any other task, include log.step=-1. The syntax is \"log.step.\" together with the Task's 'short' name (i.e., without the 'Task' part). Constructors | Improve this Doc View Source PerfTask(PerfRunData) Declaration public PerfTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_logStep Declaration protected int m_logStep Field Value Type Description System.Int32 | Improve this Doc View Source m_params Declaration protected string m_params Field Value Type Description System.String | Improve this Doc View Source NEW_LINE Declaration protected static readonly string NEW_LINE Field Value Type Description System.String Properties | Improve this Doc View Source AlgLineNum Declaration public virtual int AlgLineNum { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BackgroundDeltaPriority Declaration public virtual int BackgroundDeltaPriority { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Depth Gets or Sets the depth. Declaration public virtual int Depth { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DisableCounting Return true if counting is disabled for this task. Declaration public virtual bool DisableCounting { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Params Gets the Params. Declaration public virtual string Params { get; } Property Value Type Description System.String | Improve this Doc View Source RunData Gets the run data. Declaration public virtual PerfRunData RunData { get; } Property Value Type Description PerfRunData | Improve this Doc View Source RunInBackground Declaration public virtual bool RunInBackground { get; } Property Value Type Description System.Boolean | Improve this Doc View Source ShouldNeverLogAtStart Tasks that should never log at start can override this. Returns true if this task should never log when it start. Declaration protected virtual bool ShouldNeverLogAtStart { get; } Property Value Type Description System.Boolean | Improve this Doc View Source ShouldNotRecordStats Tasks that should not record statistics can override this. Returns true if this task should never record its statistics. Declaration protected virtual bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Stop Declaration protected bool Stop { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source SupportsParams Sub classes that support parameters must override this method to return true if this task supports command line params. Declaration public virtual bool SupportsParams { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | 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 DoLogic() Perform the task once (ignoring repetitions specification). Return number of work items done by this task. For indexing that can be number of docs added. For warming that can be number of scanned items, etc. Declaration public abstract int DoLogic() Returns Type Description System.Int32 Number of work items done by this task. | Improve this Doc View Source GetLogMessage(Int32) Declaration protected virtual string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String | Improve this Doc View Source GetName() Returns the name. Declaration public virtual string GetName() Returns Type Description System.String | Improve this Doc View Source RunAndMaybeStats(Boolean) Run the task, record statistics. Declaration public int RunAndMaybeStats(bool reportStats) Parameters Type Name Description System.Boolean reportStats Returns Type Description System.Int32 Number of work items done by this task. | Improve this Doc View Source SetName(String) Sets the name. Declaration protected virtual void SetName(string name) Parameters Type Name Description System.String name The name to set. | Improve this Doc View Source SetParams(String) Set the params of this task. Declaration public virtual void SetParams(string params) Parameters Type Name Description System.String params Exceptions Type Condition System.NotSupportedException For tasks supporting command line parameters. | Improve this Doc View Source SetRunInBackground(Int32) Declaration public virtual void SetRunInBackground(int deltaPri) Parameters Type Name Description System.Int32 deltaPri | Improve this Doc View Source Setup() Task setup work that should not be measured for that specific task. By default it does nothing, but tasks can implement this, moving work from DoLogic() to this method. Only the work done in DoLogic() is measured for this task. Notice that higher level (sequence) tasks containing this task would then measure larger time than the sum of their contained tasks. Declaration public virtual void Setup() | Improve this Doc View Source StopNow() Declaration public virtual void StopNow() | Improve this Doc View Source TearDown() Task teardown work that should not be measured for that specific task. By default it does nothing, but tasks can implement this, moving work from DoLogic() to this method. Only the work done in DoLogic() is measured for this task. Notice that higher level (sequence) tasks containing this task would then measure larger time than the sum of their contained tasks. Declaration public virtual void TearDown() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PrintReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PrintReaderTask.html",
    "title": "Class PrintReaderTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrintReaderTask Opens a reader and prints basic statistics. Inheritance System.Object PerfTask PrintReaderTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class PrintReaderTask : PerfTask, IDisposable Constructors | Improve this Doc View Source PrintReaderTask(PerfRunData) Declaration public PrintReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTask.html",
    "title": "Class ReadTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReadTask Read index (abstract) task. Sub classes implement WithSearch , WithWarm , WithTraverse and WithRetrieve Inheritance System.Object PerfTask ReadTask SearchTask SearchTravTask SearchWithSortTask WarmTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ReadTask : PerfTask, IDisposable Remarks Note: All ReadTasks reuse the reader if it is already open. Otherwise a reader is opened at start and closed at the end. The search.num.hits config parameter sets the top number of hits to collect during searching. If print.hits.field is set, then each hit is printed along with the value of that field. Other side effects: none. Constructors | Improve this Doc View Source ReadTask(PerfRunData) Declaration public ReadTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source NumHits Specify the number of hits to retrieve. Tasks should override this if they want to restrict the number of hits that are collected during searching. Must be greater than 0. Returns 10 by default, or search.num.hits config if set. Declaration public virtual int NumHits { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumToHighlight The number of documents to highlight. 0 means no docs will be highlighted. Declaration public virtual int NumToHighlight { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Sort Declaration public virtual Sort Sort { get; } Property Value Type Description Sort | Improve this Doc View Source TraversalSize Specify the number of hits to traverse. Tasks should override this if they want to restrict the number of hits that are traversed when WithTraverse is true . Must be greater than 0. Read task calculates the traversal as: Math.Min(hits.Length, TraversalSize) Declaration public virtual int TraversalSize { get; } Property Value Type Description System.Int32 Remarks Unless overridden, the return value is System.Int32.MaxValue . | Improve this Doc View Source WithCollector Declaration public virtual bool WithCollector { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithMaxScore Whether maxScores should be computed (only useful with field sort) Declaration public virtual bool WithMaxScore { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithRetrieve Return true if, with search & results traversing, docs should be retrieved. Declaration public abstract bool WithRetrieve { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithScore Whether scores should be computed (only useful with field sort) Declaration public virtual bool WithScore { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithSearch Return true if search should be performed. Declaration public abstract bool WithSearch { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithTraverse Return true if, with search, results should be traversed. Declaration public abstract bool WithTraverse { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithWarm Return true if warming should be performed. Declaration public abstract bool WithWarm { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CreateCollector() Declaration protected virtual ICollector CreateCollector() Returns Type Description ICollector | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetBenchmarkHighlighter(Query) Return an appropriate highlighter to be used with highlighting tasks. Declaration protected virtual BenchmarkHighlighter GetBenchmarkHighlighter(Query q) Parameters Type Name Description Query q Returns Type Description BenchmarkHighlighter | Improve this Doc View Source GetFieldsToHighlight(Document) Define the fields to highlight. Base implementation returns all fields. Declaration protected virtual ICollection<string> GetFieldsToHighlight(Document document) Parameters Type Name Description Document document The Document . Returns Type Description System.Collections.Generic.ICollection < System.String > An ICollection{string} of Field names. | Improve this Doc View Source GetQueryMaker() Return query maker used for this task. Declaration public abstract IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker | Improve this Doc View Source RetrieveDoc(IndexReader, Int32) Declaration protected virtual Document RetrieveDoc(IndexReader ir, int id) Parameters Type Name Description IndexReader ir System.Int32 id Returns Type Description Document | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTokensTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTokensTask.html",
    "title": "Class ReadTokensTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReadTokensTask Simple task to test performance of tokenizers. It just creates a token stream for each field of the document and read all tokens out of that stream. Inheritance System.Object PerfTask ReadTokensTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ReadTokensTask : PerfTask, IDisposable Constructors | Improve this Doc View Source ReadTokensTask(PerfRunData) Declaration public ReadTokensTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReopenReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReopenReaderTask.html",
    "title": "Class ReopenReaderTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReopenReaderTask Reopens IndexReader and closes old IndexReader . Inheritance System.Object PerfTask ReopenReaderTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ReopenReaderTask : PerfTask, IDisposable Constructors | Improve this Doc View Source ReopenReaderTask(PerfRunData) Declaration public ReopenReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepAllTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepAllTask.html",
    "title": "Class RepAllTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RepAllTask Report all statistics with no aggregations. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepAllTask Implements System.IDisposable Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedDictionary<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepAllTask : ReportTask, IDisposable Constructors | Improve this Doc View Source RepAllTask(PerfRunData) Declaration public RepAllTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportAll(IList<TaskStats>) Report detailed statistics as a string. Declaration protected virtual Report ReportAll(IList<TaskStats> taskStats) Parameters Type Name Description System.Collections.Generic.IList < TaskStats > taskStats Returns Type Description Report The report. Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReportTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReportTask.html",
    "title": "Class ReportTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReportTask Report (abstract) task - all report tasks extend this task. Inheritance System.Object PerfTask ReportTask RepAllTask RepSumByNameRoundTask RepSumByNameTask RepSumByPrefTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.DoLogic() PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ReportTask : PerfTask, IDisposable Constructors | Improve this Doc View Source ReportTask(PerfRunData) Declaration public ReportTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source COLS Declaration protected static readonly string[] COLS Field Value Type Description System.String [] | Improve this Doc View Source ELAPSED Declaration protected static readonly string ELAPSED Field Value Type Description System.String | Improve this Doc View Source newline From here start the code used to generate the reports. Subclasses would use this part to generate reports. Declaration protected static readonly string newline Field Value Type Description System.String | Improve this Doc View Source OP Get a textual summary of the benchmark results, average from all test runs. Declaration protected static readonly string OP Field Value Type Description System.String | Improve this Doc View Source RECCNT Declaration protected static readonly string RECCNT Field Value Type Description System.String | Improve this Doc View Source RECSEC Declaration protected static readonly string RECSEC Field Value Type Description System.String | Improve this Doc View Source ROUND Declaration protected static readonly string ROUND Field Value Type Description System.String | Improve this Doc View Source RUNCNT Declaration protected static readonly string RUNCNT Field Value Type Description System.String | Improve this Doc View Source TOTMEM Declaration protected static readonly string TOTMEM Field Value Type Description System.String | Improve this Doc View Source USEDMEM Declaration protected static readonly string USEDMEM Field Value Type Description System.String Properties | Improve this Doc View Source ShouldNeverLogAtStart Declaration protected override bool ShouldNeverLogAtStart { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNeverLogAtStart See Also ShouldNeverLogAtStart | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source GenPartialReport(Int32, LinkedDictionary<String, TaskStats>, Int32) Declaration protected virtual Report GenPartialReport(int reported, LinkedDictionary<string, TaskStats> partOfTasks, int totalSize) Parameters Type Name Description System.Int32 reported J2N.Collections.Generic.LinkedDictionary < System.String , TaskStats > partOfTasks System.Int32 totalSize Returns Type Description Report | Improve this Doc View Source LongestOp(IEnumerable<TaskStats>) Find the longest op name out of completed tasks. Declaration protected virtual string LongestOp(IEnumerable<TaskStats> taskStats) Parameters Type Name Description System.Collections.Generic.IEnumerable < TaskStats > taskStats Completed tasks to be considered. Returns Type Description System.String The longest op name out of completed tasks. | Improve this Doc View Source TableTitle(String) Compute a title line for a report table. Declaration protected virtual string TableTitle(string longestOp) Parameters Type Name Description System.String longestOp Size of longest op name in the table. Returns Type Description System.String The table title line. | Improve this Doc View Source TaskReportLine(String, TaskStats) Compute a report line for the given task stat. Declaration protected virtual string TaskReportLine(string longestOp, TaskStats stat) Parameters Type Name Description System.String longestOp Size of longest op name in the table. TaskStats stat Task stat to be printed. Returns Type Description System.String The report line. Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSelectByPrefTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSelectByPrefTask.html",
    "title": "Class RepSelectByPrefTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RepSelectByPrefTask Report by-name-prefix statistics with no aggregations. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByPrefTask RepSelectByPrefTask Implements System.IDisposable Inherited Members RepSumByPrefTask.m_prefix RepSumByPrefTask.ReportSumByPrefix(IList<TaskStats>) RepSumByPrefTask.SetPrefix(String) RepSumByPrefTask.ToString() ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedDictionary<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSelectByPrefTask : RepSumByPrefTask, IDisposable Constructors | Improve this Doc View Source RepSelectByPrefTask(PerfRunData) Declaration public RepSelectByPrefTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides RepSumByPrefTask.DoLogic() | Improve this Doc View Source ReportSelectByPrefix(IList<TaskStats>) Declaration protected virtual Report ReportSelectByPrefix(IList<TaskStats> taskStats) Parameters Type Name Description System.Collections.Generic.IList < TaskStats > taskStats Returns Type Description Report Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameRoundTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameRoundTask.html",
    "title": "Class RepSumByNameRoundTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RepSumByNameRoundTask Report all statistics grouped/aggregated by name and round. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByNameRoundTask Implements System.IDisposable Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedDictionary<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByNameRoundTask : ReportTask, IDisposable Constructors | Improve this Doc View Source RepSumByNameRoundTask(PerfRunData) Declaration public RepSumByNameRoundTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportSumByNameRound(IList<TaskStats>) Report statistics as a string, aggregate for tasks named the same, and from the same round. Declaration protected virtual Report ReportSumByNameRound(IList<TaskStats> taskStats) Parameters Type Name Description System.Collections.Generic.IList < TaskStats > taskStats Returns Type Description Report The report. Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameTask.html",
    "title": "Class RepSumByNameTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RepSumByNameTask Report all statistics aggregated by name. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByNameTask Implements System.IDisposable Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedDictionary<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByNameTask : ReportTask, IDisposable Constructors | Improve this Doc View Source RepSumByNameTask(PerfRunData) Declaration public RepSumByNameTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportSumByName(IList<TaskStats>) Report statistics as a string, aggregate for tasks named the same. Declaration protected virtual Report ReportSumByName(IList<TaskStats> taskStats) Parameters Type Name Description System.Collections.Generic.IList < TaskStats > taskStats Returns Type Description Report The report. Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefRoundTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefRoundTask.html",
    "title": "Class RepSumByPrefRoundTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RepSumByPrefRoundTask Report all prefix matching statistics grouped/aggregated by name and round. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByPrefTask RepSumByPrefRoundTask Implements System.IDisposable Inherited Members RepSumByPrefTask.m_prefix RepSumByPrefTask.ReportSumByPrefix(IList<TaskStats>) RepSumByPrefTask.SetPrefix(String) RepSumByPrefTask.ToString() ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedDictionary<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByPrefRoundTask : RepSumByPrefTask, IDisposable Constructors | Improve this Doc View Source RepSumByPrefRoundTask(PerfRunData) Declaration public RepSumByPrefRoundTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides RepSumByPrefTask.DoLogic() | Improve this Doc View Source ReportSumByPrefixRound(IList<TaskStats>) Declaration protected virtual Report ReportSumByPrefixRound(IList<TaskStats> taskStats) Parameters Type Name Description System.Collections.Generic.IList < TaskStats > taskStats Returns Type Description Report Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefTask.html",
    "title": "Class RepSumByPrefTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RepSumByPrefTask Report by-name-prefix statistics aggregated by name. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByPrefTask RepSelectByPrefTask RepSumByPrefRoundTask Implements System.IDisposable Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedDictionary<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByPrefTask : ReportTask, IDisposable Constructors | Improve this Doc View Source RepSumByPrefTask(PerfRunData) Declaration public RepSumByPrefTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_prefix Declaration protected string m_prefix Field Value Type Description System.String Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportSumByPrefix(IList<TaskStats>) Declaration protected virtual Report ReportSumByPrefix(IList<TaskStats> taskStats) Parameters Type Name Description System.Collections.Generic.IList < TaskStats > taskStats Returns Type Description Report | Improve this Doc View Source SetPrefix(String) Declaration public virtual void SetPrefix(string prefix) Parameters Type Name Description System.String prefix | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PerfTask.ToString() See Also ToString () Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetInputsTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetInputsTask.html",
    "title": "Class ResetInputsTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ResetInputsTask Reset inputs so that the test run would behave, input wise, as if it just started. This affects e.g. the generation of docs and queries. Inheritance System.Object PerfTask ResetInputsTask ResetSystemSoftTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ResetInputsTask : PerfTask, IDisposable Constructors | Improve this Doc View Source ResetInputsTask(PerfRunData) Declaration public ResetInputsTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemEraseTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemEraseTask.html",
    "title": "Class ResetSystemEraseTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ResetSystemEraseTask Reset all index and input data and call gc, erase index and dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, deleted, closed. Index is erased. Directory is erased. Inheritance System.Object PerfTask ResetInputsTask ResetSystemSoftTask ResetSystemEraseTask Implements System.IDisposable Inherited Members ResetInputsTask.ShouldNotRecordStats PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ResetSystemEraseTask : ResetSystemSoftTask, IDisposable Constructors | Improve this Doc View Source ResetSystemEraseTask(PerfRunData) Declaration public ResetSystemEraseTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides ResetSystemSoftTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemSoftTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemSoftTask.html",
    "title": "Class ResetSystemSoftTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ResetSystemSoftTask Reset all index and input data and call gc, does NOT erase index/dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, closed. Index is NOT erased. Directory is NOT erased. Inheritance System.Object PerfTask ResetInputsTask ResetSystemSoftTask ResetSystemEraseTask Implements System.IDisposable Inherited Members ResetInputsTask.ShouldNotRecordStats PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ResetSystemSoftTask : ResetInputsTask, IDisposable Constructors | Improve this Doc View Source ResetSystemSoftTask(PerfRunData) Declaration public ResetSystemSoftTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides ResetInputsTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RollbackIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RollbackIndexTask.html",
    "title": "Class RollbackIndexTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RollbackIndexTask Rollback the index writer. Inheritance System.Object PerfTask RollbackIndexTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RollbackIndexTask : PerfTask, IDisposable Constructors | Improve this Doc View Source RollbackIndexTask(PerfRunData) Declaration public RollbackIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTask.html",
    "title": "Class SearchTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchTask Search task. Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Inheritance System.Object PerfTask ReadTask SearchTask SearchWithCollectorTask Implements System.IDisposable Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.TraversalSize ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTask : ReadTask, IDisposable Constructors | Improve this Doc View Source SearchTask(PerfRunData) Declaration public SearchTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetHighlightTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetHighlightTask.html",
    "title": "Class SearchTravRetHighlightTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchTravRetHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetHighlightTask Implements System.IDisposable Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize SearchTravTask.SupportsParams ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.NumHits ReadTask.Sort PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetHighlightTask : SearchTravTask, IDisposable Remarks Uses the SimpleHTMLFormatter for formatting. Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional multivalued, comma separated param string as: size[<traversal size>],highlight[<int>],maxFrags[<int>],mergeContiguous[<boolean>],fields[name1;name2;...] traversal size The number of hits to traverse, otherwise all will be traversed. highlight The number of the hits to highlight. Will always be less than or equal to traversal size. Default is System.Int32.MaxValue (i.e. hits.Length). maxFrags The maximum number of fragments to score by the highlighter. mergeContiguous true if contiguous fragments should be merged. fields The fields to highlight. If not specified all fields will be highlighted (or at least attempted). Example: \"SearchHlgtSameRdr\" SearchTravRetHighlight(size[10],highlight[10],mergeContiguous[true],maxFrags[3],fields[body]) > : 1000 Documents must be stored in order for this task to work. Additionally, term vector positions can be used as well. Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document and 1 for each fragment returned. Constructors | Improve this Doc View Source SearchTravRetHighlightTask(PerfRunData) Declaration public SearchTravRetHighlightTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_highlighter Declaration protected Highlighter m_highlighter Field Value Type Description Highlighter | Improve this Doc View Source m_maxDocCharsToAnalyze Declaration protected int m_maxDocCharsToAnalyze Field Value Type Description System.Int32 | Improve this Doc View Source m_maxFrags Declaration protected int m_maxFrags Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeContiguous Declaration protected bool m_mergeContiguous Field Value Type Description System.Boolean | Improve this Doc View Source m_numToHighlight Declaration protected int m_numToHighlight Field Value Type Description System.Int32 | Improve this Doc View Source m_paramFields Declaration protected ISet<string> m_paramFields Field Value Type Description System.Collections.Generic.ISet < System.String > Properties | Improve this Doc View Source NumToHighlight Declaration public override int NumToHighlight { get; } Property Value Type Description System.Int32 Overrides ReadTask.NumToHighlight | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve Methods | Improve this Doc View Source GetBenchmarkHighlighter(Query) Declaration protected override BenchmarkHighlighter GetBenchmarkHighlighter(Query q) Parameters Type Name Description Query q Returns Type Description BenchmarkHighlighter Overrides ReadTask.GetBenchmarkHighlighter(Query) | Improve this Doc View Source GetFieldsToHighlight(Document) Declaration protected override ICollection<string> GetFieldsToHighlight(Document document) Parameters Type Name Description Document document Returns Type Description System.Collections.Generic.ICollection < System.String > Overrides ReadTask.GetFieldsToHighlight(Document) | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides SearchTravTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides ReadTask.Setup() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetLoadFieldSelectorTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetLoadFieldSelectorTask.html",
    "title": "Class SearchTravRetLoadFieldSelectorTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchTravRetLoadFieldSelectorTask Search and Traverse and Retrieve docs task using a FieldVisitor loading only the requested fields. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetLoadFieldSelectorTask Implements System.IDisposable Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetLoadFieldSelectorTask : SearchTravTask, IDisposable Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional param: comma separated list of Fields to load. Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document. Constructors | Improve this Doc View Source SearchTravRetLoadFieldSelectorTask(PerfRunData) Declaration public SearchTravRetLoadFieldSelectorTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_fieldsToLoad Declaration protected ISet<string> m_fieldsToLoad Field Value Type Description System.Collections.Generic.ISet < System.String > Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.SupportsParams See Also SupportsParams | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve Methods | Improve this Doc View Source RetrieveDoc(IndexReader, Int32) Declaration protected override Document RetrieveDoc(IndexReader ir, int id) Parameters Type Name Description IndexReader ir System.Int32 id Returns Type Description Document Overrides ReadTask.RetrieveDoc(IndexReader, Int32) | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides SearchTravTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetTask.html",
    "title": "Class SearchTravRetTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchTravRetTask Search and Traverse and Retrieve docs task. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetTask Implements System.IDisposable Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize SearchTravTask.SetParams(String) SearchTravTask.SupportsParams ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetTask : SearchTravTask, IDisposable Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional param: traversal size (otherwise all results are traversed). Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document. Constructors | Improve this Doc View Source SearchTravRetTask(PerfRunData) Declaration public SearchTravRetTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetVectorHighlightTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetVectorHighlightTask.html",
    "title": "Class SearchTravRetVectorHighlightTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchTravRetVectorHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents by using FastVectorHighlighter . Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetVectorHighlightTask Implements System.IDisposable Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize SearchTravTask.SupportsParams ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.NumHits ReadTask.Sort PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetVectorHighlightTask : SearchTravTask, IDisposable Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional multivalued, comma separated param string as: size[<traversal size>],highlight[<int>],maxFrags[<int>],mergeContiguous[<boolean>],fields[name1;name2;...] traversal sizeThe number of hits to traverse, otherwise all will be traversed. highlightThe number of the hits to highlight. Will always be less than or equal to traversal size. Default is System.Int32.MaxValue (i.e. hits.Length). maxFragsThe maximum number of fragments to score by the highlighter. fragSizeThe length of fragments. fieldsThe fields to highlight. If not specified all fields will be highlighted (or at least attempted). Example: \"SearchVecHlgtSameRdr\" SearchTravRetVectorHighlight(size[10],highlight[10],maxFrags[3],fields[body]) > : 1000 Fields must be stored and term vector offsets and positions in order must be true for this task to work. Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document and 1 for each fragment returned. Constructors | Improve this Doc View Source SearchTravRetVectorHighlightTask(PerfRunData) Declaration public SearchTravRetVectorHighlightTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_fragSize Declaration protected int m_fragSize Field Value Type Description System.Int32 | Improve this Doc View Source m_highlighter Declaration protected FastVectorHighlighter m_highlighter Field Value Type Description FastVectorHighlighter | Improve this Doc View Source m_maxFrags Declaration protected int m_maxFrags Field Value Type Description System.Int32 | Improve this Doc View Source m_numToHighlight Declaration protected int m_numToHighlight Field Value Type Description System.Int32 | Improve this Doc View Source m_paramFields Declaration protected ISet<string> m_paramFields Field Value Type Description System.Collections.Generic.ISet < System.String > Properties | Improve this Doc View Source NumToHighlight Declaration public override int NumToHighlight { get; } Property Value Type Description System.Int32 Overrides ReadTask.NumToHighlight | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve Methods | Improve this Doc View Source GetBenchmarkHighlighter(Query) Declaration protected override BenchmarkHighlighter GetBenchmarkHighlighter(Query q) Parameters Type Name Description Query q Returns Type Description BenchmarkHighlighter Overrides ReadTask.GetBenchmarkHighlighter(Query) | Improve this Doc View Source GetFieldsToHighlight(Document) Declaration protected override ICollection<string> GetFieldsToHighlight(Document document) Parameters Type Name Description Document document Returns Type Description System.Collections.Generic.ICollection < System.String > Overrides ReadTask.GetFieldsToHighlight(Document) | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides SearchTravTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides ReadTask.Setup() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravTask.html",
    "title": "Class SearchTravTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchTravTask Search and Traverse task. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetHighlightTask SearchTravRetLoadFieldSelectorTask SearchTravRetTask SearchTravRetVectorHighlightTask Implements System.IDisposable Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravTask : ReadTask, IDisposable Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional param: traversal size (otherwise all results are traversed). Other side effects: counts additional 1 (record) for each traversed hit. Constructors | Improve this Doc View Source SearchTravTask(PerfRunData) Declaration public SearchTravTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_traversalSize Declaration protected int m_traversalSize Field Value Type Description System.Int32 Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams | Improve this Doc View Source TraversalSize Declaration public override int TraversalSize { get; } Property Value Type Description System.Int32 Overrides ReadTask.TraversalSize | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithCollectorTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithCollectorTask.html",
    "title": "Class SearchWithCollectorTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchWithCollectorTask Does search w/ a custom collector Inheritance System.Object PerfTask ReadTask SearchTask SearchWithCollectorTask Implements System.IDisposable Inherited Members ReadTask.DoLogic() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithScore ReadTask.WithMaxScore ReadTask.TraversalSize ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchWithCollectorTask : SearchTask, IDisposable Constructors | Improve this Doc View Source SearchWithCollectorTask(PerfRunData) Declaration public SearchWithCollectorTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_clnName Declaration protected string m_clnName Field Value Type Description System.String Properties | Improve this Doc View Source WithCollector Declaration public override bool WithCollector { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithCollector | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithWarm Methods | Improve this Doc View Source CreateCollector() Declaration protected override ICollector CreateCollector() Returns Type Description ICollector Overrides ReadTask.CreateCollector() | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides SearchTask.GetQueryMaker() | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides ReadTask.Setup() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithSortTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithSortTask.html",
    "title": "Class SearchWithSortTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchWithSortTask Does sort search on specified field. Inheritance System.Object PerfTask ReadTask SearchWithSortTask Implements System.IDisposable Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.TraversalSize ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchWithSortTask : ReadTask, IDisposable Constructors | Improve this Doc View Source SearchWithSortTask(PerfRunData) Declaration public SearchWithSortTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source Sort Declaration public override Sort Sort { get; } Property Value Type Description Sort Overrides ReadTask.Sort | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams | Improve this Doc View Source WithMaxScore Declaration public override bool WithMaxScore { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithMaxScore | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithScore Declaration public override bool WithScore { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithScore | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker() | Improve this Doc View Source SetParams(String) SortFields: field:type,field:type[,noscore][,nomaxscore] If noscore is present, then we turn off score tracking in TopFieldCollector . If nomaxscore is present, then we turn off maxScore tracking in TopFieldCollector . name:string,page:int,subject:string Declaration public override void SetParams(string sortField) Parameters Type Name Description System.String sortField Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SetPropTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SetPropTask.html",
    "title": "Class SetPropTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SetPropTask Set a performance test configuration property. A property may have a single value, or a sequence of values, separated by \":\". If a sequence of values is specified, each time a new round starts, the next (cyclic) value is taken. Other side effects: none. Takes mandatory param: \"name,value\" pair. Inheritance System.Object PerfTask SetPropTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SetPropTask : PerfTask, IDisposable Constructors | Improve this Doc View Source SetPropTask(PerfRunData) Declaration public SetPropTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Set the params (property name and value). Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Property name and value separated by ','. Overrides PerfTask.SetParams(String) Implements System.IDisposable See Also NewRoundTask"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.TaskSequence.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.TaskSequence.html",
    "title": "Class TaskSequence | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TaskSequence Sequence of parallel or sequential tasks. Inheritance System.Object PerfTask TaskSequence Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class TaskSequence : PerfTask, IDisposable Constructors | Improve this Doc View Source TaskSequence(PerfRunData, String, TaskSequence, Boolean) Declaration public TaskSequence(PerfRunData runData, string name, TaskSequence parent, bool parallel) Parameters Type Name Description PerfRunData runData System.String name TaskSequence parent System.Boolean parallel Fields | Improve this Doc View Source REPEAT_EXHAUST Declaration public static int REPEAT_EXHAUST Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsCollapsable Return true if can be collapsed in case it is outermost sequence. Declaration public virtual bool IsCollapsable { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsParallel Gets the parallel. Declaration public virtual bool IsParallel { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Gets the parent. Declaration public virtual TaskSequence Parent { get; } Property Value Type Description TaskSequence | Improve this Doc View Source Repetitions Gets the repetitions. Declaration public virtual int Repetitions { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Tasks Gets the tasks. Declaration public virtual IList<PerfTask> Tasks { get; } Property Value Type Description System.Collections.Generic.IList < PerfTask > Methods | Improve this Doc View Source AddTask(PerfTask) Declaration public virtual void AddTask(PerfTask task) Parameters Type Name Description PerfTask task | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides PerfTask.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PerfTask.Dispose(Boolean) | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() See Also DoLogic () | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides PerfTask.GetName() | Improve this Doc View Source GetRate() Returns the rate per minute: how many operations should be performed in a minute. If 0 this has no effect. Declaration public virtual int GetRate() Returns Type Description System.Int32 The rate per min: how many operations should be performed in a minute. | Improve this Doc View Source SetNoChildReport() Execute child tasks in a way that they do not report their time separately. Declaration public virtual void SetNoChildReport() | Improve this Doc View Source SetRate(Int32, Boolean) Declaration public virtual void SetRate(int rate, bool perMin) Parameters Type Name Description System.Int32 rate The rate to set. System.Boolean perMin | Improve this Doc View Source SetRepetitions(Int32) Sets the repetitions. Declaration public virtual void SetRepetitions(int repetitions) Parameters Type Name Description System.Int32 repetitions The repetitions to set. | Improve this Doc View Source SetRunTime(Double) Declaration public virtual void SetRunTime(double sec) Parameters Type Name Description System.Double sec | Improve this Doc View Source StopNow() Declaration public override void StopNow() Overrides PerfTask.StopNow() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PerfTask.ToString() See Also System.Object.ToString () Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.UpdateDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.UpdateDocTask.html",
    "title": "Class UpdateDocTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UpdateDocTask Update a document, using UpdateDocument(Term, IEnumerable<IIndexableField>) , optionally with of a certain size. Other side effects: none. Takes optional param: document size. Inheritance System.Object PerfTask UpdateDocTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class UpdateDocTask : PerfTask, IDisposable Constructors | Improve this Doc View Source UpdateDocTask(PerfRunData) Declaration public UpdateDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source SetParams(String) Set the params (docSize only) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params docSize, or 0 for no limit. Overrides PerfTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitForMergesTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitForMergesTask.html",
    "title": "Class WaitForMergesTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WaitForMergesTask Waits for merges to finish. Inheritance System.Object PerfTask WaitForMergesTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WaitForMergesTask : PerfTask, IDisposable Constructors | Improve this Doc View Source WaitForMergesTask(PerfRunData) Declaration public WaitForMergesTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitTask.html",
    "title": "Class WaitTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WaitTask Simply waits for the specified (via the parameter) amount of time. For example Wait(30s) waits for 30 seconds. This is useful with background tasks to control how long the tasks run. You can specify h, m, or s (hours, minutes, seconds) as the trailing time unit. No unit is interpreted as seconds. Inheritance System.Object PerfTask WaitTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WaitTask : PerfTask, IDisposable Constructors | Improve this Doc View Source WaitTask(PerfRunData) Declaration public WaitTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WarmTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WarmTask.html",
    "title": "Class WarmTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WarmTask Warm reader task: retrieve all reader documents. Inheritance System.Object PerfTask ReadTask WarmTask Implements System.IDisposable Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.TraversalSize ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WarmTask : ReadTask, IDisposable Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Other side effects: counts additional 1 (record) for each retrieved (non null) document. Constructors | Improve this Doc View Source WarmTask(PerfRunData) Declaration public WarmTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker() Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteEnwikiLineDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteEnwikiLineDocTask.html",
    "title": "Class WriteEnwikiLineDocTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WriteEnwikiLineDocTask A WriteLineDocTask which for Wikipedia input, will write category pages to another file, while remaining pages will be written to the original file. The categories file is derived from the original file, by adding a prefix \"categories-\". Inheritance System.Object PerfTask WriteLineDocTask WriteEnwikiLineDocTask Implements System.IDisposable Inherited Members WriteLineDocTask.FIELDS_HEADER_INDICATOR WriteLineDocTask.SEP WriteLineDocTask.DEFAULT_FIELDS WriteLineDocTask.DEFAULT_SUFFICIENT_FIELDS WriteLineDocTask.m_fname WriteLineDocTask.WriteHeader(TextWriter) WriteLineDocTask.GetLogMessage(Int32) WriteLineDocTask.DoLogic() WriteLineDocTask.SetParams(String) WriteLineDocTask.SupportsParams PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WriteEnwikiLineDocTask : WriteLineDocTask, IDisposable Constructors | Improve this Doc View Source WriteEnwikiLineDocTask(PerfRunData) Declaration public WriteEnwikiLineDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source CategoriesLineFile(FileInfo) Compose categories line file out of original line file Declaration public static FileInfo CategoriesLineFile(FileInfo f) Parameters Type Name Description System.IO.FileInfo f Returns Type Description System.IO.FileInfo | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides WriteLineDocTask.Dispose(Boolean) | Improve this Doc View Source LineFileOut(Document) Declaration protected override TextWriter LineFileOut(Document doc) Parameters Type Name Description Document doc Returns Type Description System.IO.TextWriter Overrides WriteLineDocTask.LineFileOut(Document) Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteLineDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteLineDocTask.html",
    "title": "Class WriteLineDocTask | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WriteLineDocTask A task which writes documents, one line per document. Each line is in the following format: title <TAB> date <TAB> body. The output of this task can be consumed by LineDocSource and is intended to save the IO overhead of opening a file per document to be indexed. Inheritance System.Object PerfTask WriteLineDocTask WriteEnwikiLineDocTask Implements System.IDisposable Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum 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.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WriteLineDocTask : PerfTask, IDisposable Remarks The format of the output is set according to the output file extension. Compression is recommended when the output file is expected to be large. See info on file extensions in FileType . Supports the following parameters: line.file.outthe name of the file to write the output to. That parameter is mandatory. NOTE: the file is re-created. line.fieldswhich fields should be written in each line. (optional, default: DEFAULT_FIELDS ). sufficient.fields list of field names, separated by comma, which, if all of them are missing, the document will be skipped. For example, to require that at least one of f1,f2 is not empty, specify: \"f1,f2\" in this field. To specify that no field is required, i.e. that even empty docs should be emitted, specify \",\" (optional, default: DEFAULT_SUFFICIENT_FIELDS ). NOTE: this class is not thread-safe and if used by multiple threads the output is unspecified (as all will write to the same output file in a non-synchronized way). Constructors | Improve this Doc View Source WriteLineDocTask(PerfRunData) Declaration public WriteLineDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source DEFAULT_FIELDS Fields to be written by default Declaration public static readonly string[] DEFAULT_FIELDS Field Value Type Description System.String [] | Improve this Doc View Source DEFAULT_SUFFICIENT_FIELDS Default fields which at least one of them is required to not skip the doc. Declaration public static readonly string DEFAULT_SUFFICIENT_FIELDS Field Value Type Description System.String | Improve this Doc View Source FIELDS_HEADER_INDICATOR Declaration public static readonly string FIELDS_HEADER_INDICATOR Field Value Type Description System.String | Improve this Doc View Source m_fname Declaration protected readonly string m_fname Field Value Type Description System.String | Improve this Doc View Source SEP Declaration public static readonly char SEP Field Value Type Description System.Char Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PerfTask.Dispose(Boolean) | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source LineFileOut(Document) Selects output line file by written doc. Default: original output line file. Declaration protected virtual TextWriter LineFileOut(Document doc) Parameters Type Name Description Document doc Returns Type Description System.IO.TextWriter | Improve this Doc View Source SetParams(String) Set the params (docSize only) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params docSize, or 0 for no limit. Overrides PerfTask.SetParams(String) | Improve this Doc View Source WriteHeader(TextWriter) Write header to the lines file - indicating how to read the file later. Declaration protected virtual void WriteHeader(TextWriter out) Parameters Type Name Description System.IO.TextWriter out Implements System.IDisposable"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Algorithm.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Algorithm.html",
    "title": "Class Algorithm | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Algorithm Test algorithm, as read from file Inheritance System.Object Algorithm 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) Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class Algorithm Constructors | Improve this Doc View Source Algorithm(PerfRunData) Read algorithm from file. Property examined: alt.tasks.packages == comma separated list of alternate Assembly names where tasks would be searched for, when not found in the default Assembly (that of PerfTask ). If the same task class appears in more than one Assembly, the Assembly indicated first in this list will be used. The Lucene.Net implementation differs from Lucene in that all referenced assemblies are also scanned for the type. However, alt.tasks.packages may be included for assemblies that are not referenced in your project. Declaration public Algorithm(PerfRunData runData) Parameters Type Name Description PerfRunData runData perf-run-data used at running the tasks. Exceptions Type Condition System.Exception if errors while parsing the algorithm. Methods | Improve this Doc View Source Execute() Execute this algorithm. Declaration public virtual void Execute() | Improve this Doc View Source ExtractTasks() Expert: for test purposes, return all tasks participating in this algorithm. Declaration public virtual IList<PerfTask> ExtractTasks() Returns Type Description System.Collections.Generic.IList < PerfTask > All tasks participating in this algorithm. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.AnalyzerFactory.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.AnalyzerFactory.html",
    "title": "Class AnalyzerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzerFactory A factory to create an analyzer. Inheritance System.Object AnalyzerFactory 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) Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public sealed class AnalyzerFactory Constructors | Improve this Doc View Source AnalyzerFactory(IList<CharFilterFactory>, TokenizerFactory, IList<TokenFilterFactory>) Declaration public AnalyzerFactory(IList<CharFilterFactory> charFilterFactories, TokenizerFactory tokenizerFactory, IList<TokenFilterFactory> tokenFilterFactories) Parameters Type Name Description System.Collections.Generic.IList < CharFilterFactory > charFilterFactories TokenizerFactory tokenizerFactory System.Collections.Generic.IList < TokenFilterFactory > tokenFilterFactories Properties | Improve this Doc View Source Name Declaration public string Name { get; set; } Property Value Type Description System.String | Improve this Doc View Source OffsetGap Declaration public int? OffsetGap { get; set; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source PositionIncrementGap Declaration public int? PositionIncrementGap { get; set; } Property Value Type Description System.Nullable < System.Int32 > Methods | Improve this Doc View Source Create() Declaration public Analyzer Create() Returns Type Description Analyzer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also AnalyzerFactoryTask"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Config.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Config.html",
    "title": "Class Config | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Config Perf run configuration properties. Inheritance System.Object Config 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.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class Config Remarks Numeric property containing \":\", e.g. \"10 💯 5\" is interpreted as array of numeric values. It is extracted once, on first use, and maintain a round number to return the appropriate value. The config property \"work.dir\" tells where is the root of docs data dirs and indexes dirs. It is set to either of: value supplied for it in the alg file; otherwise, value of environment variable \"benchmark.work.dir\"; otherwise, \"work\". Constructors | Improve this Doc View Source Config(IDictionary<String, String>) Create config without algorithm - useful for a programmatic perf test. Declaration public Config(IDictionary<string, string> props) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > props Configuration properties. | Improve this Doc View Source Config(TextReader) Read both algorithm and config properties. Declaration public Config(TextReader algReader) Parameters Type Name Description System.IO.TextReader algReader From where to read algorithm and config properties. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Properties | Improve this Doc View Source AlgorithmText Gets the algorithmText. Declaration public virtual string AlgorithmText { get; } Property Value Type Description System.String | Improve this Doc View Source RoundNumber Gets the round number. Declaration public virtual int RoundNumber { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(String, Boolean) Return a boolean property. If the property contain \":\", e.g. \"true.true.false\", it is interpreted as array of booleans. It is extracted once, on first call to Get() it, and a by-round-value is returned. Declaration public virtual bool Get(string name, bool dflt) Parameters Type Name Description System.String name Name of property. System.Boolean dflt Default value. Returns Type Description System.Boolean A System.Boolean property. | Improve this Doc View Source Get(String, Double) Return a double property. If the property contain \":\", e.g. \"10 💯 5\", it is interpreted as array of doubles. It is extracted once, on first call to Get() it, and a by-round-value is returned. Declaration public virtual double Get(string name, double dflt) Parameters Type Name Description System.String name Name of property. System.Double dflt Default value. Returns Type Description System.Double A double property. | Improve this Doc View Source Get(String, Int32) Return an System.Int32 property. If the property contain \":\", e.g. \"10 💯 5\", it is interpreted as array of ints. It is extracted once, on first call to Get() it, and a by-round-value is returned. Declaration public virtual int Get(string name, int dflt) Parameters Type Name Description System.String name Name of property. System.Int32 dflt Default value. Returns Type Description System.Int32 An System.Int32 property. | Improve this Doc View Source Get(String, String) Return a string property. Declaration public virtual string Get(string name, string dflt) Parameters Type Name Description System.String name Name of property. System.String dflt Default value. Returns Type Description System.String A string property. | Improve this Doc View Source GetColsNamesForValsByRound() Gets names of params set by round, for reports title. Declaration public virtual string GetColsNamesForValsByRound() Returns Type Description System.String | Improve this Doc View Source GetColsValuesForValsByRound(Int32) Gets values of params set by round, for reports lines. Declaration public virtual string GetColsValuesForValsByRound(int roundNum) Parameters Type Name Description System.Int32 roundNum Returns Type Description System.String | Improve this Doc View Source NewRound() Increment the round number, for config values that are extracted by round number. Declaration public virtual int NewRound() Returns Type Description System.Int32 The new round number. | Improve this Doc View Source Set(String, String) Set a property. Note: once a multiple values property is set, it can no longer be modified. Declaration public virtual void Set(string name, string value) Parameters Type Name Description System.String name Name of property. System.String value Either single or multiple property value (multiple values are separated by \":\")"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileType.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileType.html",
    "title": "Enum FileType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum FileType File format type. Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public enum FileType Fields Name Description BZIP2 BZIP2 is automatically used for .bz2 and .bzip2 extensions. GZIP GZIP is automatically used for .gz and .gzip extensions. PLAIN Plain text is used for anything which is not GZIP or BZIP."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileUtils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileUtils.html",
    "title": "Class FileUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FileUtils File utilities. Inheritance System.Object FileUtils 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.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class FileUtils Methods | Improve this Doc View Source FullyDelete(DirectoryInfo) Delete files and directories, even if non-empty. Declaration public static bool FullyDelete(DirectoryInfo dir) Parameters Type Name Description System.IO.DirectoryInfo dir File or directory. Returns Type Description System.Boolean true on success, false if no or part of files have been deleted. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Formatter.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Formatter.html",
    "title": "Class Formatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Formatter Formatting utilities (for reports). Inheritance System.Object Formatter 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.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class Formatter Methods | Improve this Doc View Source Format(Int32, Double, String) Declaration public static string Format(int numFracDigits, double f, string col) Parameters Type Name Description System.Int32 numFracDigits System.Double f System.String col Returns Type Description System.String | Improve this Doc View Source Format(Int32, Single, String) Padd a number from left. Declaration public static string Format(int numFracDigits, float f, string col) Parameters Type Name Description System.Int32 numFracDigits Number of digits in fraction part - must be 0 or 1 or 2. System.Single f Number to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source Format(Int32, String) Pad a number from left. Declaration public static string Format(int n, string col) Parameters Type Name Description System.Int32 n Number to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source Format(String, String) Pad a string from right. Declaration public static string Format(string s, string col) Parameters Type Name Description System.String s String to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source FormatPaddLeft(String, String) Pad a string from left. Declaration public static string FormatPaddLeft(string s, string col) Parameters Type Name Description System.String s String to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source FormatPaddRight(Int32, Double, String) Declaration public static string FormatPaddRight(int numFracDigits, double f, string col) Parameters Type Name Description System.Int32 numFracDigits System.Double f System.String col Returns Type Description System.String | Improve this Doc View Source FormatPaddRight(Int32, Single, String) Pad a number from right. Declaration public static string FormatPaddRight(int numFracDigits, float f, string col) Parameters Type Name Description System.Int32 numFracDigits Number of digits in fraction part - must be 0 or 1 or 2. System.Single f Number to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Utils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Utils <!-- 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. --> Utilities used for the benchmark, and for the reports. Classes Algorithm Test algorithm, as read from file AnalyzerFactory A factory to create an analyzer. Config Perf run configuration properties. FileUtils File utilities. Formatter Formatting utilities (for reports). StreamUtils Stream utilities. Enums FileType File format type."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.StreamUtils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.StreamUtils.html",
    "title": "Class StreamUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StreamUtils Stream utilities. Inheritance System.Object StreamUtils 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.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class StreamUtils Fields | Improve this Doc View Source BUFFER_SIZE Buffer size used across the benchmark package Declaration public static readonly int BUFFER_SIZE Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetInputStream(FileInfo) Returns an System.IO.Stream over the requested file. This method attempts to identify the appropriate System.IO.Stream instance to return based on the file name (e.g., if it ends with .bz2 or .bzip, return a 'bzip' System.IO.Stream ). Declaration public static Stream GetInputStream(FileInfo file) Parameters Type Name Description System.IO.FileInfo file Returns Type Description System.IO.Stream | Improve this Doc View Source GetOutputStream(FileInfo) Returns an System.IO.Stream over the requested file, identifying the appropriate System.IO.Stream instance similar to GetInputStream(FileInfo) . Declaration public static Stream GetOutputStream(FileInfo file) Parameters Type Name Description System.IO.FileInfo file Returns Type Description System.IO.Stream"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Constants.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Constants.html",
    "title": "Class Constants | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Constants Various benchmarking constants (mostly defaults) Inheritance System.Object Constants 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.Benchmarks Assembly : Lucene.Net.Benchmark.dll Syntax public class Constants Fields | Improve this Doc View Source BOOLEANS Declaration public static bool[] BOOLEANS Field Value Type Description System.Boolean [] | Improve this Doc View Source DEFAULT_LOG_STEP Declaration public static readonly int DEFAULT_LOG_STEP Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAXIMUM_DOCUMENTS Declaration public static readonly int DEFAULT_MAXIMUM_DOCUMENTS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_RUN_COUNT Declaration public static readonly int DEFAULT_RUN_COUNT Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SCALE_UP Declaration public static readonly int DEFAULT_SCALE_UP Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.html",
    "title": "Lucene.Net.Benchmarks | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks <!-- 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. --> The benchmark contribution contains tools for benchmarking Lucene using standard, freely available corpora. ANT will download the corpus automatically, place it in a temp directory and then unpack it to the working.dir directory specified in the build. The temp directory and working directory can be safely removed after a run. However, the next time the task is run, it will need to download the files again. Classes implementing the Benchmarker interface should have a no-argument constructor if they are to be used with the Driver class. The Driver class is provided for convenience only. Feel free to implement your own main class for your benchmarker. The StandardBenchmarker is meant to be just that, a standard that runs out of the box with no configuration or changes needed. Other benchmarking classes may derive from it to provide alternate views or to take in command line options. When reporting benchmarking runs you should state any alterations you have made. To run the short version of the StandardBenchmarker, call \"ant run-micro-standard\". This should take a minute or so to complete and give you a preliminary idea of how your change affects the code To run the long version of the StandardBenchmarker, call \"ant run-standard\". This takes considerably longer. The original code for these classes was donated by Andrzej Bialecki at http://issues.apache.org/jira/browse/LUCENE-675 and has been updated by Grant Ingersoll to make some parts of the code reusable in other benchmarkers Classes Constants Various benchmarking constants (mostly defaults)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.html",
    "title": "Namespace Lucene.Net.Benchmarks.Quality | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Quality <!-- 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. --> Search Quality Benchmarking. This package allows to benchmark search quality of a Lucene application. In order to use this package you should provide: A IndexSearcher . Quality queries . Judging object . Reporting object . For benchmarking TREC collections with TREC QRels, take a look at the trec package . Here is a sample code used to run the TREC 2006 queries 701-850 on the .Gov2 collection: File topicsFile = new File(\"topics-701-850.txt\"); File qrelsFile = new File(\"qrels-701-850.txt\"); IndexReader ir = DirectoryReader.open(directory): IndexSearcher searcher = new IndexSearcher(ir); int maxResults = 1000; String docNameField = \"docname\"; PrintWriter logger = new PrintWriter(System.out,true); // use trec utilities to read trec topics into quality queries TrecTopicsReader qReader = new TrecTopicsReader(); QualityQuery qqs[] = qReader.readQueries(new BufferedReader(new FileReader(topicsFile))); // prepare judge, with trec utilities that read from a QRels file Judge judge = new TrecJudge(new BufferedReader(new FileReader(qrelsFile))); // validate topics & judgments match each other judge.validateData(qqs, logger); // set the parsing of quality queries into Lucene queries. QualityQueryParser qqParser = new SimpleQQParser(\"title\", \"body\"); // run the benchmark QualityBenchmark qrun = new QualityBenchmark(qqs, qqParser, searcher, docNameField); SubmissionReport submitLog = null; QualityStats stats[] = qrun.execute(maxResults, judge, submitLog, logger); // print an avarage sum of the results QualityStats avg = QualityStats.average(stats); avg.log(\"SUMMARY\",2,logger, \" \"); Some immediate ways to modify this program to your needs are: To run on different formats of queries and judgements provide your own Judge and Quality queries . Create sophisticated Lucene queries by supplying a different Quality query parser . Classes QualityBenchmark Main entry point for running a quality benchmark. There are two main configurations for running a quality benchmark: Against existing judgements. For submission (e.g. for a contest). The first configuration requires a non null IJudge . The second configuration requires a non null SubmissionReport . QualityQuery A QualityQuery has an ID and some name-value pairs. The ID allows to map the quality query with its judgements. The name-value pairs are used by a IQualityQueryParser to create a Lucene Query . It is very likely that name-value-pairs would be mapped into fields in a Lucene query, but it is up to the QualityQueryParser how to map - e.g. all values in a single field, or each pair as its own field, etc., - and this of course must match the way the searched index was constructed. QualityStats Results of quality benchmark run for a single query or for a set of queries. QualityStats.RecallPoint A certain rank in which a relevant doc was found. Interfaces IJudge Judge if a document is relevant for a quality query. IQualityQueryParser Parse a QualityQuery into a Lucene query."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IJudge.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IJudge.html",
    "title": "Interface IJudge | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IJudge Judge if a document is relevant for a quality query. Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public interface IJudge Methods | Improve this Doc View Source IsRelevant(String, QualityQuery) Judge if document docName is relevant for the given quality query. Declaration bool IsRelevant(string docName, QualityQuery query) Parameters Type Name Description System.String docName Name of doc tested for relevancy. QualityQuery query Tested quality query. Returns Type Description System.Boolean true if relevant, false if not. | Improve this Doc View Source MaxRecall(QualityQuery) Return the maximal recall for the input quality query. It is the number of relevant docs this IJudge \"knows\" for the query. Declaration int MaxRecall(QualityQuery query) Parameters Type Name Description QualityQuery query The query whose maximal recall is needed. Returns Type Description System.Int32 | Improve this Doc View Source ValidateData(QualityQuery[], TextWriter) Validate that queries and this IJudge match each other. To be perfectly valid, this Judge must have some data for each and every input quality query, and must not have any data on any other quality query. Note : the quality benchmark run would not fail in case of imperfect validity, just a warning message would be logged. Declaration bool ValidateData(QualityQuery[] qq, TextWriter logger) Parameters Type Name Description QualityQuery [] qq Quality queries to be validated. System.IO.TextWriter logger If not null , validation issues are logged. Returns Type Description System.Boolean true if perfectly valid, false if not."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IQualityQueryParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IQualityQueryParser.html",
    "title": "Interface IQualityQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IQualityQueryParser Parse a QualityQuery into a Lucene query. Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public interface IQualityQueryParser Methods | Improve this Doc View Source Parse(QualityQuery) Parse a given QualityQuery into a Lucene query. Declaration Query Parse(QualityQuery qq) Parameters Type Name Description QualityQuery qq The quality query to be parsed. Returns Type Description Query Exceptions Type Condition System.FormatException If parsing failed."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityBenchmark.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityBenchmark.html",
    "title": "Class QualityBenchmark | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QualityBenchmark Main entry point for running a quality benchmark. There are two main configurations for running a quality benchmark: Against existing judgements. For submission (e.g. for a contest). The first configuration requires a non null IJudge . The second configuration requires a non null SubmissionReport . Inheritance System.Object QualityBenchmark 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.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityBenchmark Constructors | Improve this Doc View Source QualityBenchmark(QualityQuery[], IQualityQueryParser, IndexSearcher, String) Create a QualityBenchmark . Declaration public QualityBenchmark(QualityQuery[] qqs, IQualityQueryParser qqParser, IndexSearcher searcher, string docNameField) Parameters Type Name Description QualityQuery [] qqs Quality queries to run. IQualityQueryParser qqParser Parser for turning QualityQueries into Lucene Queries. IndexSearcher searcher Index to be searched. System.String docNameField Name of field containing the document name. This allows to extract the doc name for search results, and is important for judging the results. Fields | Improve this Doc View Source m_docNameField index field to extract doc name for each search result; used for judging the results. Declaration protected string m_docNameField Field Value Type Description System.String | Improve this Doc View Source m_qqParser Parser for turning QualityQueries into Lucene Queries. Declaration protected IQualityQueryParser m_qqParser Field Value Type Description IQualityQueryParser | Improve this Doc View Source m_qualityQueries Quality Queries that this quality benchmark would execute. Declaration protected QualityQuery[] m_qualityQueries Field Value Type Description QualityQuery [] | Improve this Doc View Source m_searcher Index to be searched. Declaration protected IndexSearcher m_searcher Field Value Type Description IndexSearcher Properties | Improve this Doc View Source MaxQueries The maximum number of quality queries to run. Useful at debugging. Declaration public virtual int MaxQueries { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxResults The maximum number of results to collect for each quality query. Declaration public virtual int MaxResults { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Execute(IJudge, SubmissionReport, TextWriter) Run the quality benchmark. Declaration public virtual QualityStats[] Execute(IJudge judge, SubmissionReport submitRep, TextWriter qualityLog) Parameters Type Name Description IJudge judge The judge that can tell if a certain result doc is relevant for a certain quality query. If null, no judgements would be made. Usually null for a submission run. SubmissionReport submitRep Submission report is created if non null. System.IO.TextWriter qualityLog If not null, quality run data would be printed for each query. Returns Type Description QualityStats [] QualityStats of each quality query that was executed. Exceptions Type Condition System.Exception If quality benchmark failed to run."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityQuery.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityQuery.html",
    "title": "Class QualityQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QualityQuery A QualityQuery has an ID and some name-value pairs. The ID allows to map the quality query with its judgements. The name-value pairs are used by a IQualityQueryParser to create a Lucene Query . It is very likely that name-value-pairs would be mapped into fields in a Lucene query, but it is up to the QualityQueryParser how to map - e.g. all values in a single field, or each pair as its own field, etc., - and this of course must match the way the searched index was constructed. Inheritance System.Object QualityQuery Implements System.IComparable < QualityQuery > 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.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityQuery : IComparable<QualityQuery> Constructors | Improve this Doc View Source QualityQuery(String, IDictionary<String, String>) Create a QualityQuery with given ID and name-value pairs. Declaration public QualityQuery(string queryID, IDictionary<string, string> nameValPairs) Parameters Type Name Description System.String queryID ID of this quality query. System.Collections.Generic.IDictionary < System.String , System.String > nameValPairs The contents of this quality query. Properties | Improve this Doc View Source QueryID Gets the ID of this query. The ID allows to map the quality query with its judgements. Declaration public virtual string QueryID { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(QualityQuery) For a nicer sort of input queries before running them. Try first as ints, fall back to string if not int. Declaration public virtual int CompareTo(QualityQuery other) Parameters Type Name Description QualityQuery other Returns Type Description System.Int32 | Improve this Doc View Source GetNames() Return all the names of name-value-pairs in this QualityQuery . Declaration public virtual string[] GetNames() Returns Type Description System.String [] | Improve this Doc View Source GetValue(String) Return the value of a certain name-value pair. Declaration public virtual string GetValue(string name) Parameters Type Name Description System.String name The name whose value should be returned. Returns Type Description System.String Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.html",
    "title": "Class QualityStats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QualityStats Results of quality benchmark run for a single query or for a set of queries. Inheritance System.Object QualityStats 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.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityStats Constructors | Improve this Doc View Source QualityStats(Double, Int64) Construct a QualityStats object with anticipated maximal number of relevant hits. Declaration public QualityStats(double maxGoodPoints, long searchTime) Parameters Type Name Description System.Double maxGoodPoints maximal possible relevant hits. System.Int64 searchTime Fields | Improve this Doc View Source MAX_POINTS Number of points for which precision is computed. Declaration public static readonly int MAX_POINTS Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocNamesExtractTime Returns the time it took to extract doc names for judging the measured query, in milliseconds. Declaration public virtual long DocNamesExtractTime { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxGoodPoints Returns the maximal number of good points. This is the number of relevant docs known by the judge for the measured query. Declaration public virtual double MaxGoodPoints { get; } Property Value Type Description System.Double | Improve this Doc View Source MRR Returns the Mean reciprocal rank over the queries or RR for a single query. Declaration public virtual double MRR { get; } Property Value Type Description System.Double Remarks Reciprocal rank is defined as 1/r where r is the rank of the first correct result, or 0 if there are no correct results within the top 5 results. This follows the definition in Question Answering - CNLP at the TREC-10 Question Answering Track . | Improve this Doc View Source NumGoodPoints Returns the number of good points (only relevant points). Declaration public virtual double NumGoodPoints { get; } Property Value Type Description System.Double | Improve this Doc View Source NumPoints Returns the number of points (both relevant and irrelevant points). Declaration public virtual double NumPoints { get; } Property Value Type Description System.Double | Improve this Doc View Source Recall Return the recall: |{relevant hits found}| / |{relevant hits existing}|. Declaration public virtual double Recall { get; } Property Value Type Description System.Double | Improve this Doc View Source SearchTime Returns the search time in milliseconds for the measured query. Declaration public virtual long SearchTime { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source AddResult(Int32, Boolean, Int64) Add a (possibly relevant) doc. Declaration public virtual void AddResult(int n, bool isRelevant, long docNameExtractTime) Parameters Type Name Description System.Int32 n rank of the added doc (its ordinal position within the query results). System.Boolean isRelevant true if the added doc is relevant, false otherwise. System.Int64 docNameExtractTime | Improve this Doc View Source Average(QualityStats[]) Create a QualityStats object that is the average of the input QualityStats objects. Declaration public static QualityStats Average(QualityStats[] stats) Parameters Type Name Description QualityStats [] stats array of input stats to be averaged. Returns Type Description QualityStats an average over the input stats. | Improve this Doc View Source GetAvp() Return the average precision at recall points. Declaration public virtual double GetAvp() Returns Type Description System.Double | Improve this Doc View Source GetPrecisionAt(Int32) Return the precision at rank n: |{relevant hits within first n hits}| / n . Declaration public virtual double GetPrecisionAt(int n) Parameters Type Name Description System.Int32 n requested precision point, must be at least 1 and at most MAX_POINTS . Returns Type Description System.Double | Improve this Doc View Source GetRecallPoints() Returns the recallPoints. Declaration public virtual QualityStats.RecallPoint[] GetRecallPoints() Returns Type Description QualityStats.RecallPoint [] | Improve this Doc View Source Log(String, Int32, TextWriter, String) Log information on this QualityStats object. Declaration public virtual void Log(string title, int paddLines, TextWriter logger, string prefix) Parameters Type Name Description System.String title System.Int32 paddLines System.IO.TextWriter logger Logger. System.String prefix prefix before each log line."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.RecallPoint.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.RecallPoint.html",
    "title": "Class QualityStats.RecallPoint | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QualityStats.RecallPoint A certain rank in which a relevant doc was found. Inheritance System.Object QualityStats.RecallPoint 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.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class RecallPoint Properties | Improve this Doc View Source Rank Returns the rank: where on the list of returned docs this relevant doc appeared. Declaration public virtual int Rank { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Recall Returns the recall: how many relevant docs were returned up to this point, inclusive. Declaration public virtual double Recall { get; } Property Value Type Description System.Double"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.html",
    "title": "Namespace Lucene.Net.Benchmarks.Quality.Trec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Quality.Trec <!-- 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. --> Utilities for Trec related quality benchmarking, feeding from Trec Topics and QRels inputs. Classes QueryDriver Command-line tool for doing a TREC evaluation run. Trec1MQReader Read topics of TREC 1MQ track. Expects this topic format - qnum:qtext Comment lines starting with '#' are ignored. All topics will have a single name value pair. TrecJudge Judge if given document is relevant to given quality query, based on Trec format for judgements. TrecTopicsReader Read TREC topics."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.QueryDriver.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.QueryDriver.html",
    "title": "Class QueryDriver | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryDriver Command-line tool for doing a TREC evaluation run. Inheritance System.Object QueryDriver 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.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class QueryDriver Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.Trec1MQReader.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.Trec1MQReader.html",
    "title": "Class Trec1MQReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Trec1MQReader Read topics of TREC 1MQ track. Expects this topic format - qnum:qtext Comment lines starting with '#' are ignored. All topics will have a single name value pair. Inheritance System.Object Trec1MQReader 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.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class Trec1MQReader Constructors | Improve this Doc View Source Trec1MQReader(String) Constructor for Trec's 1MQ TopicsReader Declaration public Trec1MQReader(string name) Parameters Type Name Description System.String name Name of name-value pair to set for all queries. Methods | Improve this Doc View Source ReadQueries(TextReader) Read quality queries from trec 1MQ format topics file. Declaration public virtual QualityQuery[] ReadQueries(TextReader reader) Parameters Type Name Description System.IO.TextReader reader where queries are read from. Returns Type Description QualityQuery [] the result quality queries. Exceptions Type Condition System.IO.IOException if cannot read the queries."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecJudge.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecJudge.html",
    "title": "Class TrecJudge | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecJudge Judge if given document is relevant to given quality query, based on Trec format for judgements. Inheritance System.Object TrecJudge Implements IJudge 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.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecJudge : IJudge Constructors | Improve this Doc View Source TrecJudge(TextReader) Constructor from a reader. Declaration public TrecJudge(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Where judgments are read from. Remarks Expected input format: qnum 0 doc-name is-relevant Two sample lines: 19 0 doc303 1 19 0 doc7295 0 Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Methods | Improve this Doc View Source IsRelevant(String, QualityQuery) Declaration public virtual bool IsRelevant(string docName, QualityQuery query) Parameters Type Name Description System.String docName QualityQuery query Returns Type Description System.Boolean | Improve this Doc View Source MaxRecall(QualityQuery) Declaration public virtual int MaxRecall(QualityQuery query) Parameters Type Name Description QualityQuery query Returns Type Description System.Int32 | Improve this Doc View Source ValidateData(QualityQuery[], TextWriter) Declaration public virtual bool ValidateData(QualityQuery[] qq, TextWriter logger) Parameters Type Name Description QualityQuery [] qq System.IO.TextWriter logger Returns Type Description System.Boolean Implements IJudge"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecTopicsReader.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecTopicsReader.html",
    "title": "Class TrecTopicsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrecTopicsReader Read TREC topics. Inheritance System.Object TrecTopicsReader 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.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecTopicsReader Remarks Expects this topic format - <top> <num> Number: nnn <title> title of the topic <desc> Description: description of the topic <narr> Narrative: \"story\" composed by assessors. </top> Comment lines starting with '#' are ignored. Constructors | Improve this Doc View Source TrecTopicsReader() Constructor for Trec's TopicsReader Declaration public TrecTopicsReader() Methods | Improve this Doc View Source ReadQueries(TextReader) Read quality queries from trec format topics file. Declaration public virtual QualityQuery[] ReadQueries(TextReader reader) Parameters Type Name Description System.IO.TextReader reader where queries are read from. Returns Type Description QualityQuery [] the result quality queries. Exceptions Type Condition System.IO.IOException if cannot read the queries."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.DocNameExtractor.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.DocNameExtractor.html",
    "title": "Class DocNameExtractor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocNameExtractor Utility: extract doc names from an index Inheritance System.Object DocNameExtractor 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.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class DocNameExtractor Constructors | Improve this Doc View Source DocNameExtractor(String) Constructor for DocNameExtractor . Declaration public DocNameExtractor(string docNameField) Parameters Type Name Description System.String docNameField name of the stored field containing the doc name. Methods | Improve this Doc View Source DocName(IndexSearcher, Int32) Extract the name of the input doc from the index. Declaration public virtual string DocName(IndexSearcher searcher, int docid) Parameters Type Name Description IndexSearcher searcher access to the index. System.Int32 docid ID of doc whose name is needed. Returns Type Description System.String the name of the input doc as extracted from the index. Exceptions Type Condition System.IO.IOException if cannot extract the doc name from the index."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.html",
    "title": "Namespace Lucene.Net.Benchmarks.Quality.Utils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Quality.Utils <!-- 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. --> Miscellaneous utilities for search quality benchmarking: query parsing, submission reports. Classes DocNameExtractor Utility: extract doc names from an index QualityQueriesFinder Suggest Quality queries based on an index contents. Utility class, used for making quality test benchmarks. SimpleQQParser Simplistic quality query parser. A Lucene query is created by passing the value of the specified QualityQuery name-value pair(s) into a Lucene's QueryParser using StandardAnalyzer . SubmissionReport Create a log ready for submission. Extend this class and override Report(QualityQuery, TopDocs, String, IndexSearcher) to create different reports."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.QualityQueriesFinder.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.QualityQueriesFinder.html",
    "title": "Class QualityQueriesFinder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QualityQueriesFinder Suggest Quality queries based on an index contents. Utility class, used for making quality test benchmarks. Inheritance System.Object QualityQueriesFinder 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.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityQueriesFinder Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args {index-dir} Exceptions Type Condition System.IO.IOException if cannot access the index."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SimpleQQParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SimpleQQParser.html",
    "title": "Class SimpleQQParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleQQParser Simplistic quality query parser. A Lucene query is created by passing the value of the specified QualityQuery name-value pair(s) into a Lucene's QueryParser using StandardAnalyzer . Inheritance System.Object SimpleQQParser Implements IQualityQueryParser 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.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleQQParser : IQualityQueryParser Constructors | Improve this Doc View Source SimpleQQParser(String, String) Constructor of a simple qq parser. Declaration public SimpleQQParser(string qqName, string indexField) Parameters Type Name Description System.String qqName Name-value pair of quality query to use for creating the query. System.String indexField Corresponding index field. | Improve this Doc View Source SimpleQQParser(String[], String) Constructor of a simple qq parser. Declaration public SimpleQQParser(string[] qqNames, string indexField) Parameters Type Name Description System.String [] qqNames Name-value pairs of quality query to use for creating the query. System.String indexField Corresponding index field. Methods | Improve this Doc View Source Parse(QualityQuery) Declaration public virtual Query Parse(QualityQuery qq) Parameters Type Name Description QualityQuery qq Returns Type Description Query See Also Parse ( QualityQuery ) Implements IQualityQueryParser"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SubmissionReport.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SubmissionReport.html",
    "title": "Class SubmissionReport | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SubmissionReport Create a log ready for submission. Extend this class and override Report(QualityQuery, TopDocs, String, IndexSearcher) to create different reports. Inheritance System.Object SubmissionReport 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.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class SubmissionReport Constructors | Improve this Doc View Source SubmissionReport(TextWriter, String) Constructor for SubmissionReport . Declaration public SubmissionReport(TextWriter logger, string name) Parameters Type Name Description System.IO.TextWriter logger If null , no submission data is created. System.String name Name of this run. Methods | Improve this Doc View Source Flush() Declaration public virtual void Flush() | Improve this Doc View Source Report(QualityQuery, TopDocs, String, IndexSearcher) Report a search result for a certain quality query. Declaration public virtual void Report(QualityQuery qq, TopDocs td, string docNameField, IndexSearcher searcher) Parameters Type Name Description QualityQuery qq quality query for which the results are reported. TopDocs td search results for the query. System.String docNameField stored field used for fetching the result doc name. IndexSearcher searcher index access for fetching doc name."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractReuters.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractReuters.html",
    "title": "Class ExtractReuters | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExtractReuters Split the Reuters SGML documents into Simple Text files containing: Title, Date, Dateline, Body Inheritance System.Object ExtractReuters 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.Benchmarks.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class ExtractReuters Constructors | Improve this Doc View Source ExtractReuters(DirectoryInfo, DirectoryInfo) Declaration public ExtractReuters(DirectoryInfo reutersDir, DirectoryInfo outputDir) Parameters Type Name Description System.IO.DirectoryInfo reutersDir System.IO.DirectoryInfo outputDir Methods | Improve this Doc View Source Extract() Declaration public virtual void Extract() | Improve this Doc View Source ExtractFile(FileInfo) Override if you wish to change what is extracted Declaration protected virtual void ExtractFile(FileInfo sgmFile) Parameters Type Name Description System.IO.FileInfo sgmFile | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractWikipedia.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractWikipedia.html",
    "title": "Class ExtractWikipedia | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExtractWikipedia Extract the downloaded Wikipedia dump into separate files for indexing. Inheritance System.Object ExtractWikipedia 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.Benchmarks.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class ExtractWikipedia Constructors | Improve this Doc View Source ExtractWikipedia(DocMaker, DirectoryInfo) Declaration public ExtractWikipedia(DocMaker docMaker, DirectoryInfo outputDir) Parameters Type Name Description DocMaker docMaker System.IO.DirectoryInfo outputDir Fields | Improve this Doc View Source count Declaration public static int count Field Value Type Description System.Int32 | Improve this Doc View Source m_docMaker Declaration protected DocMaker m_docMaker Field Value Type Description DocMaker Methods | Improve this Doc View Source Create(String, String, String, String) Declaration public virtual void Create(string id, string title, string time, string body) Parameters Type Name Description System.String id System.String title System.String time System.String body | Improve this Doc View Source Directory(Int32, DirectoryInfo) Declaration public virtual DirectoryInfo Directory(int count, DirectoryInfo directory) Parameters Type Name Description System.Int32 count System.IO.DirectoryInfo directory Returns Type Description System.IO.DirectoryInfo | Improve this Doc View Source Extract() Declaration public virtual void Extract() | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.html",
    "title": "Namespace Lucene.Net.Benchmarks.Utils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Utils <!-- 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. --> Benchmark Utility functions. Classes ExtractReuters Split the Reuters SGML documents into Simple Text files containing: Title, Date, Dateline, Body ExtractWikipedia Extract the downloaded Wikipedia dump into separate files for indexing."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Util.EnglishNumberFormatExtensions.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Util.EnglishNumberFormatExtensions.html",
    "title": "Class EnglishNumberFormatExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnglishNumberFormatExtensions Extension methods to spell out numbers into English. Inspiration: https://stackoverflow.com/a/2601001 Inheritance System.Object EnglishNumberFormatExtensions 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.Util Assembly : Lucene.Net.Benchmark.dll Syntax public static class EnglishNumberFormatExtensions Methods | Improve this Doc View Source ToWords(Int32) Returns the spelled-out English words for the provided value . Declaration public static string ToWords(this int value) Parameters Type Name Description System.Int32 value Returns Type Description System.String | Improve this Doc View Source ToWords(Int64) Returns the spelled-out English words for the provided value . Declaration public static string ToWords(this long value) Parameters Type Name Description System.Int64 value Returns Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Util.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Util.html",
    "title": "Namespace Lucene.Net.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util <!-- 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. --> Some utility classes. Classes EnglishNumberFormatExtensions Extension methods to spell out numbers into English. Inspiration: https://stackoverflow.com/a/2601001"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.Attributes2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.Attributes2.html",
    "title": "Class Attributes2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Attributes2 SAX2 extension helper for additional Attributes information, implementing the Attributes2 interface. Inheritance System.Object Attributes Attributes2 Implements IAttributes2 IAttributes Inherited Members Attributes.Length Attributes.GetURI(Int32) Attributes.GetLocalName(Int32) Attributes.GetQName(Int32) Attributes.GetType(Int32) Attributes.GetValue(Int32) Attributes.GetIndex(String, String) Attributes.GetIndex(String) Attributes.GetType(String, String) Attributes.GetType(String) Attributes.GetValue(String, String) Attributes.GetValue(String) Attributes.Clear() Attributes.SetAttribute(Int32, String, String, String, String, String) Attributes.SetURI(Int32, String) Attributes.SetLocalName(Int32, String) Attributes.SetQName(Int32, String) Attributes.SetType(Int32, String) Attributes.SetValue(Int32, 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 : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public class Attributes2 : Attributes, IAttributes2, IAttributes Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . This is not part of core-only SAX2 distributions. The specified flag for each attribute will always be true, unless it has been set to false in the copy constructor or using SetSpecified(Int32, Boolean) . Similarly, the declared flag for each attribute will always be false, except for defaulted attributes ( specified is false), non-CDATA attributes, or when it is set to true using SetDeclared(Int32, Boolean) . If you change an attribute's type by hand, you may need to modify its declared flag to match. Constructors | Improve this Doc View Source Attributes2() Construct a new, empty Attributes2 object. Declaration public Attributes2() | Improve this Doc View Source Attributes2(IAttributes) Copy an existing Attributes or Attributes2 object. If the object implements Attributes2, values of the specified and declared flags for each attribute are copied. Otherwise the flag values are defaulted to assume no DTD was used, unless there is evidence to the contrary (such as attributes with type other than CDATA, which must have been declared ). This constructor is especially useful inside a StartElement(String, String, String, IAttributes) event. Declaration public Attributes2(IAttributes atts) Parameters Type Name Description IAttributes atts The existing IAttributes object. Methods | Improve this Doc View Source AddAttribute(String, String, String, String, String) Add an attribute to the end of the list, setting its \"specified\" flag to true. To set that flag's value to false, use SetSpecified(Int32, Boolean) . Unless the attribute type is CDATA, this attribute is marked as being declared in the DTD. To set that flag's value to true for CDATA attributes, use SetDeclared(Int32, Boolean) . Declaration public override void AddAttribute(string uri, string localName, string qName, string type, string value) Parameters Type Name Description System.String uri System.String localName System.String qName System.String type System.String value Overrides Attributes.AddAttribute(String, String, String, String, String) See Also AddAttribute ( System.String , System.String , System.String , System.String , System.String ) | Improve this Doc View Source IsDeclared(Int32) Returns the current value of the attribute's \"declared\" flag. Declaration public bool IsDeclared(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source IsDeclared(String) Returns the current value of the attribute's \"declared\" flag. Declaration public bool IsDeclared(string qName) Parameters Type Name Description System.String qName Returns Type Description System.Boolean | Improve this Doc View Source IsDeclared(String, String) Returns the current value of the attribute's \"declared\" flag. Declaration public bool IsDeclared(string uri, string localName) Parameters Type Name Description System.String uri System.String localName Returns Type Description System.Boolean | Improve this Doc View Source IsSpecified(Int32) Returns the current value of an attribute's \"specified\" flag. Declaration public bool IsSpecified(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.Boolean current flag value Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not identify an attribute. | Improve this Doc View Source IsSpecified(String) Returns the current value of an attribute's \"specified\" flag. Declaration public bool IsSpecified(string qName) Parameters Type Name Description System.String qName The XML qualified (prefixed) name. Returns Type Description System.Boolean current flag value Exceptions Type Condition System.ArgumentException When the supplied name does not identify an attribute. | Improve this Doc View Source IsSpecified(String, String) Returns the current value of an attribute's \"specified\" flag. Declaration public bool IsSpecified(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Boolean current flag value Exceptions Type Condition System.ArgumentException When the supplied names do not identify an attribute. | Improve this Doc View Source RemoveAttribute(Int32) Declaration public override void RemoveAttribute(int index) Parameters Type Name Description System.Int32 index Overrides Attributes.RemoveAttribute(Int32) | Improve this Doc View Source SetAttributes(IAttributes) Copy an entire Attributes object. The \"specified\" flags are assigned as true, and \"declared\" flags as false (except when an attribute's type is not CDATA), unless the object is an Attributes2 object. In that case those flag values are all copied. Declaration public override void SetAttributes(IAttributes atts) Parameters Type Name Description IAttributes atts Overrides Attributes.SetAttributes(IAttributes) See Also SetAttributes ( IAttributes ) | Improve this Doc View Source SetDeclared(Int32, Boolean) Assign a value to the \"declared\" flag of a specific attribute. This is normally needed only for attributes of type CDATA, including attributes whose type is changed to or from CDATA. Declaration public virtual void SetDeclared(int index, bool value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.Boolean value The desired flag value. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not identify an attribute. | Improve this Doc View Source SetSpecified(Int32, Boolean) Assign a value to the \"specified\" flag of a specific attribute. This is the only way this flag can be cleared, except clearing by initialization with the copy constructor. Declaration public virtual void SetSpecified(int index, bool value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.Boolean value The desired flag value. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not identify an attribute. Implements IAttributes2 IAttributes"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.DefaultHandler2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.DefaultHandler2.html",
    "title": "Class DefaultHandler2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultHandler2 This class extends the SAX2 base handler class to support the SAX2 ILexicalHandler , IDeclHandler , and IEntityResolver2 extensions. Except for overriding the original SAX1 ResolveEntity(String, String) method the added handler methods just return. Subclassers may override everything on a method-by-method basis. Inheritance System.Object DefaultHandler DefaultHandler2 Implements IDTDHandler IContentHandler IErrorHandler ILexicalHandler IDeclHandler IEntityResolver2 IEntityResolver Inherited Members DefaultHandler.NotationDecl(String, String, String) DefaultHandler.UnparsedEntityDecl(String, String, String, String) DefaultHandler.SetDocumentLocator(ILocator) DefaultHandler.StartDocument() DefaultHandler.EndDocument() DefaultHandler.StartPrefixMapping(String, String) DefaultHandler.EndPrefixMapping(String) DefaultHandler.StartElement(String, String, String, IAttributes) DefaultHandler.EndElement(String, String, String) DefaultHandler.Characters(Char[], Int32, Int32) DefaultHandler.IgnorableWhitespace(Char[], Int32, Int32) DefaultHandler.ProcessingInstruction(String, String) DefaultHandler.SkippedEntity(String) DefaultHandler.Warning(SAXParseException) DefaultHandler.Error(SAXParseException) DefaultHandler.FatalError(SAXParseException) 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 : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public class DefaultHandler2 : DefaultHandler, IDTDHandler, IContentHandler, IErrorHandler, ILexicalHandler, IDeclHandler, IEntityResolver2, IEntityResolver Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . Note: this class might yet learn that the SetDocumentLocator(ILocator) call might be passed a Locator2 object, and that the ContentHandler.startElement() call might be passed a Attributes2 object. Constructors | Improve this Doc View Source DefaultHandler2() Constructs a handler which ignores all parsing events. Declaration public DefaultHandler2() Methods | Improve this Doc View Source AttributeDecl(String, String, String, String, String) Declaration public virtual void AttributeDecl(string eName, string aName, string type, string mode, string value) Parameters Type Name Description System.String eName System.String aName System.String type System.String mode System.String value | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public virtual void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source ElementDecl(String, String) Declaration public virtual void ElementDecl(string name, string model) Parameters Type Name Description System.String name System.String model | Improve this Doc View Source EndCDATA() Declaration public virtual void EndCDATA() | Improve this Doc View Source EndDTD() Declaration public virtual void EndDTD() | Improve this Doc View Source EndEntity(String) Declaration public virtual void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source ExternalEntityDecl(String, String, String) Declaration public virtual void ExternalEntityDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name System.String publicId System.String systemId | Improve this Doc View Source GetExternalSubset(String, String) Tells the parser that if no external subset has been declared in the document text, none should be used. Declaration public virtual InputSource GetExternalSubset(string name, string baseURI) Parameters Type Name Description System.String name System.String baseURI Returns Type Description InputSource | Improve this Doc View Source InternalEntityDecl(String, String) Declaration public virtual void InternalEntityDecl(string name, string value) Parameters Type Name Description System.String name System.String value | Improve this Doc View Source ResolveEntity(String, String) Invokes ResolveEntity(String, String, String, String) with null entity name and base URI. You only need to override that method to use this class. Declaration public override InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId System.String systemId Returns Type Description InputSource Overrides DefaultHandler.ResolveEntity(String, String) | Improve this Doc View Source ResolveEntity(String, String, String, String) Tells the parser to resolve the systemId against the baseURI and read the entity text from that resulting absolute URI. Note that because the older ResolveEntity(String, String) , method is overridden to call this one, this method may sometimes be invoked with null name and baseURI , and with the systemId already absolutized. Declaration public virtual InputSource ResolveEntity(string name, string publicId, string baseURI, string systemId) Parameters Type Name Description System.String name System.String publicId System.String baseURI System.String systemId Returns Type Description InputSource | Improve this Doc View Source StartCDATA() Declaration public virtual void StartCDATA() | Improve this Doc View Source StartDTD(String, String, String) Declaration public virtual void StartDTD(string name, string publicId, string systemId) Parameters Type Name Description System.String name System.String publicId System.String systemId | Improve this Doc View Source StartEntity(String) Declaration public virtual void StartEntity(string name) Parameters Type Name Description System.String name Implements IDTDHandler IContentHandler IErrorHandler ILexicalHandler IDeclHandler IEntityResolver2 IEntityResolver"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.html",
    "title": "Namespace Sax.Ext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Sax.Ext Classes Attributes2 SAX2 extension helper for additional Attributes information, implementing the Attributes2 interface. DefaultHandler2 This class extends the SAX2 base handler class to support the SAX2 ILexicalHandler , IDeclHandler , and IEntityResolver2 extensions. Except for overriding the original SAX1 ResolveEntity(String, String) method the added handler methods just return. Subclassers may override everything on a method-by-method basis. Locator2 SAX2 extension helper for holding additional Entity information, implementing the Locator2 interface. Interfaces IAttributes2 SAX2 extension to augment the per-attribute information provided though IAttributes . If an implementation supports this extension, the attributes provided in IContentHandler will implement this interface, and the http://xml.org/sax/features/use-attributes2 feature flag will have the value true . This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . XMLReader implementations are not required to support this information, and it is not part of core-only SAX2 distributions. Note that if an attribute was defaulted ( !IsSpecified() ) it will of necessity also have been declared( IsDeclared() ) in the DTD. Similarly if an attribute's type is anything except CDATA, then it must have been declared. IDeclHandler SAX2 extension handler for DTD declaration events. IEntityResolver2 Extended interface for mapping external entity references to input sources, or providing a missing external subset. The EntityResolver property is used to provide implementations of this interface to parsers. When a parser uses the methods in this interface, the ResolveEntity(String, String, String, String) method (in this interface) is used instead of the older (SAX 1.0) ResolveEntity(String, String) method. ILexicalHandler SAX2 extension handler for lexical events. ILocator2 SAX2 extension to augment the entity information provided though a ILocator ."
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.IAttributes2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.IAttributes2.html",
    "title": "Interface IAttributes2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAttributes2 SAX2 extension to augment the per-attribute information provided though IAttributes . If an implementation supports this extension, the attributes provided in IContentHandler will implement this interface, and the http://xml.org/sax/features/use-attributes2 feature flag will have the value true . This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . XMLReader implementations are not required to support this information, and it is not part of core-only SAX2 distributions. Note that if an attribute was defaulted ( !IsSpecified() ) it will of necessity also have been declared( IsDeclared() ) in the DTD. Similarly if an attribute's type is anything except CDATA, then it must have been declared. Inherited Members IAttributes.Length IAttributes.GetURI(Int32) IAttributes.GetLocalName(Int32) IAttributes.GetQName(Int32) IAttributes.GetType(Int32) IAttributes.GetValue(Int32) IAttributes.GetIndex(String, String) IAttributes.GetIndex(String) IAttributes.GetType(String, String) IAttributes.GetType(String) IAttributes.GetValue(String, String) IAttributes.GetValue(String) Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface IAttributes2 : IAttributes Methods | Improve this Doc View Source IsDeclared(Int32) Returns false unless the attribute was declared in the DTD. This helps distinguish two kinds of attributes that SAX reports as CDATA: ones that were declared (and hence are usually valid), and those that were not (and which are never valid). Declaration bool IsDeclared(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.Boolean true if the attribute was declared in the DTD, false otherwise. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not identify an attribute. | Improve this Doc View Source IsDeclared(String) Returns false unless the attribute was declared in the DTD. This helps distinguish two kinds of attributes that SAX reports as CDATA: ones that were declared (and hence are usually valid), and those that were not (and which are never valid). Declaration bool IsDeclared(string qName) Parameters Type Name Description System.String qName The XML qualified (prefixed) name. Returns Type Description System.Boolean true if the attribute was declared in the DTD, false otherwise. Exceptions Type Condition System.ArgumentException When the supplied name does not identify an attribute. | Improve this Doc View Source IsDeclared(String, String) Returns false unless the attribute was declared in the DTD. This helps distinguish two kinds of attributes that SAX reports as CDATA: ones that were declared (and hence are usually valid), and those that were not (and which are never valid). Declaration bool IsDeclared(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Boolean true if the attribute was declared in the DTD, false otherwise. Remarks Remember that since DTDs do not \"understand\" namespaces, the namespace URI associated with an attribute may not have come from the DTD.The declaration will have applied to the attribute's qName Exceptions Type Condition System.ArgumentException When the supplied names do not identify an attribute. | Improve this Doc View Source IsSpecified(Int32) Returns true unless the attribute value was provided by DTD defaulting. Declaration bool IsSpecified(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.Boolean true if the value was found in the XML text, false if the value was provided by DTD defaulting. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not identify an attribute. | Improve this Doc View Source IsSpecified(String) Returns true unless the attribute value was provided by DTD defaulting. Declaration bool IsSpecified(string qName) Parameters Type Name Description System.String qName The XML qualified (prefixed) name. Returns Type Description System.Boolean true if the value was found in the XML text, false if the value was provided by DTD defaulting. Exceptions Type Condition System.ArgumentException When the supplied name does not identify an attribute. | Improve this Doc View Source IsSpecified(String, String) Returns true unless the attribute value was provided by DTD defaulting. Declaration bool IsSpecified(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Boolean true if the value was found in the XML text, false if the value was provided by DTD defaulting. Remarks Remember that since DTDs do not \"understand\" namespaces, the namespace URI associated with an attribute may not have come from the DTD.The declaration will have applied to the attribute's qName . Exceptions Type Condition System.ArgumentException When the supplied names do not identify an attribute."
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.IDeclHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.IDeclHandler.html",
    "title": "Interface IDeclHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IDeclHandler SAX2 extension handler for DTD declaration events. Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface IDeclHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This is an optional extension handler for SAX2 to provide more complete information about DTD declarations in an XML document. XML readers are not required to recognize this handler, and it is not part of core-only SAX2 distributions. Note that data-related DTD declarations (unparsed entities and notations) are already reported through the IDTDHandler interface. If you are using the declaration handler together with a lexical handler, all of the events will occur between the StartDTD(String, String, String) and the EndDTD() events. To set the DeclHandler for an XML reader, use the SetProperty(String, Object) method with the property name http://xml.org/sax/properties/declaration-handler and an object implementing this interface (or null) as the value. If the reader does not report declaration events, it will throw a SAXNotRecognizedException when you attempt to register the handler. Methods | Improve this Doc View Source AttributeDecl(String, String, String, String, String) Report an attribute type declaration. Declaration void AttributeDecl(string eName, string aName, string type, string mode, string value) Parameters Type Name Description System.String eName The name of the associated element. System.String aName The name of the attribute. System.String type A string representing the attribute type. System.String mode A string representing the attribute defaulting mode (\"#IMPLIED\", \"#REQUIRED\", or \"#FIXED\") or null if none of these applies. System.String value A string representing the attribute's default value, or null if there is none. Remarks Only the effective (first) declaration for an attribute will be reported.The type will be one of the strings \"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"NMTOKEN\", \"NMTOKENS\", \"ENTITY\", \"ENTITIES\", a parenthesized token group with the separator \"|\" and all whitespace removed, or the word \"NOTATION\" followed by a space followed by a parenthesized token group with all whitespace removed. The value will be the value as reported to applications, appropriately normalized and with entity and character references expanded. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source ElementDecl(String, String) Report an element type declaration. Declaration void ElementDecl(string name, string model) Parameters Type Name Description System.String name The element type name. System.String model The content model as a normalized string. Remarks The content model will consist of the string \"EMPTY\", the string \"ANY\", or a parenthesised group, optionally followed by an occurrence indicator.The model will be normalized so that all parameter entities are fully resolved and all whitespace is removed,and will include the enclosing parentheses.Other normalization (such as removing redundant parentheses or simplifying occurrence indicators) is at the discretion of the parser. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source ExternalEntityDecl(String, String, String) Report a parsed external entity declaration. Declaration void ExternalEntityDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The name of the entity. If it is a parameter entity, the name will begin with '%'. System.String publicId The entity's public identifier, or null if none was given. System.String systemId The entity's system identifier. Remarks Only the effective (first) declaration for each entity will be reported. If the system identifier is a URL, the parser must resolve it fully before passing it to the application. Exceptions Type Condition SAXException The application may raise an exception. See Also InternalEntityDecl(String, String) UnparsedEntityDecl ( System.String , System.String , System.String , System.String ) | Improve this Doc View Source InternalEntityDecl(String, String) Report an internal entity declaration. Declaration void InternalEntityDecl(string name, string value) Parameters Type Name Description System.String name The name of the entity. If it is a parameter entity, the name will begin with '%'. System.String value The replacement text of the entity. Remarks Only the effective (first) declaration for each entity will be reported.All parameter entities in the value will be expanded, but general entities will not. Exceptions Type Condition SAXException The application may raise an exception. See Also ExternalEntityDecl(String, String, String) UnparsedEntityDecl ( System.String , System.String , System.String , System.String )"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.IEntityResolver2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.IEntityResolver2.html",
    "title": "Interface IEntityResolver2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IEntityResolver2 Extended interface for mapping external entity references to input sources, or providing a missing external subset. The EntityResolver property is used to provide implementations of this interface to parsers. When a parser uses the methods in this interface, the ResolveEntity(String, String, String, String) method (in this interface) is used instead of the older (SAX 1.0) ResolveEntity(String, String) method. Inherited Members IEntityResolver.ResolveEntity(String, String) Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface IEntityResolver2 : IEntityResolver Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . If a SAX application requires the customized handling which this interface defines for external entities, it must ensure that it uses an XMLReader with the http://xml.org/sax/features/use-entity-resolver2 feature flag set to true (which is its default value when the feature is recognized). If that flag is unrecognized, or its value is false, or the resolver does not implement this interface, then only the IEntityResolver method will be used. That supports three categories of application that modify entity resolution. Old Style applications won't know about this interface; they will provide an IEntityResolver . Transitional Mode provide an IEntityResolver2 and automatically get the benefit of its methods in any systems (parsers or other tools) supporting it, due to polymorphism. Both Old Style and Transitional Mode applications will work with any SAX2 parser. New style applications will fail to run except on SAX2 parsers that support this particular feature. They will insist that feature flag have a value of \"true\", and the IEntityResolver2 implementation they provide might throw an exception if the original SAX 1.0 style entity resolution method is invoked. Methods | Improve this Doc View Source GetExternalSubset(String, String) Allows applications to provide an external subset for documents that don't explicitly define one. Documents with DOCTYPE declarations that omit an external subset can thus augment the declarations available for validation, entity processing, and attribute processing (normalization, defaulting, and reporting types including ID). This augmentation is reported through the StartDTD(String, String, String) method as if the document text had originally included the external subset; this callback is made before any internal subset data or errors are reported. This method can also be used with documents that have no DOCTYPE declaration.When the root element is encountered, but no DOCTYPE declaration has been seen, this method is invoked.If it returns a value for the external subset, that root element is declared to be the root element, giving the effect of splicing a DOCTYPE declaration at the end the prolog of a document that could not otherwise be valid. The sequence of parser callbacks in that case logically resembles this: ... comments and PIs from the prolog (as usual) StartDTD(\"rootName\", source.getPublicId (), source.getSystemId ()); StartEntity(\"[dtd]\"); ... declarations, comments, and PIs from the external subset EndEntity(\"[dtd]\"); EndDTD(); ... then the rest of the document(as usual) StartElement(..., \"rootName\", ...); Note that the InputSource gets no further resolution. Implementations of this method may wish to invoke ResolveEntity(String, String, String, String) to gain benefits such as use of local caches of DTD entities.Also, this method will never be used by a (non - validating) processor that is not including external parameter entities. Uses for this method include facilitating data validation when interoperating with XML processors that would always require undesirable network accesses for external entities, or which for other reasons adopt a \"no DTDs\" policy. Non - validation motives include forcing documents to include DTDs so that attributes are handled consistently. For example, an XPath processor needs to know which attibutes have type \"ID\" before it can process a widely used type of reference. Warning: Returning an external subset modifies the input document.By providing definitions for general entities, it can make a malformed document appear to be well formed. Declaration InputSource GetExternalSubset(string name, string baseURI) Parameters Type Name Description System.String name Identifies the document root element. This name comes from a DOCTYPE declaration (where available) or from the actual root element. System.String baseURI The document's base URI, serving as an additional hint for selecting the external subset. This is always an absolute URI, unless it is null because the XMLReader was given an InputSource without one. Returns Type Description InputSource An InputSource object describing the new external subset to be used by the parser, or null to indicate that no external subset is provided. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. System.IO.IOException Probably indicating a failure to create a new System.IO.Stream or System.IO.TextReader , or an illegal URL. | Improve this Doc View Source ResolveEntity(String, String, String, String) Allows applications to map references to external entities into input sources, or tell the parser it should use conventional URI resolution. This method is only called for external entities which have been properly declared. This method provides more flexibility than the IEntityResolver interface, supporting implementations of more complex catalogue schemes such as the one defined by the OASIS XML Catalogs specification. Parsers configured to use this resolver method will call it to determine the input source to use for any external entity being included because of a reference in the XML text. That excludes the document entity, and any external entity returned by GetExternalSubset(String, String) . When a(non - validating) processor is configured not to include a class of entities(parameter or general) through use of feature flags, this method is not invoked for such entities. Note that the entity naming scheme used here is the same one used in the ILexicalHandler , or in the SkippedEntity(String) method. Declaration InputSource ResolveEntity(string name, string publicId, string baseURI, string systemId) Parameters Type Name Description System.String name Identifies the external entity being resolved. Either \"[dtd]\" for the external subset, or a name starting with \"%\" to indicate a parameter entity, or else the name of a general entity. This is never null when invoked by a SAX2 System.String publicId The public identifier of the external entity being referenced (normalized as required by the XML specification), or null if none was supplied. System.String baseURI The URI with respect to which relative systemIDs are interpreted. This is always an absolute URI, unless it is null (likely because the IXMLReader was given an InputSource without one). This URI is defined by the XML specification to be the one associated with the \"<\" starting the relevant declaration. System.String systemId The system identifier of the external entity being referenced; either a relative or absolute URI. This is never null when invoked by a SAX2 parser; only declared entities, and any external subset, are resolved by such parsers. Returns Type Description InputSource An InputSource object describing the new input source to be used by the parser. Returning null directs the parser to resolve the system ID against the base URI and open a connection to resulting URI. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. System.IO.IOException Probably indicating a failure to create a new System.IO.Stream or System.IO.TextReader , or an illegal URL. See Also EntityResolver"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.ILexicalHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.ILexicalHandler.html",
    "title": "Interface ILexicalHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ILexicalHandler SAX2 extension handler for lexical events. Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface ILexicalHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This is an optional extension handler for SAX2 to provide lexical information about an XML document, such as comments and CDATA section boundaries. XML readers are not required to recognize this handler, and it is not part of core-only SAX2 distributions. The events in the lexical handler apply to the entire document, not just to the document element, and all lexical handler events must appear between the content handler's StartDocument and EndDocument events. To set the LexicalHandler for an XML reader, use the SetProperty(String, Object) method with the property name http://xml.org/sax/properties/lexical-handler and an object implementing this interface (or null) as the value. If the reader does not report lexical events, it will throw a SAXNotRecognizedException when you attempt to register the handler. Methods | Improve this Doc View Source Comment(Char[], Int32, Int32) Report an XML comment anywhere in the document. This callback will be used for comments inside or outside the document element, including comments in the external DTD subset(if read). Comments in the DTD must be properly nested inside start/endDTD and start/endEntity events(if used). Declaration void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch An array holding the characters in the comment. System.Int32 start The starting position in the array. System.Int32 length The number of characters to use from the array. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source EndCDATA() Report the end of a CDATA section. Declaration void EndCDATA() Exceptions Type Condition SAXException The application may raise an exception. See Also StartCDATA() | Improve this Doc View Source EndDTD() Report the end of DTD declarations. This method is intended to report the end of the DOCTYPE declaration; if the document has no DOCTYPE declaration, this method will not be invoked. Declaration void EndDTD() Exceptions Type Condition SAXException The application may raise an exception. See Also StartDTD(String, String, String) | Improve this Doc View Source EndEntity(String) Report the end of an entity. Declaration void EndEntity(string name) Parameters Type Name Description System.String name The name of the entity that is ending. Exceptions Type Condition SAXException The application may raise an exception. See Also StartEntity(String) | Improve this Doc View Source StartCDATA() Report the start of a CDATA section. Declaration void StartCDATA() Remarks The contents of the CDATA section will be reported through the regular Characters(Char[], Int32, Int32) event; this event is intended only to report the boundary. Exceptions Type Condition SAXException The application may raise an exception. See Also EndEntity(String) | Improve this Doc View Source StartDTD(String, String, String) Report the start of DTD declarations, if any. Declaration void StartDTD(string name, string publicId, string systemId) Parameters Type Name Description System.String name The document type name. System.String publicId The declared public identifier for the external DTD subset, or null if none was declared. System.String systemId The declared system identifier for the external DTD subset, or null if none was declared. (Note that this is not resolved against the document base URI.) Remarks This method is intended to report the beginning of the DOCTYPE declaration; if the document has no DOCTYPE declaration, this method will not be invoked. All declarations reported through IDTDHandler or IDeclHandler events must appear between the startDTD and EndDTD() events. Declarations are assumed to belong to the internal DTD subset unless they appear between StartEntity(String) and EndEntity(String) events. Comments and processing instructions from the DTD should also be reported between the StartDTD(String, String, String) and EndDTD() events, in their original order of(logical) occurrence; they are not required to appear in their correct locations relative to IDTDHandler or IDeclHandler events, however. Note that the start / endDTD events will appear within the start / endDocument events from IContentHandler and before the first StartElement(String, String, String, IAttributes) event. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source StartEntity(String) Report the beginning of some internal and external XML entities. Declaration void StartEntity(string name) Parameters Type Name Description System.String name The name of the entity. If it is a parameter entity, the name will begin with '%', and if it is the external DTD subset, it will be \"[dtd]\". Remarks The reporting of parameter entities (including the external DTD subset) is optional, and SAX2 drivers that report LexicalHandler events may not implement it; you can use the http://xml.org/sax/features/lexical-handler/parameter-entities feature to query or control the reporting of parameter entities. General entities are reported with their regular names, parameter entities have '%' prepended to their names, and the external DTD subset has the pseudo-entity name \"[dtd]\". When a SAX2 driver is providing these events, all other events must be properly nested within start/end entity events. There is no additional requirement that events from IDeclHandler or IDTDHandler be properly ordered. Note that skipped entities will be reported through the SkippedEntity(String) event, which is part of the ContentHandler interface. Because of the streaming event model that SAX uses, some entity boundaries cannot be reported under any circumstances: general entities within attribute values parameter entities within declarations These will be silently expanded, with no indication of where the original entity boundaries were. Note also that the boundaries of character references (which are not really entities anyway) are not reported. All start/endEntity events must be properly nested. Exceptions Type Condition SAXException The application may raise an exception. See Also EndEntity(String) InternalEntityDecl ( System.String , System.String ) ExternalEntityDecl ( System.String , System.String , System.String )"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.ILocator2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.ILocator2.html",
    "title": "Interface ILocator2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ILocator2 SAX2 extension to augment the entity information provided though a ILocator . Inherited Members ILocator.PublicId ILocator.SystemId ILocator.LineNumber ILocator.ColumnNumber Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface ILocator2 : ILocator Remarks If an implementation supports this extension, the Locator provided in SetDocumentLocator(ILocator) will implement this interface, and the http://xml.org/sax/features/use-locator2 feature flag will have the value true . This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . XMLReader implementations are not required to support this information, and it is not part of core-only SAX2 distributions. Properties | Improve this Doc View Source Encoding Returns the name of the character encoding for the entity. If the encoding was declared externally(for example, in a MIME Content-Type header), that will be the name returned.Else if there was an <?xml ...encoding='...'?> declaration at the start of the document, that encoding name will be returned. Otherwise the encoding will been inferred (normally to be UTF-8, or some UTF-16 variant), and that inferred name will be returned. When an InputSource is used to provide an entity's character stream, this method returns the encoding provided in that input stream. Note that some recent W3C specifications require that text in some encodings be normalized, using Unicode Normalization Form C, before processing.Such normalization must be performed by applications, and would normally be triggered based on the value returned by this method. Encoding names may be those used by the underlying JVM, and comparisons should be case-insensitive. Declaration Encoding Encoding { get; } Property Value Type Description System.Text.Encoding | Improve this Doc View Source XMLVersion Returns the version of XML used for the entity. This will normally be the identifier from the current entity's <?xml version='...' ...?> declaration, or be defaulted by the parser. Declaration string XMLVersion { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.Locator2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.Locator2.html",
    "title": "Class Locator2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Locator2 SAX2 extension helper for holding additional Entity information, implementing the Locator2 interface. Inheritance System.Object Locator Locator2 Implements ILocator2 ILocator Inherited Members Locator.PublicId Locator.SystemId Locator.LineNumber Locator.ColumnNumber 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 : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public class Locator2 : Locator, ILocator2, ILocator Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . This is not part of core-only SAX2 distributions. Constructors | Improve this Doc View Source Locator2() Construct a new, empty Locator2 object. This will not normally be useful, since the main purpose of this class is to make a snapshot of an existing Locator . Declaration public Locator2() | Improve this Doc View Source Locator2(ILocator) Copy an existing Locator or Locator2 object. If the object implements Locator2 , values of the encoding and version strings are copied, otherwise they set to null . Declaration public Locator2(ILocator locator) Parameters Type Name Description ILocator locator The existing Locator object. Properties | Improve this Doc View Source Encoding Gets the current value of the encoding property. Declaration public Encoding Encoding { get; set; } Property Value Type Description System.Text.Encoding | Improve this Doc View Source XMLVersion Gets the current value of the version property. Declaration public string XMLVersion { get; set; } Property Value Type Description System.String Implements ILocator2 ILocator"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.Attributes.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.Attributes.html",
    "title": "Class Attributes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Attributes Default implementation of the Attributes interface. Inheritance System.Object Attributes Attributes2 Implements IAttributes 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 : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class Attributes : IAttributes Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class provides a default implementation of the SAX2 Attributes interface, with the addition of manipulators so that the list can be modified or reused. There are two typical uses of this class: to take a persistent snapshot of an Attributes object in a StartElement(String, String, String, IAttributes) event; or to construct or modify an Attributes object in a SAX2 driver or filter. This class replaces the now-deprecated SAX1 AttributeListImpl class; in addition to supporting the updated Attributes interface rather than the deprecated IAttributeList interface, it also includes a much more efficient implementation using a single array rather than a set of Vectors. Constructors | Improve this Doc View Source Attributes() Construct a new, empty Attributes object. Declaration public Attributes() | Improve this Doc View Source Attributes(IAttributes) Copy an existing Attributes object. This constructor is especially useful inside a StartElement(String, String, String, IAttributes) . Declaration public Attributes(IAttributes atts) Parameters Type Name Description IAttributes atts The existing Attributes object. Properties | Improve this Doc View Source Length Return the number of attributes in the list. Declaration public virtual int Length { get; } Property Value Type Description System.Int32 See Also Length Methods | Improve this Doc View Source AddAttribute(String, String, String, String, String) Add an attribute to the end of the list. For the sake of speed, this method does no checking to see if the attribute is already in the list: that is the responsibility of the application. Declaration public virtual void AddAttribute(string uri, string localName, string qName, string type, string value) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if none is available or Namespace processing is not being performed. System.String localName The local name, or the empty string if Namespace processing is not being performed. System.String qName The qualified (prefixed) name, or the empty string if qualified names are not available. System.String type The attribute type as a string. System.String value The attribute value. | Improve this Doc View Source Clear() Clear the attribute list for reuse. Note that little memory is freed by this call: the current array is kept so it can be reused. Declaration public virtual void Clear() | Improve this Doc View Source GetIndex(String) Look up an attribute's index by qualified (prefixed) name. Declaration public virtual int GetIndex(string qName) Parameters Type Name Description System.String qName The qualified name. Returns Type Description System.Int32 The attribute's index, or -1 if none matches. See Also GetIndex(String) | Improve this Doc View Source GetIndex(String, String) Look up an attribute's index by Namespace name. Declaration public virtual int GetIndex(string uri, string localName) Parameters Type Name Description System.String uri The attribute's Namespace URI, or the empty string if none is available. System.String localName The attribute's local name. Returns Type Description System.Int32 The attribute's index, or -1 if none matches. Remarks In many cases, it will be more efficient to look up the name once and use the index query methods rather than using the name query methods repeatedly. See Also GetIndex(String, String) | Improve this Doc View Source GetLocalName(Int32) Return an attribute's local name. Declaration public virtual string GetLocalName(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's local name, the empty string if none is available, or null if the index if out of range. See Also GetLocalName(Int32) | Improve this Doc View Source GetQName(Int32) Return an attribute's qualified (prefixed) name. Declaration public virtual string GetQName(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's qualified name, the empty string if none is available, or null if the index is out of bounds. See Also GetQName(Int32) | Improve this Doc View Source GetType(Int32) Return an attribute's type by index. Declaration public virtual string GetType(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's type, \"CDATA\" if the type is unknown, or null if the index is out of bounds. See Also GetType(Int32) | Improve this Doc View Source GetType(String) Look up an attribute's type by qualified (prefixed) name. Declaration public virtual string GetType(string qName) Parameters Type Name Description System.String qName The qualified name. Returns Type Description System.String The attribute's type, or null if there is no matching attribute. See Also GetType(String) | Improve this Doc View Source GetType(String, String) Look up an attribute's type by Namespace-qualified name. Declaration public virtual string GetType(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string for a name with no explicit Namespace URI. System.String localName The local name. Returns Type Description System.String The attribute's type, or null if there is no matching attribute. See Also GetType(String, String) | Improve this Doc View Source GetURI(Int32) Return an attribute's Namespace URI. Declaration public virtual string GetURI(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The Namespace URI, the empty string if none is available, or null if the index is out of range. See Also GetURI(Int32) | Improve this Doc View Source GetValue(Int32) Return an attribute's value by index. Declaration public virtual string GetValue(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's value or null if the index is out of bounds. See Also GetValue(Int32) | Improve this Doc View Source GetValue(String) Look up an attribute's value by qualified (prefixed) name. Declaration public virtual string GetValue(string qName) Parameters Type Name Description System.String qName The qualified name. Returns Type Description System.String The attribute's value, or null if there is no matching attribute. See Also GetValue(String) | Improve this Doc View Source GetValue(String, String) Look up an attribute's value by Namespace-qualified name. Declaration public virtual string GetValue(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string for a name with no explicit Namespace URI. System.String localName The local name. Returns Type Description System.String The attribute's value, or null if there is no matching attribute. See Also GetValue(String, String) | Improve this Doc View Source RemoveAttribute(Int32) Remove an attribute from the list. Declaration public virtual void RemoveAttribute(int index) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not point to an attribute in the list. | Improve this Doc View Source SetAttribute(Int32, String, String, String, String, String) Set an attribute in the list. For the sake of speed, this method does no checking for name conflicts or well-formedness: such checks are the responsibility of the application. Declaration public virtual void SetAttribute(int index, string uri, string localName, string qName, string type, string value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String uri The Namespace URI, or the empty string if none is available or Namespace processing is not being performed. System.String localName The local name, or the empty string if Namespace processing is not being performed. System.String qName The qualified name, or the empty string if qualified names are not available. System.String type The attribute type as a string. System.String value The attribute value. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not point to an attribute in the list. | Improve this Doc View Source SetAttributes(IAttributes) Copy an entire Attributes object. It may be more efficient to reuse an existing object rather than constantly allocating new ones. Declaration public virtual void SetAttributes(IAttributes atts) Parameters Type Name Description IAttributes atts The attributes to copy. | Improve this Doc View Source SetLocalName(Int32, String) Set the local name of a specific attribute. Declaration public virtual void SetLocalName(int index, string localName) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String localName The attribute's local name, or the empty string for none. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not point to an attribute in the list. | Improve this Doc View Source SetQName(Int32, String) Set the qualified name of a specific attribute. Declaration public virtual void SetQName(int index, string qName) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String qName The attribute's qualified name, or the empty string for none. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not point to an attribute in the list. | Improve this Doc View Source SetType(Int32, String) Set the type of a specific attribute. Declaration public virtual void SetType(int index, string type) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String type The attribute's type. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not point to an attribute in the list. | Improve this Doc View Source SetURI(Int32, String) Set the Namespace URI of a specific attribute. Declaration public virtual void SetURI(int index, string uri) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String uri The attribute's Namespace URI, or the empty string for none. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not point to an attribute in the list. | Improve this Doc View Source SetValue(Int32, String) Set the value of a specific attribute. Declaration public virtual void SetValue(int index, string value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String value The attribute's value. Exceptions Type Condition System.IndexOutOfRangeException When the supplied index does not point to an attribute in the list. Implements IAttributes"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.DefaultHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.DefaultHandler.html",
    "title": "Class DefaultHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultHandler Default base class for SAX2 event handlers. Inheritance System.Object DefaultHandler DefaultHandler2 Parser Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler 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 : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class DefaultHandler : IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is available as a convenience base class for SAX2 applications: it provides default implementations for all of the callbacks in the four core SAX2 handler classes: IEntityResolver IDTDHandler IContentHandler IErrorHandler Application writers can extend this class when they need to implement only part of an interface; parser writers can instantiate this class to provide default handlers when the application has not supplied its own. This class replaces the deprecated SAX1 Sax.HandlerBase class. Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Receive notification of character data inside an element. By default, do nothing. Application writers may override this method to take specific actions for each chunk of character data (such as adding the data to a node or buffer, or printing it to a file). Declaration public virtual void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The characters. System.Int32 start The start position in the character array. System.Int32 length The number of characters to use from the character array. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also Characters ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source EndDocument() Receive notification of the end of the document. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the end of a document (such as finalising a tree or closing an output file). Declaration public virtual void EndDocument() Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also EndDocument () | Improve this Doc View Source EndElement(String, String, String) Receive notification of the end of an element. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the end of each element (such as finalising a tree node or writing output to a file). Declaration public virtual void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed. System.String localName The local name (without prefix), or the empty string if Namespace processing is not being performed. System.String qName The qualified name (with prefix), or the empty string if qualified names are not available. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also EndElement ( System.String , System.String , System.String ) | Improve this Doc View Source EndPrefixMapping(String) Receive notification of the end of a Namespace mapping. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the end of each prefix mapping. Declaration public virtual void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix The Namespace prefix being declared. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also EndPrefixMapping ( System.String ) | Improve this Doc View Source Error(SAXParseException) Receive notification of a recoverable parser error. The default implementation does nothing. Application writers may override this method in a subclass to take specific actions for each error, such as inserting the message in a log file or printing it to the console. Declaration public virtual void Error(SAXParseException e) Parameters Type Name Description SAXParseException e The warning information encoded as an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also Warning ( SAXParseException ) SAXParseException | Improve this Doc View Source FatalError(SAXParseException) Report a fatal XML parsing error. The default implementation throws a SAXParseException . Application writers may override this method in a subclass if they need to take specific actions for each fatal error (such as collecting all of the errors into a single report): in any case, the application must stop all regular processing when this method is invoked, since the document is no longer reliable, and the parser may no longer report parsing events. Declaration public virtual void FatalError(SAXParseException e) Parameters Type Name Description SAXParseException e The error information encoded as an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also FatalError ( SAXParseException ) SAXParseException | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Receive notification of ignorable whitespace in element content. By default, do nothing. Application writers may override this method to take specific actions for each chunk of ignorable whitespace (such as adding data to a node or buffer, or printing it to a file). Declaration public virtual void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The whitespace characters. System.Int32 start The start position in the character array. System.Int32 length The number of characters to use from the character array. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also IgnorableWhitespace ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source NotationDecl(String, String, String) Receive notification of a notation declaration. By default, do nothing. Application writers may override this method in a subclass if they wish to keep track of the notations declared in a document. Declaration public virtual void NotationDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The notation name. System.String publicId The notation public identifier, or null if not available. System.String systemId The notation system identifier. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also NotationDecl ( System.String , System.String , System.String ) | Improve this Doc View Source ProcessingInstruction(String, String) Receive notification of a processing instruction. By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods. Declaration public virtual void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target The processing instruction target. System.String data The processing instruction data, or null if none is supplied. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also ProcessingInstruction ( System.String , System.String ) | Improve this Doc View Source ResolveEntity(String, String) Resolve an external entity. Always return null, so that the parser will use the system identifier provided in the XML document. This method implements the SAX default behaviour: application writers can override it in a subclass to do special translations such as catalog lookups or URI redirection. Declaration public virtual InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId The public identifer, or null if none is available. System.String systemId The system identifier provided in the XML document. Returns Type Description InputSource Remarks The new input source, or null to require the default behaviour. Exceptions Type Condition System.IO.IOException If there is an error setting up the new input source. SAXException Any SAX exception, possibly wrapping another exception. See Also ResolveEntity ( System.String , System.String ) | Improve this Doc View Source SetDocumentLocator(ILocator) Receive a Locator object for document events. By default, do nothing. Application writers may override this method in a subclass if they wish to store the locator for use with other document events. Declaration public virtual void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator A locator for all SAX document events. See Also SetDocumentLocator ( ILocator ) ILocator | Improve this Doc View Source SkippedEntity(String) Receive notification of a skipped entity. By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods. Declaration public virtual void SkippedEntity(string name) Parameters Type Name Description System.String name The name of the skipped entity. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also ProcessingInstruction ( System.String , System.String ) | Improve this Doc View Source StartDocument() Receive notification of the beginning of the document. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the beginning of a document (such as allocating the root node of a tree or creating an output file). Declaration public virtual void StartDocument() Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also StartDocument () | Improve this Doc View Source StartElement(String, String, String, IAttributes) Receive notification of the start of an element. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each element (such as allocating a new tree node or writing output to a file). Declaration public virtual void StartElement(string uri, string localName, string qName, IAttributes attributes) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed. System.String localName The local name (without prefix), or the empty string if Namespace processing is not being performed. System.String qName The qualified name (with prefix), or the empty string if qualified names are not available. IAttributes attributes The attributes attached to the element. If there are no attributes, it shall be an empty Attributes object. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also StartElement ( System.String , System.String , System.String , IAttributes ) | Improve this Doc View Source StartPrefixMapping(String, String) Receive notification of the start of a Namespace mapping. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each Namespace prefix scope (such as storing the prefix mapping). Declaration public virtual void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix The Namespace prefix being declared. System.String uri The Namespace URI mapped to the prefix. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also StartPrefixMapping ( System.String , System.String ) | Improve this Doc View Source UnparsedEntityDecl(String, String, String, String) Receive notification of an unparsed entity declaration. By default, do nothing. Application writers may override this method in a subclass to keep track of the unparsed entities declared in a document. Declaration public virtual void UnparsedEntityDecl(string name, string publicId, string systemId, string notationName) Parameters Type Name Description System.String name The entity name. System.String publicId The entity public identifier, or null if not available. System.String systemId The entity system identifier. System.String notationName The name of the associated notation. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also UnparsedEntityDecl ( System.String , System.String , System.String , System.String ) | Improve this Doc View Source Warning(SAXParseException) Receive notification of a parser warning. The default implementation does nothing. Application writers may override this method in a subclass to take specific actions for each warning, such as inserting the message in a log file or printing it to the console. Declaration public virtual void Warning(SAXParseException e) Parameters Type Name Description SAXParseException e The warning information encoded as an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also Warning ( SAXParseException ) SAXParseException Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler See Also IEntityResolver IDTDHandler IContentHandler IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.html",
    "title": "Namespace Sax.Helpers | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Sax.Helpers Classes Attributes Default implementation of the Attributes interface. DefaultHandler Default base class for SAX2 event handlers. Locator Provide an optional convenience implementation of ILocator . NamespaceSupport Encapsulate Namespace logic for use by applications using SAX, or internally by SAX drivers. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class encapsulates the logic of Namespace processing: it tracks the declarations currently in force for each context and automatically processes qualified XML names into their Namespace parts; it can also be used in reverse for generating XML qnames from Namespaces. Namespace support objects are reusable, but the reset method must be invoked between each session. Here is a simple session: string parts[] = new string[3]; NamespaceSupport support = new NamespaceSupport(); support.PushContext(); support.DeclarePrefix(\"\", \"http://www.w3.org/1999/xhtml\"); support.DeclarePrefix(\"dc\", \"http://www.purl.org/dc#\"); parts = support.ProcessName(\"p\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); parts = support.ProcessName(\"dc:title\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); support.PopContext(); Note that this class is optimized for the use case where most elements do not contain Namespace declarations: if the same prefix/URI mapping is repeated for each context (for example), this class will be somewhat less efficient. Although SAX drivers (parsers) may choose to use this class to implement namespace handling, they are not required to do so. Applications must track namespace information themselves if they want to use namespace information. XMLFilter Base class for deriving an XML filter. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is designed to sit between an IXMLReader and the client application's event handlers. By default, it does nothing but pass requests up to the reader and events on to the handlers unmodified, but subclasses can override specific methods to modify the event stream or the configuration requests as they pass through."
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.Locator.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.Locator.html",
    "title": "Class Locator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Locator Provide an optional convenience implementation of ILocator . Inheritance System.Object Locator Locator2 Implements ILocator 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 : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class Locator : ILocator Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is available mainly for application writers, who can use it to make a persistent snapshot of a locator at any point during a document parse: ILocator locator; ILocator startloc; public void SetLocator(ILocator locator) { // note the locator this.locator = locator; } public void StartDocument() { // save the location of the start of the document // for future use. ILocator startloc = new Locator(locator); } Normally, parser writers will not use this class, since it is more efficient to provide location information only when requested, rather than constantly updating a ILocator object. Constructors | Improve this Doc View Source Locator() Zero-argument constructor. This will not normally be useful, since the main purpose of this class is to make a snapshot of an existing ILocator . Declaration public Locator() | Improve this Doc View Source Locator(ILocator) Copy constructor. Create a persistent copy of the current state of a locator. When the original locator changes, this copy will still keep the original values (and it can be used outside the scope of DocumentHandler methods). Declaration public Locator(ILocator locator) Parameters Type Name Description ILocator locator The locator to copy. Properties | Improve this Doc View Source ColumnNumber Gets the saved column number (1-based). Returns the column number as an integer, or -1 if none is available. Declaration public int ColumnNumber { get; set; } Property Value Type Description System.Int32 See Also ColumnNumber | Improve this Doc View Source LineNumber Gets the saved line number (1-based). Returns the line number as an integer, or -1 if none is available. Declaration public int LineNumber { get; set; } Property Value Type Description System.Int32 See Also LineNumber | Improve this Doc View Source PublicId Gets the public identifier as a string, or null if none is available. Declaration public string PublicId { get; set; } Property Value Type Description System.String See Also PublicId | Improve this Doc View Source SystemId Gets the system identifier as a string, or null if none is available. Declaration public string SystemId { get; set; } Property Value Type Description System.String See Also SystemId Implements ILocator"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.NamespaceSupport.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.NamespaceSupport.html",
    "title": "Class NamespaceSupport | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NamespaceSupport Encapsulate Namespace logic for use by applications using SAX, or internally by SAX drivers. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class encapsulates the logic of Namespace processing: it tracks the declarations currently in force for each context and automatically processes qualified XML names into their Namespace parts; it can also be used in reverse for generating XML qnames from Namespaces. Namespace support objects are reusable, but the reset method must be invoked between each session. Here is a simple session: string parts[] = new string[3]; NamespaceSupport support = new NamespaceSupport(); support.PushContext(); support.DeclarePrefix(\"\", \"http://www.w3.org/1999/xhtml\"); support.DeclarePrefix(\"dc\", \"http://www.purl.org/dc#\"); parts = support.ProcessName(\"p\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); parts = support.ProcessName(\"dc:title\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); support.PopContext(); Note that this class is optimized for the use case where most elements do not contain Namespace declarations: if the same prefix/URI mapping is repeated for each context (for example), this class will be somewhat less efficient. Although SAX drivers (parsers) may choose to use this class to implement namespace handling, they are not required to do so. Applications must track namespace information themselves if they want to use namespace information. Inheritance System.Object NamespaceSupport 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 : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class NamespaceSupport Constructors | Improve this Doc View Source NamespaceSupport() Create a new Namespace support object. Declaration public NamespaceSupport() Fields | Improve this Doc View Source NSDECL The namespace declaration URI as a constant. The value is http://www.w3.org/xmlns/2000/ , as defined in a backwards-incompatible erratum to the \"Namespaces in XML\" recommendation. Because that erratum postdated SAX2, SAX2 defaults to the original recommendation, and does not normally use this URI. This is the Namespace URI that is optionally applied to xmlns and xmlns:* attributes, which are used to declare namespaces. Declaration public const string NSDECL = \"http://www.w3.org/xmlns/2000/\" Field Value Type Description System.String See Also SetNamespaceDeclUris(Boolean) IsNamespaceDeclUris | Improve this Doc View Source XMLNS The XML Namespace URI as a constant. The value is http://www.w3.org/XML/1998/namespace as defined in the \"Namespaces in XML\" * recommendation. This is the Namespace URI that is automatically mapped to the \"xml\" prefix. Declaration public const string XMLNS = \"http://www.w3.org/XML/1998/namespace\" Field Value Type Description System.String Properties | Improve this Doc View Source IsNamespaceDeclUris Returns true if namespace declaration attributes are placed into a namespace. This behavior is not the default. Declaration public bool IsNamespaceDeclUris { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source DeclarePrefix(String, String) Declare a Namespace prefix. All prefixes must be declared before they are referenced. For example, a SAX driver (parser) would scan an element's attributes in two passes: first for namespace declarations, then a second pass using ProcessName(String, String[], Boolean) to interpret prefixes against (potentially redefined) prefixes. This method declares a prefix in the current Namespace context; the prefix will remain in force until this context is popped, unless it is shadowed in a descendant context. To declare the default element Namespace, use the empty string as the prefix. Note that you must not declare a prefix after you've pushed and popped another Namespace context, or treated the declarations phase as complete by processing a prefixed name. Note that there is an asymmetry in this library: GetPrefix(String) will not return the \"\" prefix, even if you have declared a default element namespace. To check for a default namespace, you have to look it up explicitly using GetUri(String) . This asymmetry exists to make it easier to look up prefixes for attribute names, where the default prefix is not allowed. Declaration public bool DeclarePrefix(string prefix, string uri) Parameters Type Name Description System.String prefix The prefix to declare, or the empty string to indicate the default element namespace. This may never have the value \"xml\" or \"xmlns\". System.String uri The Namespace URI to associate with the prefix. Returns Type Description System.Boolean true if the prefix was legal, false otherwise See Also ProcessName(String, String[], Boolean) GetUri(String) GetPrefix(String) | Improve this Doc View Source GetDeclaredPrefixes() Return an enumeration of all prefixes declared in this context. The empty (default) prefix will be included in this enumeration; note that this behaviour differs from that of GetPrefix(String) and GetPrefixes() . Declaration public IEnumerable GetDeclaredPrefixes() Returns Type Description System.Collections.IEnumerable An enumeration of all prefixes declared in this context. See Also GetPrefixes() GetUri(String) | Improve this Doc View Source GetPrefix(String) Return one of the prefixes mapped to a Namespace URI. If more than one prefix is currently mapped to the same URI, this method will make an arbitrary selection; if you want all of the prefixes, use the GetPrefixes() method instead. Note: this will never return the empty (default) prefix; to check for a default prefix, use the GetUri(String) method with an argument of \"\". Declaration public string GetPrefix(string uri) Parameters Type Name Description System.String uri the namespace URI Returns Type Description System.String one of the prefixes currently mapped to the URI supplied, or null if none is mapped or if the URI is assigned to the default namespace See Also GetPrefixes(String) GetUri(String) | Improve this Doc View Source GetPrefixes() Return an enumeration of all prefixes whose declarations are active in the current context. This includes declarations from parent contexts that have not been overridden. Note: if there is a default prefix, it will not be returned in this enumeration; check for the default prefix using the GetUri(String) with an argument of \"\". Declaration public IEnumerable GetPrefixes() Returns Type Description System.Collections.IEnumerable An enumeration of prefixes (never empty). See Also GetDeclaredPrefixes() GetUri(String) | Improve this Doc View Source GetPrefixes(String) Return an enumeration of all prefixes for a given URI whose declarations are active in the current context. This includes declarations from parent contexts that have not been overridden. This method returns prefixes mapped to a specific Namespace URI. The xml: prefix will be included. If you want only one prefix that's mapped to the Namespace URI, and you don't care which one you get, use the GetPrefix(String) method instead. Note: the empty (default) prefix is never included in this enumeration; to check for the presence of a default Namespace, use the GetUri(String) method with an argument of \"\". Declaration public IEnumerable GetPrefixes(string uri) Parameters Type Name Description System.String uri The Namespace URI. Returns Type Description System.Collections.IEnumerable An enumeration of prefixes (never empty). See Also GetPrefix(String) GetDeclaredPrefixes() GetUri(String) | Improve this Doc View Source GetUri(String) Look up a prefix and get the currently-mapped Namespace URI. This method looks up the prefix in the current context. Use the empty string (\"\") for the default Namespace. Declaration public string GetUri(string prefix) Parameters Type Name Description System.String prefix The prefix to look up. Returns Type Description System.String The associated Namespace URI, or null if the prefix is undeclared in this context. See Also GetPrefix(String) GetPrefixes() | Improve this Doc View Source PopContext() Revert to the previous Namespace context. Normally, you should pop the context at the end of each XML element. After popping the context, all Namespace prefix mappings that were previously in force are restored. You must not attempt to declare additional Namespace prefixes after popping a context, unless you push another context first. Declaration public void PopContext() See Also PushContext() | Improve this Doc View Source ProcessName(String, String[], Boolean) Process a raw XML qualified name, after all declarations in the current context have been handled by DeclarePrefix(String, String) . This method processes a raw XML qualified name in the current context by removing the prefix and looking it up among the prefixes currently declared. The return value will be the array supplied by the caller, filled in as follows: parts[0] The Namespace URI, or an empty string if none is in use. parts[1] The local name (without prefix). parts[2] The original raw name. All of the strings in the array will be internalized. If the raw name has a prefix that has not been declared, then the return value will be null. Note that attribute names are processed differently than element names: an unprefixed element name will receive the default Namespace (if any), while an unprefixed attribute name will not. Declaration public string[] ProcessName(string qName, string[] parts, bool isAttribute) Parameters Type Name Description System.String qName The XML qualified name to be processed. System.String [] parts An array supplied by the caller, capable of holding at least three members. System.Boolean isAttribute A flag indicating whether this is an attribute name (true) or an element name (false). Returns Type Description System.String [] The supplied array holding three internalized strings representing the Namespace URI (or empty string), the local name, and the XML qualified name; or null if there is an undeclared prefix. See Also DeclarePrefix(String, String) J2N.Text.StringExtensions.Intern(System.String) | Improve this Doc View Source PushContext() Start a new Namespace context. The new context will automatically inherit the declarations of its parent context, but it will also keep track of which declarations were made within this context. Event callback code should start a new context once per element. This means being ready to call this in either of two places. For elements that don't include namespace declarations, the StartElement(String, String, String, IAttributes) callback is the right place. For elements with such a declaration, it'd done in the first StartPrefixMapping(String, String) callback. A boolean flag can be used to track whether a context has been started yet. When either of those methods is called, it checks the flag to see if a new context needs to be started. If so, it starts the context and sets the flag. After StartElement(String, String, String, IAttributes) does that, it always clears the flag. Normally, SAX drivers would push a new context at the beginning of each XML element. Then they perform a first pass over the attributes to process all namespace declarations, making StartPrefixMapping(String, String) callbacks. Then a second pass is made, to determine the namespace-qualified names for all attributes and for the element name. Finally all the information for the StartElement(String, String, String, IAttributes) callback is available, so it can then be made. The Namespace support object always starts with a base context already in force: in this context, only the \"xml\" prefix is declared. Declaration public void PushContext() See Also IContentHandler PopContext() | Improve this Doc View Source Reset() Reset this Namespace support object for reuse. It is necessary to invoke this method before reusing the Namespace support object for a new session. If namespace declaration URIs are to be supported, that flag must also be set to a non-default value. Declaration public void Reset() See Also SetNamespaceDeclUris(Boolean) | Improve this Doc View Source SetNamespaceDeclUris(Boolean) Controls whether namespace declaration attributes are placed into the NSDECL namespace by ProcessName(String, String[], Boolean) . This may only be changed before any contexts have been pushed. Declaration public void SetNamespaceDeclUris(bool value) Parameters Type Name Description System.Boolean value Exceptions Type Condition System.InvalidOperationException when attempting to set this after any context has been pushed."
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.XMLFilter.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.XMLFilter.html",
    "title": "Class XMLFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class XMLFilter Base class for deriving an XML filter. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is designed to sit between an IXMLReader and the client application's event handlers. By default, it does nothing but pass requests up to the reader and events on to the handlers unmodified, but subclasses can override specific methods to modify the event stream or the configuration requests as they pass through. Inheritance System.Object XMLFilter XMLWriter Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler 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 : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class XMLFilter : IXMLFilter, IXMLReader, IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler Constructors | Improve this Doc View Source XMLFilter() Construct an empty XML filter, with no parent. This filter will have no parent: you must assign a parent before you start a parse or do any configuration with setFeature or setProperty, unless you use this as a pure event consumer rather than as an IXMLReader . Declaration public XMLFilter() See Also SetFeature ( System.String , System.Boolean ) SetProperty ( System.String , System.Object ) Parent | Improve this Doc View Source XMLFilter(IXMLReader) Construct an XML filter with the specified parent. Declaration public XMLFilter(IXMLReader parent) Parameters Type Name Description IXMLReader parent The parent See Also Parent Properties | Improve this Doc View Source ContentHandler Gets or Sets the content event handler. Declaration public IContentHandler ContentHandler { get; set; } Property Value Type Description IContentHandler | Improve this Doc View Source DTDHandler Gets or Sets the DTD event handler. Declaration public IDTDHandler DTDHandler { get; set; } Property Value Type Description IDTDHandler | Improve this Doc View Source EntityResolver Gets or Sets the entity resolver. Declaration public IEntityResolver EntityResolver { get; set; } Property Value Type Description IEntityResolver | Improve this Doc View Source ErrorHandler Gets or Sets the error event handler. Declaration public IErrorHandler ErrorHandler { get; set; } Property Value Type Description IErrorHandler | Improve this Doc View Source Parent Gets or sets the parent reader. Declaration public IXMLReader Parent { get; set; } Property Value Type Description IXMLReader Remarks This is the IXMLReader from which this filter will obtain its events and to which it will pass its configuration requests. The parent may itself be another filter. If there is no parent reader set, any attempt to parse or to set or get a feature or property will fail. Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Filter a character data event. Declaration public virtual void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch An array of characters. System.Int32 start The starting position in the array. System.Int32 length The number of characters to use from the array. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source EndDocument() Filter an end document event. Declaration public virtual void EndDocument() Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source EndElement(String, String, String) Filter an end element event. Declaration public virtual void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri The element's Namespace URI, or the empty string. System.String localName The element's local name, or the empty string. System.String qName The element's qualified (prefixed) name, or the empty string. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source EndPrefixMapping(String) Filter an end Namespace prefix mapping event. Declaration public virtual void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix The Namespace prefix. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source Error(SAXParseException) Filter an error event. Declaration public virtual void Error(SAXParseException e) Parameters Type Name Description SAXParseException e The error as an exception. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source FatalError(SAXParseException) Filter a fatal error event. Declaration public virtual void FatalError(SAXParseException e) Parameters Type Name Description SAXParseException e The error as an exception. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source GetFeature(String) Look up the value of a feature. This will always fail if the parent is null. Declaration public virtual bool GetFeature(string name) Parameters Type Name Description System.String name The feature name. Returns Type Description System.Boolean The current value of the feature. Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the feature name but cannot determine its value at this time. | Improve this Doc View Source GetProperty(String) Look up the value of a property. Declaration public virtual object GetProperty(string name) Parameters Type Name Description System.String name The property name. Returns Type Description System.Object The current value of the property. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the property name but cannot determine its value at this time. | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Filter an ignorable whitespace event. Declaration public virtual void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch An array of characters. System.Int32 start The starting position in the array. System.Int32 length The number of characters to use from the array. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source NotationDecl(String, String, String) Filter a notation declaration event. Declaration public virtual void NotationDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The notation name. System.String publicId The notation's public identifier, or null. System.String systemId The notation's system identifier, or null. See Also SAXException | Improve this Doc View Source Parse(InputSource) Parse an XML document. The application can use this method to instruct the XML reader to begin parsing an XML document from any valid input source (a character stream, a byte stream, or a URI). Applications may not invoke this method while a parse is in progress (they should create a new XMLReader instead for each nested XML document). Once a parse is complete, an application may reuse the same XMLReader object, possibly with a different input source. Configuration of the XMLReader object (such as handler bindings and values established for feature flags and properties) is unchanged by completion of a parse, unless the definition of that aspect of the configuration explicitly specifies other behavior. (For example, feature flags or properties exposing characteristics of the document being parsed.) During the parse, the XMLReader will provide information about the XML document through the registered event handlers. This method is synchronous: it will not return until parsing has ended. If a client application wants to terminate parsing early, it should throw an exception. Declaration public virtual void Parse(InputSource input) Parameters Type Name Description InputSource input The input source for the top-level of the XML document. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. System.IO.IOException An IO exception from the parser, possibly from a byte stream or character stream supplied by the application. See Also InputSource Parse(String) IEntityResolver IDTDHandler IContentHandler IErrorHandler | Improve this Doc View Source Parse(String) Parse a document. Declaration public virtual void Parse(string systemId) Parameters Type Name Description System.String systemId The system identifier as a fully-qualified URI. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. System.IO.IOException An IO exception from the parser, possibly from a byte stream or character stream supplied by the application. | Improve this Doc View Source ProcessingInstruction(String, String) Filter a processing instruction event. Declaration public virtual void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target The processing instruction target. System.String data The text following the target. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source ResolveEntity(String, String) Filter an external entity resolution. Declaration public virtual InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId The entity's public identifier, or null. System.String systemId The entity's system identifier. Returns Type Description InputSource A new InputSource or null for the default. Exceptions Type Condition SAXException The client may throw an exception during processing. System.IO.IOException The client may throw an I/O-related exception while obtaining the new InputSource . | Improve this Doc View Source SetDocumentLocator(ILocator) Filter a new document locator event. Declaration public virtual void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator The document locator. | Improve this Doc View Source SetFeature(String, Boolean) Set the value of a feature. This will always fail if the parent is null. Declaration public virtual void SetFeature(string name, bool value) Parameters Type Name Description System.String name The feature name. System.Boolean value The requested feature value. Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the feature name but cannot set the requested value. | Improve this Doc View Source SetProperty(String, Object) Set the value of a property. This will always fail if the parent is null. Declaration public virtual void SetProperty(string name, object value) Parameters Type Name Description System.String name The property name. System.Object value The requested property value. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the property name but cannot set the requested value. | Improve this Doc View Source SkippedEntity(String) Filter a skipped entity event. Declaration public virtual void SkippedEntity(string name) Parameters Type Name Description System.String name The name of the skipped entity. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source StartDocument() Filter a start document event. Declaration public virtual void StartDocument() Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source StartElement(String, String, String, IAttributes) Filter a start element event. Declaration public virtual void StartElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri The element's Namespace URI, or the empty string. System.String localName The element's local name, or the empty string. System.String qName The element's qualified (prefixed) name, or the empty string. IAttributes atts The element's attributes. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source StartPrefixMapping(String, String) Filter a start Namespace prefix mapping event. Declaration public virtual void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix The Namespace prefix. System.String uri The Namespace URI. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source UnparsedEntityDecl(String, String, String, String) Filter an unparsed entity declaration event. Declaration public virtual void UnparsedEntityDecl(string name, string publicId, string systemId, string notationName) Parameters Type Name Description System.String name The entity name. System.String publicId The entity's public identifier, or null. System.String systemId The entity's system identifier, or null. System.String notationName The name of the associated notation. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source Warning(SAXParseException) Filter a warning event. Declaration public virtual void Warning(SAXParseException e) Parameters Type Name Description SAXParseException e The warning as an exception. Exceptions Type Condition SAXException The client may throw an exception during processing. Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler See Also IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.html",
    "title": "Namespace Sax | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Sax Classes InputSource A single input source for an XML entity. SAXException Encapsulate a general SAX error or warning. SAXNotRecognizedException Exception class for an unrecognized identifier. SAXNotSupportedException Exception class for an unsupported operation. SAXParseException Encapsulate an XML parse error or warning. Interfaces IAttributes Interface for a list of XML attributes. IContentHandler Receive notification of the logical content of a document. IDTDHandler Receive notification of basic DTD-related events. IEntityResolver Basic interface for resolving entities. IErrorHandler Basic interface for SAX error handlers. ILocator Interface for associating a SAX event with a document location. IXMLFilter Interface for an XML filter. IXMLReader Interface for an XML filter."
  },
  "api/Lucene.Net.Benchmarks/Sax.IAttributes.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IAttributes.html",
    "title": "Interface IAttributes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAttributes Interface for a list of XML attributes. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IAttributes Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This interface allows access to a list of attributes in three different ways: by attribute index; by Namespace-qualified name; or by qualified (prefixed) name. The list will not contain attributes that were declared IMPLIED but not specified in the start tag. It will also not contain attributes used as Namespace declarations(xmlns*) unless the http://xml.org/sax/features/namespace-prefixes feature is set to true (it is false by default). Because SAX2 conforms to the original \"Namespaces in XML\" recommendation, it normally does not give namespace declaration attributes a namespace URI. Some SAX2 parsers may support using an optional feature flag ( http://xml.org/sax/features/xmlns-uris ) to request that those attributes be given URIs, conforming to a later backwards-incompatible revision of that recommendation. (The attribute's \"local name\" will be the prefix, or \"xmlns\" when defining a default element namespace.) For portability, handler code should always resolve that conflict, rather than requiring parsers that can change the setting of that feature flag. If the namespace-prefixes feature (see above) is false , access by qualified name may not be available; if the http://xml.org/sax/features/namespaces feature is false , access by Namespace-qualified names may not be available. This interface replaces the now-deprecated SAX1 { @link org.xml.sax.AttributeList AttributeList } interface, which does not contain Namespace support.In addition to Namespace support, it adds the getIndex methods (below). The order of attributes in the list is unspecified, and will vary from implementation to implementation. Properties | Improve this Doc View Source Length Return the number of attributes in the list. Once you know the number of attributes, you can iterate through the list. Declaration int Length { get; } Property Value Type Description System.Int32 The number of attributes in the list. See Also GetURI(Int32) GetLocalName(Int32) GetQName(Int32) GetType(Int32) GetValue(Int32) Methods | Improve this Doc View Source GetIndex(String) Look up the index of an attribute by XML qualified (prefixed) name. Declaration int GetIndex(string qName) Parameters Type Name Description System.String qName The qualified (prefixed) name. Returns Type Description System.Int32 The index of the attribute, or -1 if it does not appear in the list. | Improve this Doc View Source GetIndex(String, String) Look up the index of an attribute by Namespace name. Declaration int GetIndex(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Int32 The index of the attribute, or -1 if it does not appear in the list. | Improve this Doc View Source GetLocalName(Int32) Look up an attribute's local name by index. Declaration string GetLocalName(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The local name, or the empty string if Namespace processing is not being performed, or null if the index is out of range. See Also Length | Improve this Doc View Source GetQName(Int32) Look up an attribute's XML qualified (prefixed) name by index. Declaration string GetQName(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The XML qualified name, or the empty string if none is available, or null if the index is out of range. See Also Length | Improve this Doc View Source GetType(Int32) Look up an attribute's type by index. Declaration string GetType(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The attribute's type as a string, or null if the index is out of range. Remarks The attribute type is one of the strings \"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"NMTOKEN\", \"NMTOKENS\", \"ENTITY\", \"ENTITIES\", or \"NOTATION\" (always in upper case). If the parser has not read a declaration for the attribute, or if the parser does not report attribute types, then it must return the value \"CDATA\" as stated in the XML 1.0 Recommendation (clause 3.3.3, \"Attribute-Value Normalization\"). For an enumerated attribute that is not a notation, the parser will report the type as \"NMTOKEN\". See Also Length | Improve this Doc View Source GetType(String) Look up an attribute's type by XML qualified (prefixed) name. See GetType(Int32) for a description of the possible types. Declaration string GetType(string qName) Parameters Type Name Description System.String qName The XML qualified name. Returns Type Description System.String The attribute type as a string, or null if the attribute is not in the list or if qualified names are not available. | Improve this Doc View Source GetType(String, String) Look up an attribute's type by Namespace name. See GetType(Int32) for a description of the possible types. Declaration string GetType(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty String if the name has no Namespace URI. System.String localName The local name of the attribute. Returns Type Description System.String The attribute type as a string, or null if the attribute is not in the list or if Namespace processing is not being performed. | Improve this Doc View Source GetURI(Int32) Look up an attribute's Namespace URI by index. Declaration string GetURI(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The Namespace URI, or the empty string if none is available, or null if the index is out of range. See Also GetURI(Int32) | Improve this Doc View Source GetValue(Int32) Look up an attribute's value by index. Declaration string GetValue(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The attribute's value as a string, or null if the index is out of range. Remarks If the attribute value is a list of tokens (IDREFS, ENTITIES, or NMTOKENS), the tokens will be concatenated into a single string with each token separated by a single space. See Also Length | Improve this Doc View Source GetValue(String) Look up an attribute's value by XML qualified (prefixed) name. See GetValue(Int32) for a description of the possible values. Declaration string GetValue(string qName) Parameters Type Name Description System.String qName Returns Type Description System.String | Improve this Doc View Source GetValue(String, String) Look up an attribute's value by Namespace name. See GetValue(Int32) for a description of the possible values. Declaration string GetValue(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty String if the name has no Namespace URI. System.String localName The local name of the attribute. Returns Type Description System.String The attribute value as a string, or null if the attribute is not in the list. See Also Attributes IDeclHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.IContentHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IContentHandler.html",
    "title": "Interface IContentHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IContentHandler Receive notification of the logical content of a document. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IContentHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This is the main interface that most SAX applications implement: if the application needs to be informed of basic parsing events, it implements this interface and registers an instance with the SAX parser using the ContentHandler method.The parser uses the instance to report basic document-related events like the start and end of elements and character data. The order of events in this interface is very important, and mirrors the order of information in the document itself.For example, all of an element's content (character data, processing instructions, and/or subelements) will appear, in order, between the startElement event and the corresponding endElement event. This interface is similar to the now-deprecated SAX 1.0 DocumentHandler interface, but it adds support for Namespaces and for reporting skipped entities(in non-validating XML processors). Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Receive notification of character data. Declaration void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch the characters from the XML document System.Int32 start the start position in the array System.Int32 length the number of characters to read from the array Remarks The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information. The application must not attempt to read from the array outside of the specified range. Individual characters may consist of more than one Java char value.There are two important cases where this happens, because characters can't be represented in just sixteen bits. In one case, characters are represented in a Surrogate Pair , using two special Unicode values. Such characters are in the so-called \"Astral Planes\", with a code point above U+FFFF.A second case involves composite characters, such as a base character combining with one or more accent characters. Your code should not assume that algorithms using char -at-a-time idioms will be working in character units; in some cases they will split characters. This is relevant wherever XML permits arbitrary characters, such as attribute values, processing instruction data, and comments as well as in data reported from this method. It's also generally relevant whenever Java code manipulates internationalized text; the issue isn't unique to XML. Note that some parsers will report whitespace in element content using the IgnorableWhitespace(Char[], Int32, Int32) method rather than this one (validating parsers must do so). Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also IgnorableWhitespace(Char[], Int32, Int32) ILocator | Improve this Doc View Source EndDocument() Receive notification of the end of a document. Declaration void EndDocument() Remarks There is an apparent contradiction between the documentation for this method and the documentation for FatalError(SAXParseException) . Until this ambiguity is resolved in a future major release, clients should make no assumptions about whether EndDocument() will or will not be invoked when the parser has reported a FatalError(SAXParseException) or thrown an exception. The SAX parser will invoke this method only once, and it will be the last method invoked during the parse.The parser shall not invoke this method until it has either abandoned parsing (because of an unrecoverable error) or reached the end of input. Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also StartDocument() | Improve this Doc View Source EndElement(String, String, String) Receive notification of the end of an element. Declaration void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String localName the local name (without prefix), or the empty string if Namespace processing is not being performed System.String qName the qualified XML name (with prefix), or the empty string if qualified names are not available Remarks The SAX parser will invoke this method at the end of every element in the XML document; there will be a corresponding StartElement(String, String, String, IAttributes) event for every endElement event (even when the element is empty). For information on the names, see StartElement(String, String, String, IAttributes) . Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception | Improve this Doc View Source EndPrefixMapping(String) End the scope of a prefix-URI mapping. Declaration void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix the prefix that was being mapped. This is the empty string when a default mapping scope ends. Remarks See StartPrefixMapping(String, String) for details. These events will always occur immediately after the corresponding EndElement(String, String, String) event, but the order of EndPrefixMapping(String) events is not otherwise guaranteed. Exceptions Type Condition SAXException the client may throw an exception during processing See Also EndPrefixMapping(String) EndElement(String, String, String) | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Receive notification of ignorable whitespace in element content. Declaration void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch the characters from the XML document System.Int32 start the start position in the array System.Int32 length the number of characters to read from the array Remarks Validating Parsers must use this method to report each chunk of whitespace in element content (see the W3C XML 1.0 recommendation, section 2.10): non-validating parsers may also use this method if they are capable of parsing and using content models. SAX parsers may return all contiguous whitespace in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information. The application must not attempt to read from the array outside of the specified range. Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also Characters(Char[], Int32, Int32) | Improve this Doc View Source ProcessingInstruction(String, String) Receive notification of a processing instruction. Declaration void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target the processing instruction target System.String data the processing instruction data, or null if none was supplied. The data does not include any whitespace separating it from the target Remarks The Parser will invoke this method once for each processing instruction found: note that processing instructions may occur before or after the main document element. A SAX parser must never report an XML declaration(XML 1.0, section 2.8) or a text declaration(XML 1.0, section 4.3.1) using this method. Like Characters(Char[], Int32, Int32) , processing instruction data may have characters that need more than one char value. Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception | Improve this Doc View Source SetDocumentLocator(ILocator) Receive an object for locating the origin of SAX document events. Declaration void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator an object that can return the location of any SAX document event Remarks SAX parsers are strongly encouraged (though not absolutely required) to supply a locator: if it does so, it must supply the locator to the application by invoking this method before invoking any of the other methods in the ContentHandler interface. The locator allows the application to determine the end position of any document-related event, even if the parser is not reporting an error. Typically, the application will use this information for reporting its own errors (such as character content that does not match an application's business rules). The information returned by the locator is probably not sufficient for use with a search engine. Note that the locator will return correct information only during the invocation SAX event callbacks after StartDocument() returns and before EndDocument() is called. The application should not attempt to use it at any other time. See Also ILocator | Improve this Doc View Source SkippedEntity(String) Receive notification of a skipped entity. This is not called for entity references within markup constructs such as element start tags or markup declarations. (The XML recommendation requires reporting skipped external entities. SAX also reports internal entity expansion/non-expansion, except within markup constructs.) The Parser will invoke this method each time the entity is skipped.Non-validating processors may skip entities if they have not seen the declarations(because, for example, the entity was declared in an external DTD subset). All processors may skip external entities, depending on the values of the http://xml.org/sax/features/external-general-entities and the http://xml.org/sax/features/external-general-entities properties. Declaration void SkippedEntity(string name) Parameters Type Name Description System.String name the name of the skipped entity. If it is a parameter entity, the name will begin with '%', and if it is the external DTD subset, it will be the string \"[dtd]\" See Also SAXException | Improve this Doc View Source StartDocument() Receive notification of the beginning of a document. Declaration void StartDocument() Remarks The SAX parser will invoke this method only once, before any other event callbacks (except for SetDocumentLocator(ILocator) . Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also EndDocument() | Improve this Doc View Source StartElement(String, String, String, IAttributes) Receive notification of the beginning of an element. The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding EndElement(String, String, String) event for every StartElement(String, String, String, IAttributes) event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding EndElement(String, String, String) event. This event allows up to three name components for each element: the Namespace URI; the local name; and the qualified (prefixed) name. Any or all of these may be provided, depending on the values of the http://xml.org/sax/features/namespaces and the http://xml.org/sax/features/namespace-prefixes properties: the Namespace URI and local name are required when the namespaces property is true (the default), and are optional when the namespaces property is false (if one is specified, both must be); the qualified name is required when the namespace-prefixes property is true , and is optional when the namespace-prefixes property is false (the default). Note that the attribute list provided will contain only attributes with explicit values (specified or defaulted): IMPLIED attributes will be omitted. The attribute list will contain attributes used for Namespace declarations (xmlns/// attributes) only if the http://xml.org/sax/features/namespace-prefixes property is true (it is false by default, and support for a true value is optional). Like Characters(Char[], Int32, Int32) , attribute values may have characters that need more than one char value. Declaration void StartElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String localName the local name (without prefix), or the empty string if Namespace processing is not being performed System.String qName the qualified name (with prefix), or the empty string if qualified names are not available IAttributes atts the attributes attached to the element. If there are no attributes, it shall be an empty IAttributes object. The value of this object after StartElement(String, String, String, IAttributes) returns is undefined Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also EndElement(String, String, String) IAttributes Attributes | Improve this Doc View Source StartPrefixMapping(String, String) Begin the scope of a prefix-URI Namespace mapping. Declaration void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix the Namespace prefix being declared. An empty string is used for the default element namespace, which has no prefix. System.String uri the Namespace URI the prefix is mapped to Remarks The information from this event is not necessary for normal Namespace processing: the SAX XML reader will automatically replace prefixes for element and attribute names when the http://xml.org/sax/features/namespaces feature is true (the default). There are cases, however, when applications need to use prefixes in character data or in attribute values, where they cannot safely be expanded automatically; the start/endPrefixMapping event supplies the information to the application to expand prefixes in those contexts itself, if necessary. Note that start/endPrefixMapping events are not guaranteed to be properly nested relative to each other: all startPrefixMapping events will occur immediately before the corresponding StartElement(String, String, String, IAttributes) event, and all EndPrefixMapping(String) events will occur immediately after the corresponding EndElement(String, String, String) event, but their order is not otherwise guaranteed. There should never be start/endPrefixMapping events for the \"xml\" prefix, since it is predeclared and immutable. Exceptions Type Condition SAXException the client may throw an exception during processing See Also EndPrefixMapping(String) StartElement(String, String, String, IAttributes) See Also IXMLReader IDTDHandler IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.IDTDHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IDTDHandler.html",
    "title": "Interface IDTDHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IDTDHandler Receive notification of basic DTD-related events. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IDTDHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX application needs information about notations and unparsed entities, then the application implements this interface and registers an instance with the SAX parser using the parser's setDTDHandler method. The parser uses the instance to report notation and unparsed entity declarations to the application. Note that this interface includes only those DTD events that the XML recommendation requires processors to report: notation and unparsed entity declarations. The SAX parser may report these events in any order, regardless of the order in which the notations and unparsed entities were declared; however, all DTD events must be reported after the document handler's startDocument event, and before the first startElement event. (If the ILexicalHandler is used, these events must also be reported before the endDTD event.) It is up to the application to store the information for future use(perhaps in a hash table or object tree). If the application encounters attributes of type \"NOTATION\", \"ENTITY\", or \"ENTITIES\", it can use the information that it obtained through this interface to find the entity and/or notation corresponding with the attribute value. Methods | Improve this Doc View Source NotationDecl(String, String, String) Receive notification of a notation declaration event. Declaration void NotationDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The notation name. System.String publicId The notation's public identifier, or null if none was given. System.String systemId The notation's system identifier, or null if none was given. Remarks It is up to the application to record the notation for later reference, if necessary; notations may appear as attribute values and in unparsed entity declarations, and are sometime used with processing instruction target names. At least one of publicId and systemId must be non-null. If a system identifier is present, and it is a URL, the SAX parser must resolve it fully before passing it to the application through this event. There is no guarantee that the notation declaration will be reported before any unparsed entities that use it. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also UnparsedEntityDecl(String, String, String, String) IAttributes | Improve this Doc View Source UnparsedEntityDecl(String, String, String, String) Receive notification of an unparsed entity declaration event. Declaration void UnparsedEntityDecl(string name, string publicId, string systemId, string notationName) Parameters Type Name Description System.String name The unparsed entity's name. System.String publicId The entity's public identifier, or null if none was given. System.String systemId The entity's system identifier. System.String notationName The name of the associated notation. Remarks Note that the notation name corresponds to a notation reported by the NotationDecl(String, String, String) event. It is up to the application to record the entity for later reference, if necessary; unparsed entities may appear as attribute values. If the system identifier is a URL, the parser must resolve it fully before passing it to the application. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also NotationDecl(String, String, String) IAttributes See Also DTDHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.IEntityResolver.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IEntityResolver.html",
    "title": "Interface IEntityResolver | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IEntityResolver Basic interface for resolving entities. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IEntityResolver Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX application needs to implement customized handling for external entities, it must implement this interface and register an instance with the SAX driver using the EntityResolver property. The XML reader will then allow the application to intercept any external entities(including the external DTD subset and external parameter entities, if any) before including them. Many SAX applications will not need to implement this interface, but it will be especially useful for applications that build XML documents from databases or other specialised input sources, or for applications that use URI types other than URLs. The following resolver would provide the application with a special character stream for the entity with the system identifier \" http://www.myhost.com/today&quot ;: public class MyResolver : IEntityResolver { public InputSource ResolveEntity (string publicId, string systemId) { if (systemId.Equals(\"http://www.myhost.com/today\", StringComparison.Ordinal)) { // return a special input source MyReader reader = new MyReader(); return new InputSource(reader); } else { // use the default behaviour return null; } } } The application can also use this interface to redirect system identifiers to local URIs or to look up replacements in a catalog (possibly by using the public identifier). Methods | Improve this Doc View Source ResolveEntity(String, String) Allow the application to resolve external entities. Declaration InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId The public identifier of the external entity being referenced, or null if none was supplied. System.String systemId The system identifier of the external entity being referenced. Returns Type Description InputSource An InputSource object describing the new input source, or null to request that the parser open a regular URI connection to the system identifier. Remarks The parser will call this method before opening any external entity except the top-level document entity.Such entities include the external DTD subset and external parameter entities referenced within the DTD(in either case, only if the parser reads external parameter entities), and external general entities referenced within the document element(if the parser reads external general entities). The application may request that the parser locate the entity itself, that it use an alternative URI, or that it use data provided by the application(as a character or byte input stream). Application writers can use this method to redirect external system identifiers to secure and/or local URIs, to look up public identifiers in a catalogue, or to read an entity from a database or other input source(including, for example, a dialog box). Neither XML nor SAX specifies a preferred policy for using public or system IDs to resolve resources.However, SAX specifies how to interpret any InputSource returned by this method, and that if none is returned, then the system ID will be dereferenced as a URL. If the system identifier is a URL, the SAX parser must resolve it fully before reporting it to the application. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. System.IO.IOException A .NET-specific IO exception, possibly the result of creating a new System.IO.Stream or System.IO.TextReader for the InputSource . See Also InputSource See Also EntityResolver InputSource"
  },
  "api/Lucene.Net.Benchmarks/Sax.IErrorHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IErrorHandler.html",
    "title": "Interface IErrorHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IErrorHandler Basic interface for SAX error handlers. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IErrorHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX application needs to implement customized error handling, it must implement this interface and then register an instance with the XML reader using the ErrorHandler property. The parser will then report all errors and warnings through this interface. WARNING: If an application does not register an ErrorHandler, XML parsing errors will go unreported, except that SAXParseException s will be thrown for fatal errors. In order to detect validity errors, an ErrorHandler that does something with Error(SAXParseException) calls must be registered. For XML processing errors, a SAX driver must use this interface in preference to throwing an exception: it is up to the application to decide whether to throw an exception for different types of errors and warnings.Note, however, that there is no requirement that the parser continue to report additional errors after a call to FatalError(SAXParseException) . In other words, a SAX driver class may throw an exception after reporting any fatalError. Also parsers may throw appropriate exceptions for non - XML errors. For example, Parse(InputSource) would throw an System.IO.IOException for errors accessing entities or the document. Methods | Improve this Doc View Source Error(SAXParseException) Receive notification of a recoverable error. Declaration void Error(SAXParseException exception) Parameters Type Name Description SAXParseException exception The error information encapsulated in a SAX parse exception. Remarks This corresponds to the definition of \"error\" in section 1.2 of the W3C XML 1.0 Recommendation.For example, a validating parser would use this callback to report the violation of a validity constraint.The default behaviour is to take no action. The SAX parser must continue to provide normal parsing events after invoking this method: it should still be possible for the application to process the document through to the end. If the application cannot do so, then the parser should report a fatal error even if the XML recommendation does not require it to do so. Filters may use this method to report other, non-XML errors as well. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also SAXParseException | Improve this Doc View Source FatalError(SAXParseException) Receive notification of a non-recoverable error. Declaration void FatalError(SAXParseException exception) Parameters Type Name Description SAXParseException exception The error information encapsulated in a SAX parse exception. Remarks There is an apparent contradiction between the documentation for this method and the documentation for EndDocument() . Until this ambiguity is resolved in a future major release, clients should make no assumptions about whether EndDocument() will or will not be invoked when the parser has reported a FatalError() or thrown an exception. This corresponds to the definition of \"fatal error\" in section 1.2 of the W3C XML 1.0 Recommendation.For example, a parser would use this callback to report the violation of a well-formedness constraint. The application must assume that the document is unusable after the parser has invoked this method, and should continue (if at all) only for the sake of collecting additional error messages: in fact, SAX parsers are free to stop reporting any other events once this method has been invoked. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also SAXParseException | Improve this Doc View Source Warning(SAXParseException) Receive notification of a warning. Declaration void Warning(SAXParseException exception) Parameters Type Name Description SAXParseException exception The warning information encapsulated in a SAX parse exception. Remarks SAX parsers will use this method to report conditions that are not errors or fatal errors as defined by the XML recommendation.The default behaviour is to take no action. The SAX parser must continue to provide normal parsing events after invoking this method: it should still be possible for the application to process the document through to the end. Filters may use this method to report other, non-XML warnings as well. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also SAXParseException See Also ErrorHandler SAXParseException"
  },
  "api/Lucene.Net.Benchmarks/Sax.ILocator.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.ILocator.html",
    "title": "Interface ILocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ILocator Interface for associating a SAX event with a document location. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface ILocator Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX parser provides location information to the SAX application, it does so by implementing this interface and then passing an instance to the application using the content handler's SetDocumentLocator(ILocator) method.The application can use the object to obtain the location of any other SAX event in the XML source document. Note that the results returned by the object will be valid only during the scope of each callback method: the application will receive unpredictable results if it attempts to use the locator at any other time, or after parsing completes. SAX parsers are not required to supply a locator, but they are very strongly encouraged to do so. If the parser supplies a locator, it must do so before reporting any other document events. If no locator has been set by the time the application receives the StartDocument() event, the application should assume that a locator is not available. Properties | Improve this Doc View Source ColumnNumber Return the column number where the current document event ends. This is one-based number of Java char values since the last line end. Warning: The return value from the method is intended only as an approximation for the sake of diagnostics; it is not intended to provide sufficient information to edit the character content of the original XML document. For example, when lines contain combining character sequences, wide characters, surrogate pairs, or bi-directional text, the value may not correspond to the column in a text editor's display. The return value is an approximation of the column number in the document entity or external parsed entity where the markup triggering the event appears. If possible, the SAX driver should provide the line position of the first character after the text associated with the document event. The first column in each line is column 1. Returns the column number, or -1 if none is available. Declaration int ColumnNumber { get; } Property Value Type Description System.Int32 See Also LineNumber | Improve this Doc View Source LineNumber Return the line number where the current document event ends. Lines are delimited by line ends, which are defined in the XML specification. Warning: The return value from the method is intended only as an approximation for the sake of diagnostics; it is not intended to provide sufficient information to edit the character content of the original XML document. In some cases, these \"line\" numbers match what would be displayed as columns, and in others they may not match the source text due to internal entity expansion. The return value is an approximation of the line number in the document entity or external parsed entity where the markup triggering the event appears. If possible, the SAX driver should provide the line position of the first character after the text associated with the document event. The first line is line 1. Returns the line number, or -1 if none is available. Declaration int LineNumber { get; } Property Value Type Description System.Int32 See Also ColumnNumber | Improve this Doc View Source PublicId Gets the public identifier for the current document event. The return value is the public identifier of the document entity or of the external parsed entity in which the markup triggering the event appears. Returns a string containing the public identifier, or null if none is available. Declaration string PublicId { get; } Property Value Type Description System.String See Also SystemId | Improve this Doc View Source SystemId Return the system identifier for the current document event. The return value is the system identifier of the document entity or of the external parsed entity in which the markup triggering the event appears. If the system identifier is a URL, the parser must resolve it fully before passing it to the application. For example, a file name must always be provided as a file:... URL, and other kinds of relative URI are also resolved against their bases. Returns a string containing the system identifier, or null if none is available. Declaration string SystemId { get; } Property Value Type Description System.String See Also PublicId See Also SetDocumentLocator ( ILocator )"
  },
  "api/Lucene.Net.Benchmarks/Sax.InputSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.InputSource.html",
    "title": "Class InputSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InputSource A single input source for an XML entity. Inheritance System.Object InputSource 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 : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class InputSource Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class allows a SAX application to encapsulate information about an input source in a single object, which may include a public identifier, a system identifier, a byte stream (possibly with a specified encoding), and/or a character stream. There are two places that the application can deliver an input source to the parser: as the argument to the IParser.Parse(InputSource) method, or as the return value of the ResolveEntity(String, String) method. The SAX parser will use the InputSource object to determine how to read XML input. If there is a character stream available, the parser will read that stream directly, disregarding any text encoding declaration found in that stream. If there is no character stream, but there is a byte stream, the parser will use that byte stream, using the encoding specified in the InputSource or else (if no encoding is specified) autodetecting the character encoding using an algorithm such as the one in the XML specification. If neither a character stream nor a byte stream is available, the parser will attempt to open a URL connection to the resource identified by the system identifier. An InputSource object belongs to the application: the SAX parser shall never modify it in any way (it may modify a copy if necessary). However, standard processing of both byte and character streams is to close them on as part of end-of-parse cleanup, so applications should not attempt to re-use such streams after they have been handed to a parser. Constructors | Improve this Doc View Source InputSource() Zero-argument default constructor. Declaration public InputSource() See Also PublicId SystemId Stream TextReader Encoding | Improve this Doc View Source InputSource(Stream) Create a new input source with a byte stream. Declaration public InputSource(Stream byteStream) Parameters Type Name Description System.IO.Stream byteStream The raw byte stream containing the document. Remarks Application writers should use SystemId to provide a base for resolving relative URIs, may use PublicId to include a public identifier, and may use Encoding to specify the object's character encoding. See Also PublicId SystemId Encoding Stream TextReader | Improve this Doc View Source InputSource(TextReader) Create a new input source with a character stream. Declaration public InputSource(TextReader characterStream) Parameters Type Name Description System.IO.TextReader characterStream Remarks Application writers should use SystemId to provide a base for resolving relative URIs, and may use PublicId to include a public identifier. The character stream shall not include a byte order mark. See Also PublicId SystemId Stream TextReader | Improve this Doc View Source InputSource(String) Create a new input source with a system identifier. Declaration public InputSource(string systemId) Parameters Type Name Description System.String systemId The system identifier (URI). Remarks Applications may use PublicId to include a public identifier as well, or Encoding to specify the character encoding, if known. If the system identifier is a URL, it must be fully resolved (it may not be a relative URL). See Also PublicId SystemId Stream TextReader Encoding Properties | Improve this Doc View Source Encoding Gets or Sets the character encoding. Declaration public virtual Encoding Encoding { get; set; } Property Value Type Description System.Text.Encoding Remarks The encoding must be a string acceptable for an XML encoding declaration(see section 4.3.3 of the XML 1.0 recommendation). This method has no effect when the application provides a character stream. See Also SystemId Stream | Improve this Doc View Source PublicId Gets or Sets the public identifier for this input source. Declaration public virtual string PublicId { get; set; } Property Value Type Description System.String Remarks The public identifier is always optional: if the application writer includes one, it will be provided as part of the location information. See Also PublicId PublicId | Improve this Doc View Source Stream Gets or Sets the byte stream for this input source. Declaration public virtual Stream Stream { get; set; } Property Value Type Description System.IO.Stream Remarks The SAX parser will ignore this if there is also a character stream specified, but it will use a byte stream in preference to opening a URI connection itself. If the application knows the character encoding of the byte stream, it should set it with the setEncoding method. See Also Encoding Stream System.IO.Stream | Improve this Doc View Source SystemId Gets or Sets the system identifier for this input source. Declaration public virtual string SystemId { get; set; } Property Value Type Description System.String Remarks The system identifier is optional if there is a byte stream or a character stream, but it is still useful to provide one, since the application can use it to resolve relative URIs and can include it in error messages and warnings(the parser will attempt to open a connection to the URI only if there is no byte stream or character stream specified). If the application knows the character encoding of the object pointed to by the system identifier, it can register the encoding using the Encoding property setter. If the system identifier is a URL, it must be fully resolved(it may not be a relative URL). See Also Encoding SystemId SystemId SystemId | Improve this Doc View Source TextReader Gets or Sets the character stream for this input source. Declaration public virtual TextReader TextReader { get; set; } Property Value Type Description System.IO.TextReader Remarks If there is a character stream specified, the SAX parser will ignore any byte stream and will not attempt to open a URI connection to the system identifier. See Also System.IO.TextReader See Also Parse ( InputSource ) ResolveEntity ( System.String , System.String ) System.IO.Stream System.IO.TextReader"
  },
  "api/Lucene.Net.Benchmarks/Sax.IXMLFilter.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IXMLFilter.html",
    "title": "Interface IXMLFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IXMLFilter Interface for an XML filter. Inherited Members IXMLReader.GetFeature(String) IXMLReader.SetFeature(String, Boolean) IXMLReader.GetProperty(String) IXMLReader.SetProperty(String, Object) IXMLReader.EntityResolver IXMLReader.DTDHandler IXMLReader.ContentHandler IXMLReader.ErrorHandler IXMLReader.Parse(InputSource) IXMLReader.Parse(String) Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IXMLFilter : IXMLReader Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XML filter is like an XML reader, except that it obtains its events from another XML reader rather than a primary source like an XML document or database.Filters can modify a stream of events as they pass on to the final application. The XMLFilterImpl helper class provides a convenient base for creating SAX2 filters, by passing on all IEntityResolver , IDTDHandler , IContentHandler and IErrorHandler events automatically. Properties | Improve this Doc View Source Parent Gets or sets the parent reader. Returns the parent filter, or null if none has been set. Declaration IXMLReader Parent { get; set; } Property Value Type Description IXMLReader Remarks This method allows the application to link or query the parent reader (which may be another filter). It is generally a bad idea to perform any operations on the parent reader directly: they should all pass through this filter."
  },
  "api/Lucene.Net.Benchmarks/Sax.IXMLReader.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IXMLReader.html",
    "title": "Interface IXMLReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IXMLReader Interface for an XML filter. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IXMLReader Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XML filter is like an XML reader, except that it obtains its events from another XML reader rather than a primary source like an XML document or database.Filters can modify a stream of events as they pass on to the final application. The IXMLFilter helper class provides a convenient base for creating SAX2 filters, by passing on all IEntityResolver , IDTDHandler , IContentHandler and IErrorHandler events automatically. Properties | Improve this Doc View Source ContentHandler Gets or Sets a content event handler. Declaration IContentHandler ContentHandler { get; set; } Property Value Type Description IContentHandler Remarks If the application does not register a content handler, all content events reported by the SAX parser will be silently ignored. Applications may register a new or different handler in the middle of a parse, and the SAX parser must begin using the new handler immediately. | Improve this Doc View Source DTDHandler Gets or Sets a DTD event handler. Declaration IDTDHandler DTDHandler { get; set; } Property Value Type Description IDTDHandler Remarks If the application does not register a DTD handler, all DTD events reported by the SAX parser will be silently ignored. Applications may register a new or different handler in the middle of a parse, and the SAX parser must begin using the new handler immediately. | Improve this Doc View Source EntityResolver Gets or Sets an entity resolver. Declaration IEntityResolver EntityResolver { get; set; } Property Value Type Description IEntityResolver Remarks If the application does not register an entity resolver, the IXMLReader will perform its own default resolution. Applications may register a new or different resolver in the middle of a parse, and the SAX parser must begin using the new resolver immediately. | Improve this Doc View Source ErrorHandler Gets or Sets an error event handler. Declaration IErrorHandler ErrorHandler { get; set; } Property Value Type Description IErrorHandler Remarks If the application does not register an error handler, all error events reported by the SAX parser will be silently ignored; however, normal processing may not continue. It is highly recommended that all SAX applications implement an error handler to avoid unexpected bugs. Applications may register a new or different handler in the middle of a parse, and the SAX parser must begin using the new handler immediately. Methods | Improve this Doc View Source GetFeature(String) Look up the value of a feature flag. Declaration bool GetFeature(string name) Parameters Type Name Description System.String name The feature name, which is a fully-qualified URI. Returns Type Description System.Boolean The current value of the feature (true or false). Remarks The feature name is any fully-qualified URI. It is possible for an XMLReader to recognize a feature name but temporarily be unable to return its value. Some feature values may be available only in specific contexts, such as before, during, or after a parse. Also, some feature values may not be programmatically accessible. (In the case of an adapter for SAX1 {@link Parser}, there is no implementation-independent way to expose whether the underlying parser is performing validation, expanding external entities, and so forth.) All XMLReaders are required to recognize the http://xml.org/sax/features/namespaces and the http://xml.org/sax/features/namespace-prefixes feature names. Typical usage is something like this: XMLReader r = new MySAXDriver(); // try to activate validation try { r.SetFeature(\"http://xml.org/sax/features/validation\", true); } catch (SAXException e) { Console.Error.WriteLine(\"Cannot activate validation.\"); } // register event handlers r.ContentHandler = new MyContentHandler(); r.ErrorHandler = new MyErrorHandler(); // parse the first document try { r.Parse(\"http://www.foo.com/mydoc.xml\"); } catch (IOException e) { Console.Error.WriteLine(\"I/O exception reading XML document\"); } catch (SAXException e) { Console.Error.WriteLine(\"XML exception reading document.\"); } Implementors are free (and encouraged) to invent their own features, using names built on their own URIs. Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the feature name but cannot determine its value at this time. See Also SetFeature(String, Boolean) | Improve this Doc View Source GetProperty(String) Look up the value of a property. Declaration object GetProperty(string name) Parameters Type Name Description System.String name The property name, which is a fully-qualified URI. Returns Type Description System.Object The current value of the property. Remarks The property name is any fully-qualified URI. It is possible for an XMLReader to recognize a property name but temporarily be unable to return its value. Some property values may be available only in specific contexts, such as before, during, or after a parse. IXMLReader s are not required to recognize any specific property names, though an initial core set is documented for SAX2. Implementors are free (and encouraged) to invent their own properties, using names built on their own URIs. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the property name but cannot determine its value at this time. See Also SetProperty(String, Object) | Improve this Doc View Source Parse(InputSource) Parse an XML document. Declaration void Parse(InputSource input) Parameters Type Name Description InputSource input The input source for the top-level of the XML document. Remarks The application can use this method to instruct the XML reader to begin parsing an XML document from any valid input source (a character stream, a byte stream, or a URI). Applications may not invoke this method while a parse is in progress (they should create a new XMLReader instead for each nested XML document). Once a parse is complete, an application may reuse the same XMLReader object, possibly with a different input source. Configuration of the IXMLReader object (such as handler bindings and values established for feature flags and properties) is unchanged by completion of a parse, unless the definition of that aspect of the configuration explicitly specifies other behavior. (For example, feature flags or properties exposing characteristics of the document being parsed.) During the parse, the XMLReader will provide information about the XML document through the registered event handlers. This method is synchronous: it will not return until parsing has ended. If a client application wants to terminate parsing early, it should throw an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. System.IO.IOException An IO exception from the parser, possibly from a byte stream or character stream supplied by the application. See Also InputSource Parse(String) EntityResolver DTDHandler ContentHandler ErrorHandler | Improve this Doc View Source Parse(String) Parse an XML document from a system identifier (URI). Declaration void Parse(string systemId) Parameters Type Name Description System.String systemId The system identifier (URI). Remarks This method is a shortcut for the common case of reading a document from a system identifier. It is the exact equivalent of the following: Parse(new InputSource(systemId)); If the system identifier is a URL, it must be fully resolved by the application before it is passed to the parser. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. System.IO.IOException An IO exception from the parser, possibly from a byte stream or character stream supplied by the application. | Improve this Doc View Source SetFeature(String, Boolean) Set the value of a feature flag. The feature name is any fully-qualified URI. It is possible for an XMLReader to expose a feature value but to be unable to change the current value. Some feature values may be immutable or mutable only in specific contexts, such as before, during, or after a parse. All XMLReaders are required to support setting http://xml.org/sax/features/namespaces to true and http://xml.org/sax/features/namespace-prefixes to false. Declaration void SetFeature(string name, bool value) Parameters Type Name Description System.String name The feature name, which is a fully-qualified URI. System.Boolean value The requested value of the feature (true or false). Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the feature name but cannot set the requested value. See Also GetFeature(String) | Improve this Doc View Source SetProperty(String, Object) Set the value of a property. Declaration void SetProperty(string name, object value) Parameters Type Name Description System.String name The property name, which is a fully-qualified URI. System.Object value The requested value for the property. Remarks The property name is any fully-qualified URI. It is possible for an IXMLReader to recognize a property name but to be unable to change the current value. Some property values may be immutable or mutable only in specific contexts, such as before, during, or after a parse. IXMLReader s are not required to recognize setting any specific property names, though a core set is defined by SAX2. This method is also the standard mechanism for setting extended handlers. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the property name but cannot set the requested value. See Also XMLFilter"
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXException.html",
    "title": "Class SAXException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SAXException Encapsulate a general SAX error or warning. Inheritance System.Object System.Exception SAXException SAXNotRecognizedException SAXNotSupportedException SAXParseException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXException : Exception, ISerializable Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class can contain basic error or warning information from either the XML parser or the application: a parser writer or application writer can subclass it to provide additional functionality. SAX handlers may throw this exception or any exception subclassed from it. If the application needs to pass through other types of exceptions, it must wrap those exceptions in a SAXException or an exception derived from a SAXException . If the parser or application needs to include information about a specific location in an XML document, it should use the SAXParseException subclass. Constructors | Improve this Doc View Source SAXException() Create a new SAXException . Declaration public SAXException() | Improve this Doc View Source SAXException(Exception) Create a new SAXException wrapping an existing exception. Declaration public SAXException(Exception e) Parameters Type Name Description System.Exception e The exception to be wrapped in a SAXException . Remarks The existing exception will be embedded in the new one, and its message will become the default message for the SAXException . | Improve this Doc View Source SAXException(String) Create a new SAXException . Declaration public SAXException(string message) Parameters Type Name Description System.String message The error or warning message. | Improve this Doc View Source SAXException(String, Exception) Create a new SAXException from an existing exception. Declaration public SAXException(string message, Exception e) Parameters Type Name Description System.String message The detail message. System.Exception e The exception to be wrapped in a SAXException. Remarks The existing exception will be embedded in the new one, but the new exception will have its own message. Properties | Improve this Doc View Source Exception Gets the embedded exception, if any, or null if there is none. Declaration public virtual Exception Exception { get; } Property Value Type Description System.Exception | Improve this Doc View Source Message Return a detail message for this exception. Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message Remarks If there is an embedded exception, and if the SAXException has no detail message of its own, this method will return the detail message from the embedded exception. Methods | Improve this Doc View Source ToString() Override ToString to pick up any embedded exception. Declaration public override string ToString() Returns Type Description System.String A string representation of this exception. Overrides System.Exception.ToString() Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXNotRecognizedException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXNotRecognizedException.html",
    "title": "Class SAXNotRecognizedException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SAXNotRecognizedException Exception class for an unrecognized identifier. Inheritance System.Object System.Exception SAXException SAXNotRecognizedException Implements System.Runtime.Serialization.ISerializable Inherited Members SAXException.Message SAXException.Exception SAXException.ToString() System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXNotRecognizedException : SAXException, ISerializable Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XMLReader will throw this exception when it finds an unrecognized feature or property identifier; SAX applications and extensions may use this class for other, similar purposes. Constructors | Improve this Doc View Source SAXNotRecognizedException() Default constructor. Declaration public SAXNotRecognizedException() | Improve this Doc View Source SAXNotRecognizedException(String) Construct a new exception with the given message. Declaration public SAXNotRecognizedException(string message) Parameters Type Name Description System.String message The text message of the exception. Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXNotSupportedException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXNotSupportedException.html",
    "title": "Class SAXNotSupportedException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SAXNotSupportedException Exception class for an unsupported operation. Inheritance System.Object System.Exception SAXException SAXNotSupportedException Implements System.Runtime.Serialization.ISerializable Inherited Members SAXException.Message SAXException.Exception SAXException.ToString() System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXNotSupportedException : SAXException, ISerializable Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XMLReader will throw this exception when it recognizes a feature or property identifier, but cannot perform the requested operation(setting a state or value). Other SAX2 applications and extensions may use this class for similar purposes. Constructors | Improve this Doc View Source SAXNotSupportedException() Construct a new exception with no message. Declaration public SAXNotSupportedException() | Improve this Doc View Source SAXNotSupportedException(String) Construct a new exception with the given message. Declaration public SAXNotSupportedException(string message) Parameters Type Name Description System.String message The text message of the exception. Implements System.Runtime.Serialization.ISerializable See Also SAXNotRecognizedException"
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXParseException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXParseException.html",
    "title": "Class SAXParseException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SAXParseException Encapsulate an XML parse error or warning. Inheritance System.Object System.Exception SAXException SAXParseException Implements System.Runtime.Serialization.ISerializable Inherited Members SAXException.Message SAXException.Exception SAXException.ToString() System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXParseException : SAXException, ISerializable Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This exception may include information for locating the error in the original XML document, as if it came from a ILocator object. Note that although the application will receive a SAXParseException as the argument to the handlers in the IErrorHandler interface, the application is not actually required to throw the exception; instead, it can simply read the information in it and take a different action. Since this exception is a subclass of SAXException , it inherits the ability to wrap another exception. Constructors | Improve this Doc View Source SAXParseException(String, ILocator) Create a new SAXParseException from a message and a ILocator . Declaration public SAXParseException(string message, ILocator locator) Parameters Type Name Description System.String message The error or warning message. ILocator locator The locator object for the error or warning (may be null). Remarks This constructor is especially useful when an application is creating its own exception from within a IContentHandler callback. See Also ILocator | Improve this Doc View Source SAXParseException(String, ILocator, Exception) Wrap an existing exception in a SAXParseException. Declaration public SAXParseException(string message, ILocator locator, Exception e) Parameters Type Name Description System.String message The error or warning message, or null to use the message from the embedded exception. ILocator locator The locator object for the error or warning (may be null). System.Exception e Any exception. Remarks This constructor is especially useful when an application is creating its own exception from within a IContentHandler callback, and needs to wrap an existing exception that is not a subclass of SAXException . See Also ILocator | Improve this Doc View Source SAXParseException(String, String, String, Int32, Int32) Create a new SAXParseException. Declaration public SAXParseException(string message, string publicId, string systemId, int lineNumber, int columnNumber) Parameters Type Name Description System.String message The error or warning message. System.String publicId The public identifier of the entity that generated the error or warning. System.String systemId The system identifier of the entity that generated the error or warning. System.Int32 lineNumber The line number of the end of the text that caused the error or warning. System.Int32 columnNumber The column number of the end of the text that cause the error or warning. Remarks This constructor is most useful for parser writers. All parameters except the message are as if they were provided by a ILocator . For example, if the system identifier is a URL (including relative filename), the caller must resolve it fully before creating the exception. | Improve this Doc View Source SAXParseException(String, String, String, Int32, Int32, Exception) Create a new SAXParseException with an embedded exception. Declaration public SAXParseException(string message, string publicId, string systemId, int lineNumber, int columnNumber, Exception e) Parameters Type Name Description System.String message The error or warning message, or null to use the message from the embedded exception. System.String publicId The public identifier of the entity that generated the error or warning. System.String systemId The system identifier of the entity that generated the error or warning. System.Int32 lineNumber The line number of the end of the text that caused the error or warning. System.Int32 columnNumber The column number of the end of the text that cause the error or warning. System.Exception e Another exception to embed in this one. Remarks This constructor is most useful for parser writers who need to wrap an exception that is not a subclass of SAXException . All parameters except the message and exception are as if they were provided by a ILocator . For example, if the system identifier is a URL (including relative filename), the caller must resolve it fully before creating the exception. Properties | Improve this Doc View Source ColumnNumber The column number of the end of the text where the exception occurred. The first column in a line is position 1. An integer representing the column number, or -1 if none is available. Declaration public int ColumnNumber { get; } Property Value Type Description System.Int32 See Also ColumnNumber | Improve this Doc View Source LineNumber The line number of the end of the text where the exception occurred. The first line is line 1. An integer representing the line number, or -1 if none is available. Declaration public int LineNumber { get; } Property Value Type Description System.Int32 See Also LineNumber | Improve this Doc View Source PublicId Get the public identifier of the entity where the exception occurred. Returns a string containing the public identifier, or null if none is available. Declaration public string PublicId { get; } Property Value Type Description System.String See Also PublicId | Improve this Doc View Source SystemId Get the system identifier of the entity where the exception occurred. If the system identifier is a URL, it will have been resolved fully. A string containing the system identifier, or null if none is available. Declaration public string SystemId { get; } Property Value Type Description System.String See Also SystemId Implements System.Runtime.Serialization.ISerializable See Also SAXException ILocator IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.Element.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.Element.html",
    "title": "Class Element | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Element The internal representation of an actual element (not an element type). An Element has an element type, attributes, and a successor Element for use in constructing stacks and queues of Elements. Inheritance System.Object Element 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class Element Constructors | Improve this Doc View Source Element(ElementType, Boolean) Return an Element from a specified ElementType. Declaration public Element(ElementType type, bool defaultAttributes) Parameters Type Name Description ElementType type The element type of the newly constructed element System.Boolean defaultAttributes True if default attributes are wanted Properties | Improve this Doc View Source Attributes Gets the attributes as an Attributes object. Returning an Attributes makes the attributes mutable. Declaration public virtual Attributes Attributes { get; } Property Value Type Description Attributes See Also Attributes | Improve this Doc View Source Flags Gets the flags vector of the element's type. Declaration public virtual int Flags { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsPreclosed Return true if this element has been preclosed. Declaration public virtual bool IsPreclosed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LocalName Gets the local name of the element's type. Declaration public virtual string LocalName { get; } Property Value Type Description System.String | Improve this Doc View Source MemberOf Gets the member-of vector of the element's type. Declaration public virtual int MemberOf { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Model Gets the content model vector of the element's type. Declaration public virtual int Model { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Gets the name of the element's type. Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source Namespace Gets the namespace name of the element's type. Declaration public virtual string Namespace { get; } Property Value Type Description System.String | Improve this Doc View Source Next Gets or sets the next element in an element stack or queue. Declaration public virtual Element Next { get; set; } Property Value Type Description Element | Improve this Doc View Source Parent Gets the parent element type of the element's type. Declaration public virtual ElementType Parent { get; } Property Value Type Description ElementType | Improve this Doc View Source Type Gets the element type. Declaration public virtual ElementType Type { get; } Property Value Type Description ElementType Methods | Improve this Doc View Source Anonymize() Make this element anonymous. Remove any id or name attribute present in the element's attributes. Declaration public virtual void Anonymize() | Improve this Doc View Source CanContain(Element) Return true if the type of this element can contain the type of another element. Convenience method. Declaration public virtual bool CanContain(Element other) Parameters Type Name Description Element other The other element Returns Type Description System.Boolean | Improve this Doc View Source Clean() Clean the attributes of this element. Attributes with null name (the name was ill-formed) or null value (the attribute was present in the element type but not in this actual element) are removed. Declaration public virtual void Clean() | Improve this Doc View Source Preclose() Force this element to preclosed status, meaning that an end-tag has been seen but the element cannot yet be closed for structural reasons. Declaration public virtual void Preclose() | Improve this Doc View Source SetAttribute(String, String, String) Set an attribute and its value into this element. Declaration public virtual void SetAttribute(string name, string type, string value) Parameters Type Name Description System.String name The attribute name (Qname) System.String type The attribute type System.String value The attribute value See Also ElementType Attributes"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.ElementType.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.ElementType.html",
    "title": "Class ElementType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ElementType This class represents an element type in the schema. An element type has a name, a content model vector, a member-of vector, a flags vector, default attributes, and a schema to which it belongs. Inheritance System.Object ElementType 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class ElementType Constructors | Improve this Doc View Source ElementType(String, Int32, Int32, Int32, Schema) Construct an ElementType : but it's better to use ElementType(String, Int32, Int32, Int32) instead. The content model, member-of, and flags vectors are specified as ints. Declaration public ElementType(string name, int model, int memberOf, int flags, Schema schema) Parameters Type Name Description System.String name The element type name System.Int32 model ORed-together bits representing the content models allowed in the content of this element type System.Int32 memberOf ORed-together bits representing the content models to which this element type belongs System.Int32 flags ORed-together bits representing the flags associated with this element type Schema schema The schema with which this element type will be associated Properties | Improve this Doc View Source Attributes Returns the default attributes associated with this element type. Attributes of type CDATA that don't have default values are typically not included. Other attributes without default values have an internal value of null . The return value is an Attributes to allow the caller to mutate the attributes. Declaration public virtual Attributes Attributes { get; } Property Value Type Description Attributes | Improve this Doc View Source Flags Gets or sets the flags associated with this element type as a vector of bits Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source LocalName Gets the local name of this element type. Declaration public virtual string LocalName { get; } Property Value Type Description System.String | Improve this Doc View Source MemberOf Gets or sets the content models to which this element type belongs as a vector of bits Declaration public virtual int MemberOf { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Model Gets or sets the content models of this element type as a vector of bits Declaration public virtual int Model { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Gets the name of this element type. Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source Namespace Gets the namespace name of this element type. Declaration public virtual string Namespace { get; } Property Value Type Description System.String | Improve this Doc View Source Parent Gets or sets the parent element type of this element type. Declaration public virtual ElementType Parent { get; set; } Property Value Type Description ElementType | Improve this Doc View Source Schema Gets the schema which this element type is associated with. Declaration public virtual Schema Schema { get; } Property Value Type Description Schema Methods | Improve this Doc View Source CanContain(ElementType) Returns true if this element type can contain another element type. That is, if any of the models in this element's model vector match any of the models in the other element type's member-of vector. Declaration public virtual bool CanContain(ElementType other) Parameters Type Name Description ElementType other The other element type Returns Type Description System.Boolean | Improve this Doc View Source GetLocalName(String) Return a local name from a Qname. Declaration public virtual string GetLocalName(string name) Parameters Type Name Description System.String name The Qname Returns Type Description System.String The local name | Improve this Doc View Source GetNamespace(String, Boolean) Return a namespace name from a Qname. The attribute flag tells us whether to return an empty namespace name if there is no prefix, or use the schema default instead. Declaration public virtual string GetNamespace(string name, bool attribute) Parameters Type Name Description System.String name The Qname System.Boolean attribute True if name is an attribute name Returns Type Description System.String The namespace name | Improve this Doc View Source Normalize(String) Normalize an attribute value (ID-style). CDATA-style attribute normalization is already done. Declaration public static string Normalize(string value) Parameters Type Name Description System.String value The value to normalize Returns Type Description System.String | Improve this Doc View Source SetAttribute(Attributes, String, String, String) Sets an attribute and its value into an IAttributes object. Attempts to set a namespace declaration are ignored. Declaration public virtual void SetAttribute(Attributes atts, string name, string type, string value) Parameters Type Name Description Attributes atts The Attributes object System.String name The name (Qname) of the attribute System.String type The type of the attribute System.String value The value of the attribute | Improve this Doc View Source SetAttribute(String, String, String) Sets an attribute and its value into this element type. Declaration public virtual void SetAttribute(string name, string type, string value) Parameters Type Name Description System.String name The name of the attribute System.String type The type of the attribute System.String value The value of the attribute See Also Schema"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.html",
    "title": "Namespace TagSoup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace TagSoup Classes Element The internal representation of an actual element (not an element type). An Element has an element type, attributes, and a successor Element for use in constructing stacks and queues of Elements. ElementType This class represents an element type in the schema. An element type has a name, a content model vector, a member-of vector, a flags vector, default attributes, and a schema to which it belongs. HTMLScanner This class implements a table-driven scanner for HTML, allowing for lots of defects. It implements the Scanner interface, which accepts a Reader object to fetch characters from and a ScanHandler object to report lexical events to. HTMLSchema This class provides a Schema that has been preinitialized with HTML elements, attributes, and character entity declarations. All the declarations normally provided with HTML 4.01 are given, plus some that are IE-specific and NS4-specific. Attribute declarations of type CDATA with no default value are not included. Parser The SAX parser class. PYXScanner A IScanner that accepts PYX format instead of HTML. Useful primarily for debugging. PYXWriter A IContentHandler that generates PYX format instead of XML. Primarily useful for debugging. Schema Abstract class representing a TSSL schema. Actual TSSL schemas are compiled into concrete subclasses of this class. XMLWriter Filter to write an XML document from a SAX event stream. Interfaces IAutoDetector Classes which accept an System.IO.Stream and provide a System.IO.TextReader which figures out the encoding of the System.IO.Stream and reads characters from it should conform to this interface. IScanHandler An interface that Scanners use to report events in the input stream. IScanner An interface allowing Parser to invoke scanners."
  },
  "api/Lucene.Net.Benchmarks/TagSoup.HTMLScanner.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.HTMLScanner.html",
    "title": "Class HTMLScanner | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HTMLScanner This class implements a table-driven scanner for HTML, allowing for lots of defects. It implements the Scanner interface, which accepts a Reader object to fetch characters from and a ScanHandler object to report lexical events to. Inheritance System.Object HTMLScanner Implements IScanner ILocator 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class HTMLScanner : IScanner, ILocator Constructors | Improve this Doc View Source HTMLScanner() Declaration public HTMLScanner() Properties | Improve this Doc View Source ColumnNumber Declaration public virtual int ColumnNumber { get; } Property Value Type Description System.Int32 | Improve this Doc View Source LineNumber Declaration public virtual int LineNumber { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PublicId Declaration public virtual string PublicId { get; } Property Value Type Description System.String | Improve this Doc View Source SystemId Declaration public virtual string SystemId { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ResetDocumentLocator(String, String) Reset document locator, supplying systemid and publicid. Declaration public virtual void ResetDocumentLocator(string publicid, string systemid) Parameters Type Name Description System.String publicid Public id System.String systemid System id | Improve this Doc View Source Scan(TextReader, IScanHandler) Scan HTML source, reporting lexical events. Declaration public virtual void Scan(TextReader r, IScanHandler h) Parameters Type Name Description System.IO.TextReader r Reader that provides characters IScanHandler h ScanHandler that accepts lexical events. | Improve this Doc View Source StartCDATA() A callback for the ScanHandler that allows it to force the lexer state to CDATA content (no markup is recognized except the end of element. Declaration public virtual void StartCDATA() Implements IScanner ILocator"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.HTMLSchema.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.HTMLSchema.html",
    "title": "Class HTMLSchema | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HTMLSchema This class provides a Schema that has been preinitialized with HTML elements, attributes, and character entity declarations. All the declarations normally provided with HTML 4.01 are given, plus some that are IE-specific and NS4-specific. Attribute declarations of type CDATA with no default value are not included. Inheritance System.Object Schema HTMLSchema Inherited Members Schema.M_ANY Schema.M_EMPTY Schema.M_PCDATA Schema.M_ROOT Schema.F_RESTART Schema.F_CDATA Schema.F_NOFORCE Schema.ElementType(String, Int32, Int32, Int32) Schema.RootElementType Schema.Attribute(String, String, String, String) Schema.Parent(String, String) Schema.Entity(String, Int32) Schema.GetElementType(String) Schema.GetEntity(String) Schema.Uri Schema.Prefix 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class HTMLSchema : Schema Constructors | Improve this Doc View Source HTMLSchema() Returns a newly constructed HTMLSchema object independent of any existing ones. Declaration public HTMLSchema() Fields | Improve this Doc View Source M_AREA Declaration public const int M_AREA = 2 Field Value Type Description System.Int32 | Improve this Doc View Source M_BLOCK Declaration public const int M_BLOCK = 4 Field Value Type Description System.Int32 | Improve this Doc View Source M_BLOCKINLINE Declaration public const int M_BLOCKINLINE = 8 Field Value Type Description System.Int32 | Improve this Doc View Source M_BODY Declaration public const int M_BODY = 16 Field Value Type Description System.Int32 | Improve this Doc View Source M_CELL Declaration public const int M_CELL = 32 Field Value Type Description System.Int32 | Improve this Doc View Source M_COL Declaration public const int M_COL = 64 Field Value Type Description System.Int32 | Improve this Doc View Source M_DEF Declaration public const int M_DEF = 128 Field Value Type Description System.Int32 | Improve this Doc View Source M_FORM Declaration public const int M_FORM = 256 Field Value Type Description System.Int32 | Improve this Doc View Source M_FRAME Declaration public const int M_FRAME = 512 Field Value Type Description System.Int32 | Improve this Doc View Source M_HEAD Declaration public const int M_HEAD = 1024 Field Value Type Description System.Int32 | Improve this Doc View Source M_HTML Declaration public const int M_HTML = 2048 Field Value Type Description System.Int32 | Improve this Doc View Source M_INLINE Declaration public const int M_INLINE = 4096 Field Value Type Description System.Int32 | Improve this Doc View Source M_LEGEND Declaration public const int M_LEGEND = 8192 Field Value Type Description System.Int32 | Improve this Doc View Source M_LI Declaration public const int M_LI = 16384 Field Value Type Description System.Int32 | Improve this Doc View Source M_NOLINK Declaration public const int M_NOLINK = 32768 Field Value Type Description System.Int32 | Improve this Doc View Source M_OPTION Declaration public const int M_OPTION = 65536 Field Value Type Description System.Int32 | Improve this Doc View Source M_OPTIONS Declaration public const int M_OPTIONS = 131072 Field Value Type Description System.Int32 | Improve this Doc View Source M_P Declaration public const int M_P = 262144 Field Value Type Description System.Int32 | Improve this Doc View Source M_PARAM Declaration public const int M_PARAM = 524288 Field Value Type Description System.Int32 | Improve this Doc View Source M_TABLE Declaration public const int M_TABLE = 1048576 Field Value Type Description System.Int32 | Improve this Doc View Source M_TABULAR Declaration public const int M_TABULAR = 2097152 Field Value Type Description System.Int32 | Improve this Doc View Source M_TR Declaration public const int M_TR = 4194304 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.IAutoDetector.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.IAutoDetector.html",
    "title": "Interface IAutoDetector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAutoDetector Classes which accept an System.IO.Stream and provide a System.IO.TextReader which figures out the encoding of the System.IO.Stream and reads characters from it should conform to this interface. Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public interface IAutoDetector Methods | Improve this Doc View Source AutoDetectingReader(Stream) Given a System.IO.Stream , return a suitable System.IO.TextReader that understands the presumed character encoding of that System.IO.Stream . If bytes are consumed from the System.IO.Stream in the process, they must be pushed back onto the InputStream so that they can be reinterpreted as characters. Declaration TextReader AutoDetectingReader(Stream stream) Parameters Type Name Description System.IO.Stream stream The System.IO.Stream Returns Type Description System.IO.TextReader A System.IO.TextReader that reads from the System.IO.Stream See Also System.IO.Stream System.IO.TextReader"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.IScanHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.IScanHandler.html",
    "title": "Interface IScanHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IScanHandler An interface that Scanners use to report events in the input stream. Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public interface IScanHandler Methods | Improve this Doc View Source Adup(Char[], Int32, Int32) Reports an attribute name without a value. Declaration void Adup(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aname(Char[], Int32, Int32) Reports an attribute name; a value will follow. Declaration void Aname(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aval(Char[], Int32, Int32) Reports an attribute value. Declaration void Aval(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source CDSect(Char[], Int32, Int32) Reports the content of a CDATA section (not a CDATA element) Declaration void CDSect(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Cmnt(Char[], Int32, Int32) Reports a comment. Declaration void Cmnt(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Decl(Char[], Int32, Int32) Reports a <!....> declaration - typically a DOCTYPE Declaration void Decl(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Entity(Char[], Int32, Int32) Reports an entity reference or character reference. Declaration void Entity(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EOF(Char[], Int32, Int32) Reports EOF. Declaration void EOF(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETag(Char[], Int32, Int32) Reports an end-tag. Declaration void ETag(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source GetEntity() Returns the value of the last entity or character reference reported. Declaration int GetEntity() Returns Type Description System.Int32 The value of the last entity or character reference reported. | Improve this Doc View Source GI(Char[], Int32, Int32) Reports the general identifier (element type name) of a start-tag. Declaration void GI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PCDATA(Char[], Int32, Int32) Reports character content. Declaration void PCDATA(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PI(Char[], Int32, Int32) Reports the data part of a processing instruction. Declaration void PI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PITarget(Char[], Int32, Int32) Reports the target part of a processing instruction. Declaration void PITarget(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagC(Char[], Int32, Int32) Reports the close of a start-tag. Declaration void STagC(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagE(Char[], Int32, Int32) Reports the close of an empty-tag. Declaration void STagE(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.IScanner.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.IScanner.html",
    "title": "Interface IScanner | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IScanner An interface allowing Parser to invoke scanners. Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public interface IScanner Methods | Improve this Doc View Source ResetDocumentLocator(String, String) Reset the embedded locator. Declaration void ResetDocumentLocator(string publicid, string systemid) Parameters Type Name Description System.String publicid The publicid of the source System.String systemid The systemid of the source | Improve this Doc View Source Scan(TextReader, IScanHandler) Invoke a scanner. Declaration void Scan(TextReader br, IScanHandler handler) Parameters Type Name Description System.IO.TextReader br A source of characters to scan IScanHandler handler A IScanHandler to report events to | Improve this Doc View Source StartCDATA() Signal to the scanner to start CDATA content mode. Declaration void StartCDATA()"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.Parser.html",
    "title": "Class Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Parser The SAX parser class. Inheritance System.Object DefaultHandler Parser Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler IScanHandler IXMLReader ILexicalHandler Inherited Members DefaultHandler.ResolveEntity(String, String) DefaultHandler.NotationDecl(String, String, String) DefaultHandler.UnparsedEntityDecl(String, String, String, String) DefaultHandler.SetDocumentLocator(ILocator) DefaultHandler.StartDocument() DefaultHandler.EndDocument() DefaultHandler.StartPrefixMapping(String, String) DefaultHandler.EndPrefixMapping(String) DefaultHandler.StartElement(String, String, String, IAttributes) DefaultHandler.EndElement(String, String, String) DefaultHandler.Characters(Char[], Int32, Int32) DefaultHandler.IgnorableWhitespace(Char[], Int32, Int32) DefaultHandler.ProcessingInstruction(String, String) DefaultHandler.SkippedEntity(String) DefaultHandler.Warning(SAXParseException) DefaultHandler.Error(SAXParseException) DefaultHandler.FatalError(SAXParseException) 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class Parser : DefaultHandler, IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler, IScanHandler, IXMLReader, ILexicalHandler Constructors | Improve this Doc View Source Parser() Creates a new instance of Parser Declaration public Parser() Fields | Improve this Doc View Source AUTO_DETECTOR_PROPERTY Specifies the AutoDetector (for encoding detection) this Parser uses. Declaration public const string AUTO_DETECTOR_PROPERTY = \"http://www.ccil.org/~cowan/tagsoup/properties/auto-detector\" Field Value Type Description System.String | Improve this Doc View Source BOGONS_EMPTY_FEATURE A value of true indicates that the parser will give unknown elements a content model of EMPTY; a value of false , a content model of ANY. Declaration public const string BOGONS_EMPTY_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/bogons-empty\" Field Value Type Description System.String | Improve this Doc View Source CDATA_ELEMENTS_FEATURE A value of \"true\" indicates that the parser will treat CDATA elements specially. Normally true, since the input is by default HTML. Declaration public const string CDATA_ELEMENTS_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/cdata-elements\" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_ATTRIBUTES_FEATURE A value of true indicates that the parser will return default attribute values for missing attributes that have default values. Declaration public const string DEFAULT_ATTRIBUTES_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/default-attributes\" Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_GENERAL_ENTITIES_FEATURE Reports whether this parser processes external general entities (it doe Declaration public const string EXTERNAL_GENERAL_ENTITIES_FEATURE = \"http://xml.org/sax/features/external-general-entities\" Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_PARAMETER_ENTITIES_FEATURE Reports whether this parser processes external parameter entities (it doesn't). Declaration public const string EXTERNAL_PARAMETER_ENTITIES_FEATURE = \"http://xml.org/sax/features/external-parameter-entities\" Field Value Type Description System.String | Improve this Doc View Source IGNORABLE_WHITESPACE_FEATURE A value of \"true\" indicates that the parser will transmit whitespace in element-only content via the SAX ignorableWhitespace callback. Normally this is not done, because HTML is an SGML application and SGML suppresses such whitespace. Declaration public const string IGNORABLE_WHITESPACE_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/ignorable-whitespace\" Field Value Type Description System.String | Improve this Doc View Source IGNORE_BOGONS_FEATURE A value of true indicates that the parser will ignore unknown elements. Declaration public const string IGNORE_BOGONS_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/ignore-bogons\" Field Value Type Description System.String | Improve this Doc View Source IS_STANDALONE_FEATURE May be examined only during a parse, after the startDocument() callback has been completed; read-only. The value is true if the document specified standalone=\"yes\" in its XML declaration, and otherwise is false. (It's always false.) Declaration public const string IS_STANDALONE_FEATURE = \"http://xml.org/sax/features/is-standalone\" Field Value Type Description System.String | Improve this Doc View Source LEXICAL_HANDLER_PARAMETER_ENTITIES_FEATURE A value of \"true\" indicates that the LexicalHandler will report the beginning and end of parameter entities (it won't). Declaration public const string LEXICAL_HANDLER_PARAMETER_ENTITIES_FEATURE = \"http://xml.org/sax/features/lexical-handler/parameter-entities\" Field Value Type Description System.String | Improve this Doc View Source LEXICAL_HANDLER_PROPERTY Used to see some syntax events that are essential in some applications: comments, CDATA delimiters, selected general entity inclusions, and the start and end of the DTD (and declaration of document element name). The Object must implement ILexicalHandler Declaration public const string LEXICAL_HANDLER_PROPERTY = \"http://xml.org/sax/properties/lexical-handler\" Field Value Type Description System.String | Improve this Doc View Source NAMESPACE_PREFIXES_FEATURE A value of \"true\" indicates that XML qualified names (with prefixes) and attributes (including xmlns* attributes) will be available. We don't support this value. Declaration public const string NAMESPACE_PREFIXES_FEATURE = \"http://xml.org/sax/features/namespace-prefixes\" Field Value Type Description System.String | Improve this Doc View Source NAMESPACES_FEATURE A value of \"true\" indicates namespace URIs and unprefixed local names for element and attribute names will be available. Declaration public const string NAMESPACES_FEATURE = \"http://xml.org/sax/features/namespaces\" Field Value Type Description System.String | Improve this Doc View Source RESOLVE_DTD_URIS_FEATURE A value of \"true\" indicates that system IDs in declarations will be absolutized (relative to their base URIs) before reporting. (This returns true but doesn't actually do anything.) Declaration public const string RESOLVE_DTD_URIS_FEATURE = \"http://xml.org/sax/features/resolve-dtd-uris\" Field Value Type Description System.String | Improve this Doc View Source RESTART_ELEMENTS_FEATURE A value of true indicates that the parser will attempt to restart the restartable elements. Declaration public const string RESTART_ELEMENTS_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/restart-elements\" Field Value Type Description System.String | Improve this Doc View Source ROOT_BOGONS_FEATURE A value of true indicates that the parser will allow unknown elements to be the root element. Declaration public const string ROOT_BOGONS_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/root-bogons\" Field Value Type Description System.String | Improve this Doc View Source SCANNER_PROPERTY Specifies the Scanner object this Parser uses. Declaration public const string SCANNER_PROPERTY = \"http://www.ccil.org/~cowan/tagsoup/properties/scanner\" Field Value Type Description System.String | Improve this Doc View Source SCHEMA_PROPERTY Specifies the Schema object this Parser uses. Declaration public const string SCHEMA_PROPERTY = \"http://www.ccil.org/~cowan/tagsoup/properties/schema\" Field Value Type Description System.String | Improve this Doc View Source STRING_INTERNING_FEATURE Has a value of \"true\" if all XML names (for elements, prefixes, attributes, entities, notations, and local names), as well as Namespace URIs, will have been interned using J2N.Text.StringExtensions.Intern(System.String) . This supports fast testing of equality/inequality against string constants, rather than forcing slower calls to System.String.Equals(System.Object) . (We always intern.) Declaration public const string STRING_INTERNING_FEATURE = \"http://xml.org/sax/features/string-interning\" Field Value Type Description System.String | Improve this Doc View Source TRANSLATE_COLONS_FEATURE A value of true indicates that the parser will translate colons into underscores in names. Declaration public const string TRANSLATE_COLONS_FEATURE = \"http://www.ccil.org/~cowan/tagsoup/features/translate-colons\" Field Value Type Description System.String | Improve this Doc View Source UNICODE_NORMALIZATION_CHECKING_FEATURE Controls whether the parser reports Unicode normalization errors as described in section 2.13 and Appendix B of the XML 1.1 Recommendation. (We don't normalize.) Declaration public const string UNICODE_NORMALIZATION_CHECKING_FEATURE = \"http://xml.org/sax/features/unicode-normalization-checking\" Field Value Type Description System.String | Improve this Doc View Source USE_ATTRIBUTES2_FEATURE Returns \"true\" if the Attributes objects passed by this parser in StartElement(String, String, String, IAttributes) implement the IAttributes2 interface. (They don't.) Declaration public const string USE_ATTRIBUTES2_FEATURE = \"http://xml.org/sax/features/use-attributes2\" Field Value Type Description System.String | Improve this Doc View Source USE_ENTITY_RESOLVER2_FEATURE Returns \"true\" if, when setEntityResolver is given an object implementing the IEntityResolver2 interface, those new methods will be used. (They won't be.) Declaration public const string USE_ENTITY_RESOLVER2_FEATURE = \"http://xml.org/sax/features/use-entity-resolver2\" Field Value Type Description System.String | Improve this Doc View Source USE_LOCATOR2_FEATURE Returns \"true\" if the Locator objects passed by this parser parser in SetDocumentLocator(ILocator) implement the ILocator2 interface. (They don't.) Declaration public const string USE_LOCATOR2_FEATURE = \"http://xml.org/sax/features/use-locator2\" Field Value Type Description System.String | Improve this Doc View Source VALIDATION_FEATURE Controls whether the parser is reporting all validity errors (We don't report any validity errors.) Declaration public const string VALIDATION_FEATURE = \"http://xml.org/sax/features/validation\" Field Value Type Description System.String | Improve this Doc View Source XML11_FEATURE Returns true if the parser supports both XML 1.1 and XML 1.0. (Always false .) Declaration public const string XML11_FEATURE = \"http://xml.org/sax/features/xml-1.1\" Field Value Type Description System.String | Improve this Doc View Source XMLNS_URIS_FEATURE Controls whether, when the namespace-prefixes feature is set, the parser treats namespace declaration attributes as being in the http://www.w3.org/2000/xmlns/ namespace. (It doesn't.) Declaration public const string XMLNS_URIS_FEATURE = \"http://xml.org/sax/features/xmlns-uris\" Field Value Type Description System.String Properties | Improve this Doc View Source ContentHandler Declaration public virtual IContentHandler ContentHandler { get; set; } Property Value Type Description IContentHandler | Improve this Doc View Source DTDHandler Declaration public virtual IDTDHandler DTDHandler { get; set; } Property Value Type Description IDTDHandler | Improve this Doc View Source EntityResolver Declaration public virtual IEntityResolver EntityResolver { get; set; } Property Value Type Description IEntityResolver | Improve this Doc View Source ErrorHandler Declaration public virtual IErrorHandler ErrorHandler { get; set; } Property Value Type Description IErrorHandler Methods | Improve this Doc View Source Adup(Char[], Int32, Int32) Declaration public virtual void Adup(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aname(Char[], Int32, Int32) Declaration public virtual void Aname(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aval(Char[], Int32, Int32) Declaration public virtual void Aval(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source CDSect(Char[], Int32, Int32) Declaration public virtual void CDSect(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Cmnt(Char[], Int32, Int32) Declaration public virtual void Cmnt(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public virtual void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source Decl(Char[], Int32, Int32) Parsing the complete XML Document Type Definition is way too complex, but for many simple cases we can extract something useful from it. doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' DeclSep ::= PEReference | S intSubset ::= (markupdecl | DeclSep)* markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral Declaration public virtual void Decl(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EndCDATA() Declaration public virtual void EndCDATA() | Improve this Doc View Source EndDTD() Declaration public virtual void EndDTD() | Improve this Doc View Source EndEntity(String) Declaration public virtual void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Entity(Char[], Int32, Int32) Declaration public virtual void Entity(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EOF(Char[], Int32, Int32) Declaration public virtual void EOF(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETag(Char[], Int32, Int32) Declaration public virtual void ETag(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETagBasic(Char[], Int32, Int32) Declaration public virtual void ETagBasic(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETagCdata(Char[], Int32, Int32) Declaration public virtual bool ETagCdata(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source GetEntity() Declaration public virtual int GetEntity() Returns Type Description System.Int32 | Improve this Doc View Source GetFeature(String) Declaration public virtual bool GetFeature(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean | Improve this Doc View Source GetProperty(String) Declaration public virtual object GetProperty(string name) Parameters Type Name Description System.String name Returns Type Description System.Object | Improve this Doc View Source GI(Char[], Int32, Int32) Declaration public virtual void GI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Parse(InputSource) Declaration public virtual void Parse(InputSource input) Parameters Type Name Description InputSource input | Improve this Doc View Source Parse(String) Declaration public virtual void Parse(string systemid) Parameters Type Name Description System.String systemid | Improve this Doc View Source PCDATA(Char[], Int32, Int32) Declaration public virtual void PCDATA(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PI(Char[], Int32, Int32) Declaration public virtual void PI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PITarget(Char[], Int32, Int32) Declaration public virtual void PITarget(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source SetFeature(String, Boolean) Declaration public virtual void SetFeature(string name, bool value) Parameters Type Name Description System.String name System.Boolean value | Improve this Doc View Source SetProperty(String, Object) Declaration public virtual void SetProperty(string name, object value) Parameters Type Name Description System.String name System.Object value | Improve this Doc View Source STagC(Char[], Int32, Int32) Declaration public virtual void STagC(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagE(Char[], Int32, Int32) Declaration public virtual void STagE(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source StartCDATA() Declaration public virtual void StartCDATA() | Improve this Doc View Source StartDTD(String, String, String) Declaration public virtual void StartDTD(string name, string publicid, string systemid) Parameters Type Name Description System.String name System.String publicid System.String systemid | Improve this Doc View Source StartEntity(String) Declaration public virtual void StartEntity(string name) Parameters Type Name Description System.String name Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler IScanHandler IXMLReader ILexicalHandler"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.PYXScanner.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.PYXScanner.html",
    "title": "Class PYXScanner | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PYXScanner A IScanner that accepts PYX format instead of HTML. Useful primarily for debugging. Inheritance System.Object PYXScanner Implements IScanner 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class PYXScanner : IScanner Methods | Improve this Doc View Source ResetDocumentLocator(String, String) Declaration public virtual void ResetDocumentLocator(string publicid, string systemid) Parameters Type Name Description System.String publicid System.String systemid | Improve this Doc View Source Scan(TextReader, IScanHandler) Declaration public virtual void Scan(TextReader br, IScanHandler h) Parameters Type Name Description System.IO.TextReader br IScanHandler h | Improve this Doc View Source StartCDATA() Declaration public void StartCDATA() Implements IScanner"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.PYXWriter.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.PYXWriter.html",
    "title": "Class PYXWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PYXWriter A IContentHandler that generates PYX format instead of XML. Primarily useful for debugging. Inheritance System.Object PYXWriter Implements IScanHandler IContentHandler ILexicalHandler 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class PYXWriter : IScanHandler, IContentHandler, ILexicalHandler Constructors | Improve this Doc View Source PYXWriter(TextWriter) Declaration public PYXWriter(TextWriter w) Parameters Type Name Description System.IO.TextWriter w Methods | Improve this Doc View Source Adup(Char[], Int32, Int32) Declaration public void Adup(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aname(Char[], Int32, Int32) Declaration public void Aname(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aval(Char[], Int32, Int32) Declaration public void Aval(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source CDSect(Char[], Int32, Int32) Declaration public void CDSect(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Characters(Char[], Int32, Int32) Declaration public void Characters(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Cmnt(Char[], Int32, Int32) Declaration public void Cmnt(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source Decl(Char[], Int32, Int32) Declaration public void Decl(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EndCDATA() Declaration public void EndCDATA() | Improve this Doc View Source EndDocument() Declaration public void EndDocument() | Improve this Doc View Source EndDTD() Declaration public void EndDTD() | Improve this Doc View Source EndElement(String, String, String) Declaration public void EndElement(string uri, string localname, string qname) Parameters Type Name Description System.String uri System.String localname System.String qname | Improve this Doc View Source EndEntity(String) Declaration public void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source EndPrefixMapping(String) Declaration public void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix | Improve this Doc View Source Entity(Char[], Int32, Int32) Declaration public void Entity(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EOF(Char[], Int32, Int32) Declaration public void EOF(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETag(Char[], Int32, Int32) Declaration public void ETag(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source GetEntity() Declaration public int GetEntity() Returns Type Description System.Int32 | Improve this Doc View Source GI(Char[], Int32, Int32) Declaration public void GI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Declaration public void IgnorableWhitespace(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PCDATA(Char[], Int32, Int32) Declaration public void PCDATA(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PI(Char[], Int32, Int32) Declaration public void PI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PITarget(Char[], Int32, Int32) Declaration public void PITarget(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ProcessingInstruction(String, String) Declaration public void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target System.String data | Improve this Doc View Source SetDocumentLocator(ILocator) Declaration public void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator | Improve this Doc View Source SkippedEntity(String) Declaration public void SkippedEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source STagC(Char[], Int32, Int32) Declaration public void STagC(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagE(Char[], Int32, Int32) Declaration public void STagE(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source StartCDATA() Declaration public void StartCDATA() | Improve this Doc View Source StartDocument() Declaration public void StartDocument() | Improve this Doc View Source StartDTD(String, String, String) Declaration public void StartDTD(string name, string publicId, string systemId) Parameters Type Name Description System.String name System.String publicId System.String systemId | Improve this Doc View Source StartElement(String, String, String, IAttributes) Declaration public void StartElement(string uri, string localname, string qname, IAttributes atts) Parameters Type Name Description System.String uri System.String localname System.String qname IAttributes atts | Improve this Doc View Source StartEntity(String) Declaration public void StartEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source StartPrefixMapping(String, String) Declaration public void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix System.String uri Implements IScanHandler IContentHandler ILexicalHandler"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.Schema.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.Schema.html",
    "title": "Class Schema | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Schema Abstract class representing a TSSL schema. Actual TSSL schemas are compiled into concrete subclasses of this class. Inheritance System.Object Schema HTMLSchema 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class Schema Fields | Improve this Doc View Source F_CDATA Declaration public const int F_CDATA = 2 Field Value Type Description System.Int32 | Improve this Doc View Source F_NOFORCE Declaration public const int F_NOFORCE = 4 Field Value Type Description System.Int32 | Improve this Doc View Source F_RESTART Declaration public const int F_RESTART = 1 Field Value Type Description System.Int32 | Improve this Doc View Source M_ANY Declaration public const int M_ANY = -1 Field Value Type Description System.Int32 | Improve this Doc View Source M_EMPTY Declaration public const int M_EMPTY = 0 Field Value Type Description System.Int32 | Improve this Doc View Source M_PCDATA Declaration public const int M_PCDATA = 1073741824 Field Value Type Description System.Int32 | Improve this Doc View Source M_ROOT Declaration public const int M_ROOT = -2147483648 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Prefix Gets ot sets the prefix of this schema. Declaration public virtual string Prefix { get; set; } Property Value Type Description System.String | Improve this Doc View Source RootElementType Gets or sets the root element of this schema Declaration public virtual ElementType RootElementType { get; } Property Value Type Description ElementType | Improve this Doc View Source Uri Gets or sets the URI (namespace name) of this schema. Declaration public virtual string Uri { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Attribute(String, String, String, String) Add or replace a default attribute for an element type in this schema. Declaration public virtual void Attribute(string elemName, string attrName, string type, string value) Parameters Type Name Description System.String elemName Name (Qname) of the element type System.String attrName Name (Qname) of the attribute System.String type Type of the attribute System.String value Default value of the attribute; null if no default | Improve this Doc View Source ElementType(String, Int32, Int32, Int32) Add or replace an element type for this schema. Declaration public virtual void ElementType(string name, int model, int memberOf, int flags) Parameters Type Name Description System.String name Name (Qname) of the element System.Int32 model Models of the element's content as a vector of bits System.Int32 memberOf Models the element is a member of as a vector of bits System.Int32 flags Flags for the element | Improve this Doc View Source Entity(String, Int32) Add to or replace a character entity in this schema. Declaration public virtual void Entity(string name, int value) Parameters Type Name Description System.String name Name of the entity System.Int32 value Value of the entity | Improve this Doc View Source GetElementType(String) Get an ElementType by name. Declaration public virtual ElementType GetElementType(string name) Parameters Type Name Description System.String name Name (Qname) of the element type Returns Type Description ElementType The corresponding ElementType | Improve this Doc View Source GetEntity(String) Get an entity value by name. Declaration public virtual int GetEntity(string name) Parameters Type Name Description System.String name Name of the entity Returns Type Description System.Int32 The corresponding character, or 0 if none | Improve this Doc View Source Parent(String, String) Specify natural parent of an element in this schema. Declaration public virtual void Parent(string name, string parentName) Parameters Type Name Description System.String name Name of the child element System.String parentName Name of the parent element"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.XMLWriter.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.XMLWriter.html",
    "title": "Class XMLWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class XMLWriter Filter to write an XML document from a SAX event stream. Inheritance System.Object XMLFilter XMLWriter Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler ILexicalHandler Inherited Members XMLFilter.Parent XMLFilter.SetFeature(String, Boolean) XMLFilter.GetFeature(String) XMLFilter.SetProperty(String, Object) XMLFilter.GetProperty(String) XMLFilter.EntityResolver XMLFilter.DTDHandler XMLFilter.ContentHandler XMLFilter.ErrorHandler XMLFilter.Parse(InputSource) XMLFilter.Parse(String) XMLFilter.ResolveEntity(String, String) XMLFilter.NotationDecl(String, String, String) XMLFilter.UnparsedEntityDecl(String, String, String, String) XMLFilter.SetDocumentLocator(ILocator) XMLFilter.StartPrefixMapping(String, String) XMLFilter.EndPrefixMapping(String) XMLFilter.SkippedEntity(String) XMLFilter.Warning(SAXParseException) XMLFilter.Error(SAXParseException) XMLFilter.FatalError(SAXParseException) 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 : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class XMLWriter : XMLFilter, IXMLFilter, IXMLReader, IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler, ILexicalHandler Remarks This class can be used by itself or as part of a SAX event stream: it takes as input a series of SAX2 ContentHandler events and uses the information in those events to write an XML document. Since this class is a filter, it can also pass the events on down a filter chain for further processing (you can use the XMLWriter to take a snapshot of the current state at any point in a filter chain), and it can be used directly as a ContentHandler for a SAX2 XMLReader. The client creates a document by invoking the methods for standard SAX2 events, always beginning with the StartDocument() method and ending with the EndDocument() method. There are convenience methods provided so that clients to not have to create empty attribute lists or provide empty strings as parameters; for example, the method invocation w.StartElement(\"foo\"); is equivalent to the regular SAX2 ContentHandler method w.StartElement(\"\", \"foo\", \"\", new Attributes()); Except that it is more efficient because it does not allocate a new empty attribute list each time. The following code will send a simple XML document to standard output: XMLWriter w = new XMLWriter(); w.StartDocument(); w.StartElement(\"greeting\"); w.Characters(\"Hello, world!\"); w.EndElement(\"greeting\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <greeting>Hello, world!</greeting> In fact, there is an even simpler convenience method, DataElement(String, String) , designed for writing elements that contain only character data, so the code to generate the document could be shortened to XMLWriter w = new XMLWriter(); w.StartDocument(); w.DataElement(\"greeting\", \"Hello, world!\"); w.EndDocument(); Whitespace According to the XML Recommendation, all whitespace in an XML document is potentially significant to an application, so this class never adds newlines or indentation. If you insert three elements in a row, as in w.DataElement(\"item\", \"1\"); w.DataElement(\"item\", \"2\"); w.DataElement(\"item\", \"3\"); you will end up with <item>1</item><item>3</item><item>3</item> You need to invoke one of the Characters methods explicitly to add newlines or indentation. Alternatively, you can use DataWriter, which is derived from this class -- it is optimized for writing purely data-oriented (or field-oriented) XML, and does automatic linebreaks and indentation (but does not support mixed content properly). Namespace Support The writer contains extensive support for XML Namespaces, so that a client application does not have to keep track of prefixes and supply xmlns attributes. By default, the XML writer will generate Namespace declarations in the form _NS1, _NS2, etc., wherever they are needed, as in the following example: w.StartDocument(); w.EmptyElement(\"http://www.foo.com/ns/\", \"foo\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <_NS1:foo xmlns:_NS1=\"http://www.foo.com/ns/\"/> In many cases, document authors will prefer to choose their own prefixes rather than using the (ugly) default names. The XML writer allows two methods for selecting prefixes: the qualified name the SetPrefix(String, String) method. Whenever the XML writer finds a new Namespace URI, it checks to see if a qualified (prefixed) name is also available; if so it attempts to use the name's prefix (as long as the prefix is not already in use for another Namespace URI). Before writing a document, the client can also pre-map a prefix to a Namespace URI with the setPrefix method: w.SetPrefix(\"http://www.foo.com/ns/\", \"foo\"); w.StartDocument(); w.EmptyElement(\"http://www.foo.com/ns/\", \"foo\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <foo:foo xmlns:foo=\"http://www.foo.com/ns/\"/> The default Namespace simply uses an empty string as the prefix: w.SetPrefix(\"http://www.foo.com/ns/\", \"\"); w.StartDocument(); w.EmptyElement(\"http://www.foo.com/ns/\", \"foo\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <foo xmlns=\"http://www.foo.com/ns/\"/> By default, the XML writer will not declare a Namespace until it is actually used. Sometimes, this approach will create a large number of Namespace declarations, as in the following example: <xml version=\"1.0\" standalone=\"yes\"?> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> <rdf:Description about=\"http://www.foo.com/ids/books/12345\"> <dc:title xmlns:dc=\"http://www.purl.org/dc/\">A Dark Night</dc:title> <dc:creator xmlns:dc=\"http://www.purl.org/dc/\">Jane Smith</dc:title> <dc:date xmlns:dc=\"http://www.purl.org/dc/\">2000-09-09</dc:title> </rdf:Description> </rdf:RDF> The \"rdf\" prefix is declared only once, because the RDF Namespace is used by the root element and can be inherited by all of its descendants; the \"dc\" prefix, on the other hand, is declared three times, because no higher element uses the Namespace. To solve this problem, you can instruct the XML writer to predeclare Namespaces on the root element even if they are not used there: w.ForceNSDecl(\"http://www.purl.org/dc/\"); Now, the \"dc\" prefix will be declared on the root element even though it's not needed there, and can be inherited by its descendants: <xml version=\"1.0\" standalone=\"yes\"?> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://www.purl.org/dc/\"> <rdf:Description about=\"http://www.foo.com/ids/books/12345\"> <dc:title>A Dark Night</dc:title> <dc:creator>Jane Smith</dc:title> <dc:date>2000-09-09</dc:title> </rdf:Description> </rdf:RDF> This approach is also useful for declaring Namespace prefixes that be used by qualified names appearing in attribute values or character data. Constructors | Improve this Doc View Source XMLWriter() Create a new XML writer. Write to standard output. Declaration public XMLWriter() | Improve this Doc View Source XMLWriter(IXMLReader) Create a new XML writer. Use the specified XML reader as the parent. Declaration public XMLWriter(IXMLReader xmlreader) Parameters Type Name Description IXMLReader xmlreader The parent in the filter chain, or null for no parent. | Improve this Doc View Source XMLWriter(IXMLReader, TextWriter) Create a new XML writer. Use the specified XML reader as the parent, and write to the specified writer. Declaration public XMLWriter(IXMLReader xmlreader, TextWriter writer) Parameters Type Name Description IXMLReader xmlreader The parent in the filter chain, or null for no parent. System.IO.TextWriter writer The output destination, or null to use standard output. | Improve this Doc View Source XMLWriter(TextWriter) Create a new XML writer. Write to the writer provided. Declaration public XMLWriter(TextWriter writer) Parameters Type Name Description System.IO.TextWriter writer The output destination, or null to use standard output. Fields | Improve this Doc View Source CDATA_SECTION_ELEMENTS Declaration public const string CDATA_SECTION_ELEMENTS = \"cdata-section-elements\" Field Value Type Description System.String | Improve this Doc View Source DOCTYPE_PUBLIC Declaration public const string DOCTYPE_PUBLIC = \"doctype-public\" Field Value Type Description System.String | Improve this Doc View Source DOCTYPE_SYSTEM Declaration public const string DOCTYPE_SYSTEM = \"doctype-system\" Field Value Type Description System.String | Improve this Doc View Source ENCODING Declaration public const string ENCODING = \"encoding\" Field Value Type Description System.String | Improve this Doc View Source INDENT Declaration public const string INDENT = \"indent\" Field Value Type Description System.String | Improve this Doc View Source MEDIA_TYPE Declaration public const string MEDIA_TYPE = \"media-type\" Field Value Type Description System.String | Improve this Doc View Source METHOD Declaration public const string METHOD = \"method\" Field Value Type Description System.String | Improve this Doc View Source OMIT_XML_DECLARATION Declaration public const string OMIT_XML_DECLARATION = \"omit-xml-declaration\" Field Value Type Description System.String | Improve this Doc View Source STANDALONE Declaration public const string STANDALONE = \"standalone\" Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public const string VERSION = \"version\" Field Value Type Description System.String Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Write character data. Pass the event on down the filter chain for further processing. Declaration public override void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The array of characters to write. System.Int32 start The starting position in the array. System.Int32 length The number of characters to write. Overrides XMLFilter.Characters(Char[], Int32, Int32) Exceptions Type Condition SAXException If there is an error writing the characters, or if a handler further down the filter chain raises an exception. See Also Characters ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source Characters(String) Write a string of character data, with XML escaping. This is a convenience method that takes an XML string, converts it to a character array, then invokes Characters(Char[], Int32, Int32) . Declaration public virtual void Characters(string data) Parameters Type Name Description System.String data The character data. Exceptions Type Condition SAXException If there is an error writing the string, or if a handler further down the filter chain raises an exception. See Also Characters(Char[], Int32, Int32) | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public virtual void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source DataElement(String, String) Write an element with character data content but no attributes or Namespace URI. This is a convenience method to write a complete element with character data content, including the start tag and end tag. The method provides an empty string for the Namespace URI, and empty string for the qualified name, and an empty attribute list. This method invokes StartElement(String, String, String, IAttributes) , followed by Characters(String) , followed by EndElement(String, String, String) . Declaration public virtual void DataElement(string localName, string content) Parameters Type Name Description System.String localName The element's local name. System.String content The character data content. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) Characters(String) EndElement(String, String, String) | Improve this Doc View Source DataElement(String, String, String) Write an element with character data content but no attributes. This is a convenience method to write a complete element with character data content, including the start tag and end tag. This method provides an empty string for the qname and an empty attribute list. This method invokes StartElement(String, String, String, IAttributes) , followed by Characters(String) , followed by EndElement(String, String, String) . Declaration public virtual void DataElement(string uri, string localName, string content) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. System.String content The character data content. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) Characters(String) EndElement(String, String, String) | Improve this Doc View Source DataElement(String, String, String, IAttributes, String) Write an element with character data content. This is a convenience method to write a complete element with character data content, including the start tag and end tag. This method invokes StartElement(String, String, String, IAttributes) , followed by Characters(String) , followed by EndElement(String, String, String) . Declaration public virtual void DataElement(string uri, string localName, string qName, IAttributes atts, string content) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. System.String qName The element's default qualified name. IAttributes atts The element's attributes. System.String content The character data content. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) Characters(String) EndElement(String, String, String) | Improve this Doc View Source EmptyElement(String) Add an empty element without a Namespace URI, qname or attributes. This method will supply an empty string for the qname, and empty string for the Namespace URI, and an empty attribute list. It invokes EmptyElement(String, String, String, IAttributes) directly. Declaration public virtual void EmptyElement(string localName) Parameters Type Name Description System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also EmptyElement(String, String, String, IAttributes) | Improve this Doc View Source EmptyElement(String, String) Add an empty element without a qname or attributes. This method will supply an empty string for the qname and an empty attribute list. It invokes EmptyElement(String, String, String, IAttributes) directly. Declaration public virtual void EmptyElement(string uri, string localName) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also EmptyElement(String, String, String, IAttributes) | Improve this Doc View Source EmptyElement(String, String, String, IAttributes) Write an empty element. This method writes an empty element tag rather than a start tag followed by an end tag. Both a StartElement(String, String, String, IAttributes) and an EndElement(String, String, String) event will be passed on down the filter chain. Declaration public virtual void EmptyElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri The element's Namespace URI, or the empty string if the element has no Namespace or if Namespace processing is not being performed. System.String localName The element's local name (without prefix). This parameter must be provided. System.String qName The element's qualified name (with prefix), or the empty string if none is available. This parameter is strictly advisory: the writer may or may not use the prefix attached. IAttributes atts The element's attribute list. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String) StartElement(String, String) StartElement(String, String, String, IAttributes) EndElement(String) EndElement(String, String) EndElement(String, String, String) | Improve this Doc View Source EndCDATA() Declaration public virtual void EndCDATA() | Improve this Doc View Source EndDocument() Write a newline at the end of the document. Pass the event on down the filter chain for further processing. Declaration public override void EndDocument() Overrides XMLFilter.EndDocument() Exceptions Type Condition SAXException If there is an error writing the newline, or if a handler further down the filter chain raises an exception. See Also EndDocument () | Improve this Doc View Source EndDTD() Declaration public virtual void EndDTD() | Improve this Doc View Source EndElement(String) End an element without a Namespace URI or qname. This method will supply an empty string for the qName and an empty string for the Namespace URI. It invokes EndElement(String, String, String) directly. Declaration public virtual void EndElement(string localName) Parameters Type Name Description System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the end tag, or if a handler further down the filter chain raises an exception. See Also EndElement(String, String, String) | Improve this Doc View Source EndElement(String, String) End an element without a qname. This method will supply an empty string for the qName. It invokes EndElement(String, String, String) directly. Declaration public virtual void EndElement(string uri, string localName) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the end tag, or if a handler further down the filter chain raises an exception. See Also EndElement(String, String, String) | Improve this Doc View Source EndElement(String, String, String) Write an end tag. Pass the event on down the filter chain for further processing. Declaration public override void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if none is available. System.String localName The element's local (unprefixed) name (required). System.String qName The element's qualified (prefixed) name, or the empty string is none is available. This method will use the qName as a template for generating a prefix if necessary, but it is not guaranteed to use the same qName. Overrides XMLFilter.EndElement(String, String, String) Exceptions Type Condition SAXException If there is an error writing the end tag, or if a handler further down the filter chain raises an exception. See Also EndElement ( System.String , System.String , System.String ) | Improve this Doc View Source EndEntity(String) Declaration public virtual void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Flush() Flush the output. This method flushes the output stream. It is especially useful when you need to make certain that the entire document has been written to output but do not want to close the output stream. This method is invoked automatically by the EndDocument() method after writing a document. Declaration public virtual void Flush() See Also Reset() | Improve this Doc View Source ForceNSDecl(String) Force a Namespace to be declared on the root element. By default, the XMLWriter will declare only the Namespaces needed for an element; as a result, a Namespace may be declared many places in a document if it is not used on the root element. This method forces a Namespace to be declared on the root element even if it is not used there, and reduces the number of xmlns attributes in the document. Declaration public virtual void ForceNSDecl(string uri) Parameters Type Name Description System.String uri The Namespace URI to declare. See Also ForceNSDecl(String, String) SetPrefix(String, String) | Improve this Doc View Source ForceNSDecl(String, String) Force a Namespace declaration with a preferred prefix. This is a convenience method that invokes SetPrefix(String, String) then ForceNSDecl(String) . Declaration public virtual void ForceNSDecl(string uri, string prefix) Parameters Type Name Description System.String uri The Namespace URI to declare on the root element. System.String prefix The preferred prefix for the Namespace, or \"\" for the default Namespace. See Also SetPrefix(String, String) ForceNSDecl(String) | Improve this Doc View Source GetOutputProperty(String) Declaration public virtual string GetOutputProperty(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetPrefix(String) Get the current or preferred prefix for a Namespace URI. Declaration public virtual string GetPrefix(string uri) Parameters Type Name Description System.String uri The Namespace URI. Returns Type Description System.String The preferred prefix, or \"\" for the default Namespace. See Also SetPrefix(String, String) | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Write ignorable whitespace. Pass the event on down the filter chain for further processing. Declaration public override void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The array of characters to write. System.Int32 start The starting position in the array. System.Int32 length The number of characters to write. Overrides XMLFilter.IgnorableWhitespace(Char[], Int32, Int32) Exceptions Type Condition SAXException If there is an error writing the whitespace, or if a handler further down the filter chain raises an exception. See Also IgnorableWhitespace ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source ProcessingInstruction(String, String) Write a processing instruction. Pass the event on down the filter chain for further processing. Declaration public override void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target The PI target. System.String data The PI data. Overrides XMLFilter.ProcessingInstruction(String, String) Exceptions Type Condition SAXException If there is an error writing the PI, or if a handler further down the filter chain raises an exception. See Also ProcessingInstruction ( System.String , System.String ) | Improve this Doc View Source Reset() Reset the writer. This method is especially useful if the writer throws an exception before it is finished, and you want to reuse the writer for a new document. It is usually a good idea to invoke Flush() before resetting the writer, to make sure that no output is lost. This method is invoked automatically by the StartDocument() method before writing a new document. Note: this method will not clear the prefix or URI information in the writer or the selected output writer. Declaration public virtual void Reset() See Also Flush() | Improve this Doc View Source SetOutput(TextWriter) Set a new output destination for the document. Declaration public virtual void SetOutput(TextWriter writer) Parameters Type Name Description System.IO.TextWriter writer The output destination, or null to use standard output. See Also Flush() | Improve this Doc View Source SetOutputProperty(String, String) Declaration public virtual void SetOutputProperty(string key, string value) Parameters Type Name Description System.String key System.String value | Improve this Doc View Source SetPrefix(String, String) Specify a preferred prefix for a Namespace URI. Note that this method does not actually force the Namespace to be declared; to do that, use the ForceNSDecl(String) method as well. Declaration public virtual void SetPrefix(string uri, string prefix) Parameters Type Name Description System.String uri The Namespace URI. System.String prefix The preferred prefix, or \"\" to select the default Namespace. See Also GetPrefix(String) ForceNSDecl(String) ForceNSDecl(String, String) | Improve this Doc View Source StartCDATA() Declaration public virtual void StartCDATA() | Improve this Doc View Source StartDocument() Write the XML declaration at the beginning of the document. Pass the event on down the filter chain for further processing. Declaration public override void StartDocument() Overrides XMLFilter.StartDocument() Exceptions Type Condition SAXException If there is an error writing the XML declaration, or if a handler further down the filter chain raises an exception. See Also StartDocument () | Improve this Doc View Source StartDTD(String, String, String) Declaration public virtual void StartDTD(string name, string publicid, string systemid) Parameters Type Name Description System.String name System.String publicid System.String systemid | Improve this Doc View Source StartElement(String) Start a new element without a qname, attributes or a Namespace URI. This method will provide an empty string for the Namespace URI, and empty string for the qualified name, and a default empty attribute list. It invokes startElement(string, string, string, Attributes)} directly. Declaration public virtual void StartElement(string localName) Parameters Type Name Description System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the start tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) | Improve this Doc View Source StartElement(String, String) Start a new element without a qname or attributes. This method will provide a default empty attribute list and an empty string for the qualified name. It invokes StartElement(String, String, String, IAttributes) directly. Declaration public virtual void StartElement(string uri, string localName) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the start tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) | Improve this Doc View Source StartElement(String, String, String, IAttributes) Write a start tag. Pass the event on down the filter chain for further processing. Declaration public override void StartElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if none is available. System.String localName The element's local (unprefixed) name (required). System.String qName The element's qualified (prefixed) name, or the empty string is none is available. This method will use the qName as a template for generating a prefix if necessary, but it is not guaranteed to use the same qName. IAttributes atts The element's attribute list (must not be null). Overrides XMLFilter.StartElement(String, String, String, IAttributes) Exceptions Type Condition SAXException If there is an error writing the start tag, or if a handler further down the filter chain raises an exception. See Also StartElement ( System.String , System.String , System.String , IAttributes ) | Improve this Doc View Source StartEntity(String) Declaration public virtual void StartEntity(string name) Parameters Type Name Description System.String name Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler ILexicalHandler See Also IXMLFilter IContentHandler"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.ClassificationResult-1.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.ClassificationResult-1.html",
    "title": "Class ClassificationResult<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ClassificationResult<T> 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.Classification Assembly : Lucene.Net.Classification.dll Syntax public class ClassificationResult<T> Type Parameters Name Description T Constructors | Improve this Doc View Source ClassificationResult(T, Double) Constructor the class T assigned by a IClassifier<T> score the score for the assignedClass as a System.Double Declaration public ClassificationResult(T assignedClass, double score) Parameters Type Name Description T assignedClass System.Double score Properties | Improve this Doc View Source AssignedClass retrieve the result class @return a T representing an assigned class Declaration public virtual T AssignedClass { get; } Property Value Type Description T | Improve this Doc View Source Score Gets a System.Double representing a result score. Declaration public virtual double Score { get; } Property Value Type Description System.Double"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.html",
    "title": "Namespace Lucene.Net.Classification | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Classification <!-- 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. --> Uses already seen data (the indexed documents) to classify new documents. Currently only contains a (simplistic) Lucene based Naive Bayes classifier and a k-Nearest Neighbor classifier Classes ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.IClassifier-1.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.IClassifier-1.html",
    "title": "Interface IClassifier<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public interface IClassifier<T> Type Parameters Name Description T Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration ClassificationResult<T> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult <T> a ClassificationResult<T> holding assigned class of type T and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.KNearestNeighborClassifier.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.KNearestNeighborClassifier.html",
    "title": "Class KNearestNeighborClassifier | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object KNearestNeighborClassifier Implements IClassifier < BytesRef > 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.Classification Assembly : Lucene.Net.Classification.dll Syntax public class KNearestNeighborClassifier : IClassifier<BytesRef> Constructors | Improve this Doc View Source KNearestNeighborClassifier(Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an System.Int32 | Improve this Doc View Source KNearestNeighborClassifier(Int32, Int32, Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k, int minDocsFreq, int minTermFreq) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an System.Int32 System.Int32 minDocsFreq the minimum number of docs frequency for MLT to be set with MinDocFreq System.Int32 minTermFreq the minimum number of term frequency for MLT to be set with MinTermFreq Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.SimpleNaiveBayesClassifier.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.SimpleNaiveBayesClassifier.html",
    "title": "Class SimpleNaiveBayesClassifier | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SimpleNaiveBayesClassifier Implements IClassifier < BytesRef > 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.Classification Assembly : Lucene.Net.Classification.dll Syntax public class SimpleNaiveBayesClassifier : IClassifier<BytesRef> Constructors | Improve this Doc View Source SimpleNaiveBayesClassifier() Creates a new NaiveBayes classifier. Note that you must call Train(AtomicReader, String, String, Analyzer) before you can classify any documents. Declaration public SimpleNaiveBayesClassifier() Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string inputDocument) Parameters Type Name Description System.String inputDocument a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.DatasetSplitter.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.DatasetSplitter.html",
    "title": "Class DatasetSplitter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index. Inheritance System.Object DatasetSplitter 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.Classification.Utils Assembly : Lucene.Net.Classification.dll Syntax public class DatasetSplitter Constructors | Improve this Doc View Source DatasetSplitter(Double, Double) Create a DatasetSplitter by giving test and cross validation IDXs sizes Declaration public DatasetSplitter(double testRatio, double crossValidationRatio) Parameters Type Name Description System.Double testRatio the ratio of the original index to be used for the test IDX as a System.Double between 0.0 and 1.0 System.Double crossValidationRatio the ratio of the original index to be used for the c.v. IDX as a System.Double between 0.0 and 1.0 Methods | Improve this Doc View Source Split(AtomicReader, Directory, Directory, Directory, Analyzer, String[]) Split a given index into 3 indexes for training, test and cross validation tasks respectively Declaration public virtual void Split(AtomicReader originalIndex, Directory trainingIndex, Directory testIndex, Directory crossValidationIndex, Analyzer analyzer, params string[] fieldNames) Parameters Type Name Description AtomicReader originalIndex an AtomicReader on the source index Directory trainingIndex a Directory used to write the training index Directory testIndex a Directory used to write the test index Directory crossValidationIndex a Directory used to write the cross validation index Analyzer analyzer Analyzer used to create the new docs System.String [] fieldNames names of fields that need to be put in the new indexes or null if all should be used Exceptions Type Condition System.IO.IOException if any writing operation fails on any of the indexes"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.html",
    "title": "Namespace Lucene.Net.Classification.Utils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Classification.Utils <!-- 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. --> Utilities for evaluation, data preparation, etc. Classes DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingCodec.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingCodec.html",
    "title": "Class AppendingCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AppendingCodec This codec uses an index format that is very similar to Lucene40Codec but works on append-only outputs, such as plain output streams and append-only filesystems. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec FilterCodec AppendingCodec Inherited Members FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.NormsFormat FilterCodec.SegmentInfoFormat FilterCodec.StoredFieldsFormat FilterCodec.TermVectorsFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Appending Assembly : Lucene.Net.Codecs.dll Syntax [Obsolete(\"This codec is read-only: as the functionality has been folded into the default codec. Its only for convenience to read old segments.\")] [CodecName(\"Appending\")] public class AppendingCodec : FilterCodec Constructors | Improve this Doc View Source AppendingCodec() Declaration public AppendingCodec() Properties | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides FilterCodec.PostingsFormat"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingTermsReader.html",
    "title": "Class AppendingTermsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AppendingTermsReader Reads append-only terms from AppendingTermsWriter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader AppendingTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members BlockTreeTermsReader.Dispose(Boolean) BlockTreeTermsReader.GetEnumerator() BlockTreeTermsReader.GetTerms(String) BlockTreeTermsReader.Count BlockTreeTermsReader.RamBytesUsed() BlockTreeTermsReader.CheckIntegrity() FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Codecs.Appending Assembly : Lucene.Net.Codecs.dll Syntax [Obsolete(\"Only for reading old Appending segments\")] public class AppendingTermsReader : BlockTreeTermsReader, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source AppendingTermsReader(Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String, Int32) Declaration public AppendingTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext ioContext, string segmentSuffix, int indexDivisor) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext ioContext System.String segmentSuffix System.Int32 indexDivisor Methods | Improve this Doc View Source ReadHeader(IndexInput) Declaration protected override int ReadHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 Overrides BlockTreeTermsReader.ReadHeader(IndexInput) | Improve this Doc View Source ReadIndexHeader(IndexInput) Declaration protected override int ReadIndexHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 Overrides BlockTreeTermsReader.ReadIndexHeader(IndexInput) | Improve this Doc View Source SeekDir(IndexInput, Int64) Declaration protected override void SeekDir(IndexInput input, long dirOffset) Parameters Type Name Description IndexInput input System.Int64 dirOffset Overrides BlockTreeTermsReader.SeekDir(IndexInput, Int64) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.html",
    "title": "Namespace Lucene.Net.Codecs.Appending | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Appending <!-- 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. --> Codec for on append-only outputs, such as plain output streams and append-only filesystems. Classes AppendingCodec This codec uses an index format that is very similar to Lucene40Codec but works on append-only outputs, such as plain output streams and append-only filesystems. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AppendingTermsReader Reads append-only terms from AppendingTermsWriter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html",
    "title": "Class BlockTermsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of PostingsReaderBase . This class is reusable for codecs that use a different format for docs/freqs/positions (though codecs are also free to make their own terms dict impl). This class also interacts with an instance of TermsIndexReaderBase , to abstract away the specific implementation of the terms dict index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class BlockTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source BlockTermsReader(TermsIndexReaderBase, Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String) Declaration public BlockTermsReader(TermsIndexReaderBase indexReader, Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext context, string segmentSuffix) Parameters Type Name Description TermsIndexReaderBase indexReader Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext context System.String segmentSuffix Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html",
    "title": "Class BlockTermsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockTermsWriter Writes terms dict, block-encoding (column stride) each term's metadata for each set of terms between two index terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class BlockTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source BlockTermsWriter(TermsIndexWriterBase, SegmentWriteState, PostingsWriterBase) Declaration public BlockTermsWriter(TermsIndexWriterBase termsIndexWriter, SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description TermsIndexWriterBase termsIndexWriter SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput | Improve this Doc View Source TERMS_EXTENSION Extension of terms file Declaration public static readonly string TERMS_EXTENSION Field Value Type Description System.String | Improve this Doc View Source VERSION_APPEND_ONLY Declaration public static readonly int VERSION_APPEND_ONLY Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CHECKSUM Declaration public static readonly int VERSION_CHECKSUM Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_META_ARRAY Declaration public static readonly int VERSION_META_ARRAY Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html",
    "title": "Class FixedGapTermsIndexReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FixedGapTermsIndexReader TermsIndexReaderBase for simple every Nth terms indexes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase FixedGapTermsIndexReader Implements System.IDisposable Inherited Members TermsIndexReaderBase.Dispose() 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class FixedGapTermsIndexReader : TermsIndexReaderBase, IDisposable Constructors | Improve this Doc View Source FixedGapTermsIndexReader(Directory, FieldInfos, String, Int32, IComparer<BytesRef>, String, IOContext) Declaration public FixedGapTermsIndexReader(Directory dir, FieldInfos fieldInfos, string segment, int indexDivisor, IComparer<BytesRef> termComp, string segmentSuffix, IOContext context) Parameters Type Name Description Directory dir FieldInfos fieldInfos System.String segment System.Int32 indexDivisor System.Collections.Generic.IComparer < BytesRef > termComp System.String segmentSuffix IOContext context Properties | Improve this Doc View Source Divisor Declaration public override int Divisor { get; } Property Value Type Description System.Int32 Overrides TermsIndexReaderBase.Divisor | Improve this Doc View Source SupportsOrd Declaration public override bool SupportsOrd { get; } Property Value Type Description System.Boolean Overrides TermsIndexReaderBase.SupportsOrd Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexReaderBase.Dispose(Boolean) | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public override TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum Overrides TermsIndexReaderBase.GetFieldEnum(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermsIndexReaderBase.RamBytesUsed() Implements System.IDisposable See Also FixedGapTermsIndexWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html",
    "title": "Class FixedGapTermsIndexWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FixedGapTermsIndexWriter Selects every Nth term as and index term, and hold term bytes (mostly) fully expanded in memory. This terms index supports seeking by ord. See VariableGapTermsIndexWriter for a more memory efficient terms index that does not support seeking by ord. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase FixedGapTermsIndexWriter Implements System.IDisposable Inherited Members TermsIndexWriterBase.Dispose() 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class FixedGapTermsIndexWriter : TermsIndexWriterBase, IDisposable Constructors | Improve this Doc View Source FixedGapTermsIndexWriter(SegmentWriteState) Declaration public FixedGapTermsIndexWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description FieldInfo field System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter Overrides TermsIndexWriterBase.AddField(FieldInfo, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexWriterBase.Dispose(Boolean) | Improve this Doc View Source IndexedTermPrefixLength(BytesRef, BytesRef) NOTE: if your codec does not sort in unicode code point order, you must override this method, to simply return indexedTerm.Length . Declaration protected virtual int IndexedTermPrefixLength(BytesRef priorTerm, BytesRef indexedTerm) Parameters Type Name Description BytesRef priorTerm BytesRef indexedTerm Returns Type Description System.Int32 Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.html",
    "title": "Namespace Lucene.Net.Codecs.BlockTerms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.BlockTerms <!-- 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. --> Pluggable term index / block terms dictionary implementations. Classes BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of PostingsReaderBase . This class is reusable for codecs that use a different format for docs/freqs/positions (though codecs are also free to make their own terms dict impl). This class also interacts with an instance of TermsIndexReaderBase , to abstract away the specific implementation of the terms dict index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockTermsWriter Writes terms dict, block-encoding (column stride) each term's metadata for each set of terms between two index terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedGapTermsIndexReader TermsIndexReaderBase for simple every Nth terms indexes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedGapTermsIndexWriter Selects every Nth term as and index term, and hold term bytes (mostly) fully expanded in memory. This terms index supports seeking by ord. See VariableGapTermsIndexWriter for a more memory efficient terms index that does not support seeking by ord. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexReaderBase BlockTermsReader interacts with an instance of this class to manage its terms index. The writer must accept indexed terms (many pairs of BytesRef text + long fileOffset), and then this reader must be able to retrieve the nearest index term to a provided term text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexReaderBase.FieldIndexEnum Similar to TermsEnum , except, the only \"metadata\" it reports for a given indexed term is the long fileOffset into the main terms dictionary file. TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexWriterBase.FieldWriter Terms index API for a single field. VariableGapTermsIndexReader See VariableGapTermsIndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter Selects index terms according to provided pluggable VariableGapTermsIndexWriter.IndexTermSelector , and stores them in a prefix trie that's loaded entirely in RAM stored as an FST<T> . This terms index only supports unsigned byte term sort order (unicode codepoint order when the bytes are UTF8). This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Sets an index term when docFreq >= docFreqThresh, or every interval terms. This should reduce seek time to high docFreq terms. VariableGapTermsIndexWriter.EveryNTermSelector VariableGapTermsIndexWriter.IndexTermSelector Hook for selecting which terms should be placed in the terms index. NewField(FieldInfo) is called at the start of each new field, and IsIndexTerm(BytesRef, TermStats) for each term in that field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html",
    "title": "Class TermsIndexReaderBase.FieldIndexEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsIndexReaderBase.FieldIndexEnum Similar to TermsEnum , except, the only \"metadata\" it reports for a given indexed term is the long fileOffset into the main terms dictionary file. Inheritance System.Object TermsIndexReaderBase.FieldIndexEnum 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FieldIndexEnum Properties | Improve this Doc View Source Ord Declaration public abstract long Ord { get; } Property Value Type Description System.Int64 Remarks Only implemented if SupportsOrd returns true | Improve this Doc View Source Term Declaration public abstract BytesRef Term { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Next() Returns -1 at end/ Declaration public abstract long Next() Returns Type Description System.Int64 | Improve this Doc View Source Seek(BytesRef) Seeks to \"largest\" indexed term that's less than or equal to term; returns file pointer index (into the main terms index file) for that term. Declaration public abstract long Seek(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int64 | Improve this Doc View Source Seek(Int64) Declaration public abstract long Seek(long ord) Parameters Type Name Description System.Int64 ord Returns Type Description System.Int64 Remarks Only implemented if SupportsOrd returns true"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html",
    "title": "Class TermsIndexReaderBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsIndexReaderBase BlockTermsReader interacts with an instance of this class to manage its terms index. The writer must accept indexed terms (many pairs of BytesRef text + long fileOffset), and then this reader must be able to retrieve the nearest index term to a provided term text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase FixedGapTermsIndexReader VariableGapTermsIndexReader 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class TermsIndexReaderBase : IDisposable Properties | Improve this Doc View Source Divisor Declaration public abstract int Divisor { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SupportsOrd Declaration public abstract bool SupportsOrd { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public abstract TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html",
    "title": "Class TermsIndexWriterBase.FieldWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsIndexWriterBase.FieldWriter Terms index API for a single field. Inheritance System.Object TermsIndexWriterBase.FieldWriter 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FieldWriter Methods | Improve this Doc View Source Add(BytesRef, TermStats, Int64) Declaration public abstract void Add(BytesRef text, TermStats stats, long termsFilePointer) Parameters Type Name Description BytesRef text TermStats stats System.Int64 termsFilePointer | Improve this Doc View Source CheckIndexTerm(BytesRef, TermStats) Declaration public abstract bool CheckIndexTerm(BytesRef text, TermStats stats) Parameters Type Name Description BytesRef text TermStats stats Returns Type Description System.Boolean | Improve this Doc View Source Finish(Int64) Declaration public abstract void Finish(long termsFilePointer) Parameters Type Name Description System.Int64 termsFilePointer"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html",
    "title": "Class TermsIndexWriterBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase FixedGapTermsIndexWriter VariableGapTermsIndexWriter 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class TermsIndexWriterBase : IDisposable Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public abstract TermsIndexWriterBase.FieldWriter AddField(FieldInfo fieldInfo, long termsFilePointer) Parameters Type Name Description FieldInfo fieldInfo System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Implements System.IDisposable See Also TermsIndexReaderBase"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html",
    "title": "Class VariableGapTermsIndexReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VariableGapTermsIndexReader See VariableGapTermsIndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase VariableGapTermsIndexReader Implements System.IDisposable Inherited Members TermsIndexReaderBase.Dispose() 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class VariableGapTermsIndexReader : TermsIndexReaderBase, IDisposable Constructors | Improve this Doc View Source VariableGapTermsIndexReader(Directory, FieldInfos, String, Int32, String, IOContext) Declaration public VariableGapTermsIndexReader(Directory dir, FieldInfos fieldInfos, string segment, int indexDivisor, string segmentSuffix, IOContext context) Parameters Type Name Description Directory dir FieldInfos fieldInfos System.String segment System.Int32 indexDivisor System.String segmentSuffix IOContext context Properties | Improve this Doc View Source Divisor Declaration public override int Divisor { get; } Property Value Type Description System.Int32 Overrides TermsIndexReaderBase.Divisor | Improve this Doc View Source SupportsOrd Declaration public override bool SupportsOrd { get; } Property Value Type Description System.Boolean Overrides TermsIndexReaderBase.SupportsOrd Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexReaderBase.Dispose(Boolean) | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public override TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum Overrides TermsIndexReaderBase.GetFieldEnum(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermsIndexReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Sets an index term when docFreq >= docFreqThresh, or every interval terms. This should reduce seek time to high docFreq terms. Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public sealed class EveryNOrDocFreqTermSelector : VariableGapTermsIndexWriter.IndexTermSelector Constructors | Improve this Doc View Source EveryNOrDocFreqTermSelector(Int32, Int32) Declaration public EveryNOrDocFreqTermSelector(int docFreqThresh, int interval) Parameters Type Name Description System.Int32 docFreqThresh System.Int32 interval Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Declaration public override bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean Overrides VariableGapTermsIndexWriter.IndexTermSelector.IsIndexTerm(BytesRef, TermStats) | Improve this Doc View Source NewField(FieldInfo) Declaration public override void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNTermSelector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.EveryNTermSelector Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNTermSelector 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public sealed class EveryNTermSelector : VariableGapTermsIndexWriter.IndexTermSelector Remarks Same policy as FixedGapTermsIndexWriter Constructors | Improve this Doc View Source EveryNTermSelector(Int32) Declaration public EveryNTermSelector(int interval) Parameters Type Name Description System.Int32 interval Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Declaration public override bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean Overrides VariableGapTermsIndexWriter.IndexTermSelector.IsIndexTerm(BytesRef, TermStats) | Improve this Doc View Source NewField(FieldInfo) Declaration public override void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html",
    "title": "Class VariableGapTermsIndexWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter Selects index terms according to provided pluggable VariableGapTermsIndexWriter.IndexTermSelector , and stores them in a prefix trie that's loaded entirely in RAM stored as an FST<T> . This terms index only supports unsigned byte term sort order (unicode codepoint order when the bytes are UTF8). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase VariableGapTermsIndexWriter Implements System.IDisposable Inherited Members TermsIndexWriterBase.Dispose() 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class VariableGapTermsIndexWriter : TermsIndexWriterBase, IDisposable Constructors | Improve this Doc View Source VariableGapTermsIndexWriter(SegmentWriteState, VariableGapTermsIndexWriter.IndexTermSelector) Declaration public VariableGapTermsIndexWriter(SegmentWriteState state, VariableGapTermsIndexWriter.IndexTermSelector policy) Parameters Type Name Description SegmentWriteState state VariableGapTermsIndexWriter.IndexTermSelector policy Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description FieldInfo field System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter Overrides TermsIndexWriterBase.AddField(FieldInfo, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexWriterBase.Dispose(Boolean) | Improve this Doc View Source IndexedTermPrefixLength(BytesRef, BytesRef) Declaration protected virtual int IndexedTermPrefixLength(BytesRef priorTerm, BytesRef indexedTerm) Parameters Type Name Description BytesRef priorTerm BytesRef indexedTerm Returns Type Description System.Int32 Remarks NOTE: If your codec does not sort in unicode code point order, you must override this method to simply return indexedTerm.Length . Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.IndexTermSelector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.IndexTermSelector Hook for selecting which terms should be placed in the terms index. NewField(FieldInfo) is called at the start of each new field, and IsIndexTerm(BytesRef, TermStats) for each term in that field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector VariableGapTermsIndexWriter.EveryNTermSelector 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.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class IndexTermSelector Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Called sequentially on every term being written, returning true if this term should be indexed. Declaration public abstract bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean | Improve this Doc View Source NewField(FieldInfo) Called when a new field is started. Declaration public abstract void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilterFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilterFactory.html",
    "title": "Class BloomFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BloomFilterFactory Class used to create index-time FuzzySet appropriately configured for each field. Also called to right-size bitsets for serialization. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BloomFilterFactory DefaultBloomFilterFactory 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.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public abstract class BloomFilterFactory Methods | Improve this Doc View Source Downsize(FieldInfo, FuzzySet) Called when downsizing bitsets for serialization. Declaration public virtual FuzzySet Downsize(FieldInfo fieldInfo, FuzzySet initialSet) Parameters Type Name Description FieldInfo fieldInfo The field with sparse set bits. FuzzySet initialSet The bits accumulated. Returns Type Description FuzzySet null or a hopefully more densely packed, smaller bitset. | Improve this Doc View Source GetSetForField(SegmentWriteState, FieldInfo) Declaration public abstract FuzzySet GetSetForField(SegmentWriteState state, FieldInfo info) Parameters Type Name Description SegmentWriteState state The content to be indexed. FieldInfo info The field requiring a BloomFilter. Returns Type Description FuzzySet An appropriately sized set or null if no BloomFiltering required. | Improve this Doc View Source IsSaturated(FuzzySet, FieldInfo) Used to determine if the given filter has reached saturation and should be retired i.e. not saved any more. Declaration public abstract bool IsSaturated(FuzzySet bloomFilter, FieldInfo fieldInfo) Parameters Type Name Description FuzzySet bloomFilter The bloomFilter being tested. FieldInfo fieldInfo The field with which this filter is associated. Returns Type Description System.Boolean true if the set has reached saturation and should be retired."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html",
    "title": "Class BloomFilteringPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BloomFilteringPostingsFormat A PostingsFormat useful for low doc-frequency fields such as primary keys. Bloom filters are maintained in a \".blm\" file which offers \"fast-fail\" for reads in segments known to have no record of the key. A choice of delegate PostingsFormat is used to record all other Postings data. A choice of BloomFilterFactory can be passed to tailor Bloom Filter settings on a per-field basis. The default configuration is DefaultBloomFilterFactory which allocates a ~8mb bitset and hashes values using MurmurHash2 . This should be suitable for most purposes. The format of the blm file is as follows: BloomFilter (.blm) --> Header, DelegatePostingsFormatName, NumFilteredFields, Filter NumFilteredFields , Footer Filter --> FieldNumber, FuzzySet FuzzySet -->See Serialize(DataOutput) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DelegatePostingsFormatName --> String ( WriteString(String) ) The name of a ServiceProvider registered PostingsFormat NumFilteredFields --> Uint32 ( WriteInt32(Int32) ) FieldNumber --> Uint32 ( WriteInt32(Int32) ) The number of the field in this segment Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat BloomFilteringPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"BloomFilter\")] public sealed class BloomFilteringPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source BloomFilteringPostingsFormat() Used only by core Lucene at read-time via Service Provider instantiation - do not use at Write-time in application code. Declaration public BloomFilteringPostingsFormat() | Improve this Doc View Source BloomFilteringPostingsFormat(PostingsFormat) Creates Bloom filters for a selection of fields created in the index. This is recorded as a set of Bitsets held as a segment summary in an additional \"blm\" file. This PostingsFormat delegates to a choice of delegate PostingsFormat for encoding all other postings data. This choice of constructor defaults to the DefaultBloomFilterFactory for configuring per-field BloomFilters. Declaration public BloomFilteringPostingsFormat(PostingsFormat delegatePostingsFormat) Parameters Type Name Description PostingsFormat delegatePostingsFormat The PostingsFormat that records all the non-bloom filter data i.e. postings info. | Improve this Doc View Source BloomFilteringPostingsFormat(PostingsFormat, BloomFilterFactory) Creates Bloom filters for a selection of fields created in the index. This is recorded as a set of Bitsets held as a segment summary in an additional \"blm\" file. This PostingsFormat delegates to a choice of delegate PostingsFormat for encoding all other postings data. Declaration public BloomFilteringPostingsFormat(PostingsFormat delegatePostingsFormat, BloomFilterFactory bloomFilterFactory) Parameters Type Name Description PostingsFormat delegatePostingsFormat The PostingsFormat that records all the non-bloom filter data i.e. postings info. BloomFilterFactory bloomFilterFactory The BloomFilterFactory responsible for sizing BloomFilters appropriately. Fields | Improve this Doc View Source VERSION_CHECKSUM Declaration public static readonly int VERSION_CHECKSUM Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html",
    "title": "Class DefaultBloomFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultBloomFilterFactory Default policy is to allocate a bitset with 10% saturation given a unique term per document. Bits are set via MurmurHash2 hashing function. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BloomFilterFactory DefaultBloomFilterFactory Inherited Members BloomFilterFactory.Downsize(FieldInfo, FuzzySet) 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.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public class DefaultBloomFilterFactory : BloomFilterFactory Methods | Improve this Doc View Source GetSetForField(SegmentWriteState, FieldInfo) Declaration public override FuzzySet GetSetForField(SegmentWriteState state, FieldInfo info) Parameters Type Name Description SegmentWriteState state FieldInfo info Returns Type Description FuzzySet Overrides BloomFilterFactory.GetSetForField(SegmentWriteState, FieldInfo) | Improve this Doc View Source IsSaturated(FuzzySet, FieldInfo) Declaration public override bool IsSaturated(FuzzySet bloomFilter, FieldInfo fieldInfo) Parameters Type Name Description FuzzySet bloomFilter FieldInfo fieldInfo Returns Type Description System.Boolean Overrides BloomFilterFactory.IsSaturated(FuzzySet, FieldInfo)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html",
    "title": "Enum FuzzySet.ContainsResult | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum FuzzySet.ContainsResult Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public enum ContainsResult Remarks Result from Contains(BytesRef) : can never return definitively YES (always MAYBE), but can sometimes definitely return NO. Fields Name Description MAYBE NO"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.html",
    "title": "Class FuzzySet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzySet A class used to represent a set of many, potentially large, values (e.g. many long strings such as URLs), using a significantly smaller amount of memory. The set is \"lossy\" in that it cannot definitively state that is does contain a value but it can definitively say if a value is not in the set. It can therefore be used as a Bloom Filter. Another application of the set is that it can be used to perform fuzzy counting because it can estimate reasonably accurately how many unique values are contained in the set. This class is NOT threadsafe. Internally a Bitset is used to record values and once a client has finished recording a stream of values the Downsize(Single) method can be used to create a suitably smaller set that is sized appropriately for the number of values recorded and desired saturation levels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FuzzySet 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.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public class FuzzySet Fields | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_SPI Declaration public static readonly int VERSION_SPI Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddValue(BytesRef) Records a value in the set. The referenced bytes are hashed and then modulo n'd where n is the chosen size of the internal bitset. Declaration public virtual void AddValue(BytesRef value) Parameters Type Name Description BytesRef value The Key value to be hashed. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source Contains(BytesRef) The main method required for a Bloom filter which, given a value determines set membership. Unlike a conventional set, the fuzzy set returns NO or MAYBE rather than true or false . Declaration public virtual FuzzySet.ContainsResult Contains(BytesRef value) Parameters Type Name Description BytesRef value Returns Type Description FuzzySet.ContainsResult NO or MAYBE | Improve this Doc View Source CreateSetBasedOnMaxMemory(Int32) Declaration public static FuzzySet CreateSetBasedOnMaxMemory(int maxNumBytes) Parameters Type Name Description System.Int32 maxNumBytes Returns Type Description FuzzySet | Improve this Doc View Source CreateSetBasedOnQuality(Int32, Single) Declaration public static FuzzySet CreateSetBasedOnQuality(int maxNumUniqueValues, float desiredMaxSaturation) Parameters Type Name Description System.Int32 maxNumUniqueValues System.Single desiredMaxSaturation Returns Type Description FuzzySet | Improve this Doc View Source Deserialize(DataInput) Declaration public static FuzzySet Deserialize(DataInput input) Parameters Type Name Description DataInput input Returns Type Description FuzzySet | Improve this Doc View Source Downsize(Single) Declaration public virtual FuzzySet Downsize(float targetMaxSaturation) Parameters Type Name Description System.Single targetMaxSaturation A number between 0 and 1 describing the % of bits that would ideally be set in the result. Lower values have better accuracy but require more space. Returns Type Description FuzzySet | Improve this Doc View Source GetEstimatedNumberUniqueValuesAllowingForCollisions(Int32, Int32) Given a setSize and a the number of set bits, produces an estimate of the number of unique values recorded. Declaration public static int GetEstimatedNumberUniqueValuesAllowingForCollisions(int setSize, int numRecordedBits) Parameters Type Name Description System.Int32 setSize System.Int32 numRecordedBits Returns Type Description System.Int32 | Improve this Doc View Source GetEstimatedUniqueValues() Declaration public virtual int GetEstimatedUniqueValues() Returns Type Description System.Int32 | Improve this Doc View Source GetNearestSetSize(Int32) Rounds down required maxNumberOfBits to the nearest number that is made up of all ones as a binary number. Use this method where controlling memory use is paramount. Declaration public static int GetNearestSetSize(int maxNumberOfBits) Parameters Type Name Description System.Int32 maxNumberOfBits Returns Type Description System.Int32 | Improve this Doc View Source GetNearestSetSize(Int32, Single) Use this method to choose a set size where accuracy (low content saturation) is more important than deciding how much memory to throw at the problem. Declaration public static int GetNearestSetSize(int maxNumberOfValuesExpected, float desiredSaturation) Parameters Type Name Description System.Int32 maxNumberOfValuesExpected System.Single desiredSaturation A number between 0 and 1 expressing the % of bits set once all values have been recorded. Returns Type Description System.Int32 The size of the set nearest to the required size. | Improve this Doc View Source GetSaturation() Declaration public virtual float GetSaturation() Returns Type Description System.Single | Improve this Doc View Source HashFunctionForVersion(Int32) Declaration public static HashFunction HashFunctionForVersion(int version) Parameters Type Name Description System.Int32 version Returns Type Description HashFunction | Improve this Doc View Source RamBytesUsed() Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Serialize(DataOutput) Serializes the data set to file using the following format: FuzzySet -->FuzzySetVersion,HashFunctionName,BloomSize, NumBitSetWords,BitSetWord NumBitSetWords HashFunctionName --> String ( WriteString(String) ) The name of a ServiceProvider registered HashFunction FuzzySetVersion --> Uint32 ( WriteInt32(Int32) ) The version number of the FuzzySet class BloomSize --> Uint32 ( WriteInt32(Int32) ) The modulo value used to project hashes into the field's Bitset NumBitSetWords --> Uint32 ( WriteInt32(Int32) ) The number of longs (as returned from GetBits() ) BitSetWord --> Long ( WriteInt64(Int64) ) A long from the array returned by GetBits() Declaration public virtual void Serialize(DataOutput output) Parameters Type Name Description DataOutput output Data output stream. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.HashFunction.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.HashFunction.html",
    "title": "Class HashFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HashFunction Base class for hashing functions that can be referred to by name. Subclasses are expected to provide threadsafe implementations of the hash function on the range of bytes referenced in the provided BytesRef . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HashFunction MurmurHash2 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.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public abstract class HashFunction Methods | Improve this Doc View Source Hash(BytesRef) Hashes the contents of the referenced bytes. Declaration public abstract int Hash(BytesRef bytes) Parameters Type Name Description BytesRef bytes The data to be hashed. Returns Type Description System.Int32 The hash of the bytes referenced by bytes.offset and length bytes.Length."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.html",
    "title": "Namespace Lucene.Net.Codecs.Bloom | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Bloom <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for generating test indexes using the BloomFilteringPostingsFormat Classes BloomFilterFactory Class used to create index-time FuzzySet appropriately configured for each field. Also called to right-size bitsets for serialization. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BloomFilteringPostingsFormat A PostingsFormat useful for low doc-frequency fields such as primary keys. Bloom filters are maintained in a \".blm\" file which offers \"fast-fail\" for reads in segments known to have no record of the key. A choice of delegate PostingsFormat is used to record all other Postings data. A choice of BloomFilterFactory can be passed to tailor Bloom Filter settings on a per-field basis. The default configuration is DefaultBloomFilterFactory which allocates a ~8mb bitset and hashes values using MurmurHash2 . This should be suitable for most purposes. The format of the blm file is as follows: BloomFilter (.blm) --> Header, DelegatePostingsFormatName, NumFilteredFields, Filter NumFilteredFields , Footer Filter --> FieldNumber, FuzzySet FuzzySet -->See Serialize(DataOutput) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DelegatePostingsFormatName --> String ( WriteString(String) ) The name of a ServiceProvider registered PostingsFormat NumFilteredFields --> Uint32 ( WriteInt32(Int32) ) FieldNumber --> Uint32 ( WriteInt32(Int32) ) The number of the field in this segment Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultBloomFilterFactory Default policy is to allocate a bitset with 10% saturation given a unique term per document. Bits are set via MurmurHash2 hashing function. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FuzzySet A class used to represent a set of many, potentially large, values (e.g. many long strings such as URLs), using a significantly smaller amount of memory. The set is \"lossy\" in that it cannot definitively state that is does contain a value but it can definitively say if a value is not in the set. It can therefore be used as a Bloom Filter. Another application of the set is that it can be used to perform fuzzy counting because it can estimate reasonably accurately how many unique values are contained in the set. This class is NOT threadsafe. Internally a Bitset is used to record values and once a client has finished recording a stream of values the Downsize(Single) method can be used to create a suitably smaller set that is sized appropriately for the number of values recorded and desired saturation levels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk HashFunction Base class for hashing functions that can be referred to by name. Subclasses are expected to provide threadsafe implementations of the hash function on the range of bytes referenced in the provided BytesRef . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MurmurHash2 This is a very fast, non-cryptographic hash suitable for general hash-based lookup. See http://murmurhash.googlepages.com/ for more details. The C version of MurmurHash 2.0 found at that site was ported to Java by Andrzej Bialecki (ab at getopt org). The code from getopt.org was adapted by Mark Harwood in the form here as one of a pluggable choice of hashing functions as the core function had to be adapted to work with BytesRef s with offsets and lengths rather than raw byte arrays. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums FuzzySet.ContainsResult"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.MurmurHash2.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.MurmurHash2.html",
    "title": "Class MurmurHash2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MurmurHash2 This is a very fast, non-cryptographic hash suitable for general hash-based lookup. See http://murmurhash.googlepages.com/ for more details. The C version of MurmurHash 2.0 found at that site was ported to Java by Andrzej Bialecki (ab at getopt org). The code from getopt.org was adapted by Mark Harwood in the form here as one of a pluggable choice of hashing functions as the core function had to be adapted to work with BytesRef s with offsets and lengths rather than raw byte arrays. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HashFunction MurmurHash2 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.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public sealed class MurmurHash2 : HashFunction Fields | Improve this Doc View Source INSTANCE Declaration public static readonly MurmurHash2 INSTANCE Field Value Type Description MurmurHash2 Methods | Improve this Doc View Source Hash(BytesRef) Declaration public override int Hash(BytesRef br) Parameters Type Name Description BytesRef br Returns Type Description System.Int32 Overrides HashFunction.Hash(BytesRef) | Improve this Doc View Source Hash(Byte[], Int32, Int32, Int32) Declaration public static int Hash(byte[] data, int seed, int offset, int len) Parameters Type Name Description System.Byte [] data System.Int32 seed System.Int32 offset System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source Hash32(Byte[], Int32, Int32) Generates 32 bit hash from byte array with default seed value. Declaration public static int Hash32(byte[] data, int offset, int len) Parameters Type Name Description System.Byte [] data Byte array to hash. System.Int32 offset The start position in the array to hash. System.Int32 len Length of the array elements to hash. Returns Type Description System.Int32 32 bit hash of the given array."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html",
    "title": "Class DiskDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DiskDocValuesFormat DocValues format that keeps most things on disk. Only things like disk offsets are loaded into ram. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat DiskDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.DiskDV Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"Disk\")] public sealed class DiskDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source DiskDocValuesFormat() Declaration public DiskDocValuesFormat() Fields | Improve this Doc View Source DATA_CODEC Declaration public static readonly string DATA_CODEC Field Value Type Description System.String | Improve this Doc View Source DATA_EXTENSION Declaration public static readonly string DATA_EXTENSION Field Value Type Description System.String | Improve this Doc View Source META_CODEC Declaration public static readonly string META_CODEC Field Value Type Description System.String | Improve this Doc View Source META_EXTENSION Declaration public static readonly string META_EXTENSION Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html",
    "title": "Class DiskNormsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DiskNormsFormat Norms format that keeps all norms on disk. Inheritance System.Object NormsFormat DiskNormsFormat 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.Codecs.DiskDV Assembly : Lucene.Net.Codecs.dll Syntax public sealed class DiskNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.html",
    "title": "Namespace Lucene.Net.Codecs.DiskDV | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.DiskDV <!-- 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. --> DocValuesFormat that accesses values directly from disk. Classes DiskDocValuesFormat DocValues format that keeps most things on disk. Only things like disk offsets are loaded into ram. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DiskNormsFormat Norms format that keeps all norms on disk."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html",
    "title": "Class FixedInt32BlockIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was FixedIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput FixedInt32BlockIndexInput Implements System.IDisposable Inherited Members Int32IndexInput.Dispose() 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.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FixedInt32BlockIndexInput : Int32IndexInput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source FixedInt32BlockIndexInput(IndexInput) Declaration public FixedInt32BlockIndexInput(IndexInput in) Parameters Type Name Description IndexInput in Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetBlockReader(IndexInput, Int32[]) Declaration protected abstract FixedInt32BlockIndexInput.IBlockReader GetBlockReader(IndexInput in, int[] buffer) Parameters Type Name Description IndexInput in System.Int32 [] buffer Returns Type Description FixedInt32BlockIndexInput.IBlockReader | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface FixedInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FixedInt32BlockIndexInput.IBlockReader Interface for fixed-size block decoders. Implementations should decode into the buffer in ReadBlock() . Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public interface IBlockReader Methods | Improve this Doc View Source ReadBlock() Declaration void ReadBlock()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html",
    "title": "Class FixedInt32BlockIndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FixedInt32BlockIndexOutput Abstract base class that writes fixed-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was FixedIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput FixedInt32BlockIndexOutput Implements System.IDisposable Inherited Members Int32IndexOutput.Dispose() 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.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FixedInt32BlockIndexOutput : Int32IndexOutput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source FixedInt32BlockIndexOutput(IndexOutput, Int32) Declaration protected FixedInt32BlockIndexOutput(IndexOutput output, int fixedBlockSize) Parameters Type Name Description IndexOutput output System.Int32 fixedBlockSize Fields | Improve this Doc View Source m_buffer Declaration protected readonly int[] m_buffer Field Value Type Description System.Int32 [] | Improve this Doc View Source m_output Declaration protected readonly IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source FlushBlock() Declaration protected abstract void FlushBlock() | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.html",
    "title": "Namespace Lucene.Net.Codecs.IntBlock | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.IntBlock <!-- 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. --> Intblock: base support for fixed or variable length block integer encoders Classes FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was FixedIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedInt32BlockIndexOutput Abstract base class that writes fixed-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was FixedIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableInt32BlockIndexInput Abstract base class that reads variable-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was VariableIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableInt32BlockIndexOutput Abstract base class that writes variable-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was VariableIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces FixedInt32BlockIndexInput.IBlockReader Interface for fixed-size block decoders. Implementations should decode into the buffer in ReadBlock() . VariableInt32BlockIndexInput.IBlockReader Interface for variable-size block decoders. Implementations should decode into the buffer in ReadBlock() ."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html",
    "title": "Class VariableInt32BlockIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VariableInt32BlockIndexInput Abstract base class that reads variable-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was VariableIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput VariableInt32BlockIndexInput Implements System.IDisposable Inherited Members Int32IndexInput.Dispose() 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.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class VariableInt32BlockIndexInput : Int32IndexInput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source VariableInt32BlockIndexInput(IndexInput) Declaration protected VariableInt32BlockIndexInput(IndexInput input) Parameters Type Name Description IndexInput input Fields | Improve this Doc View Source m_maxBlockSize Declaration protected readonly int m_maxBlockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetBlockReader(IndexInput, Int32[]) Declaration protected abstract VariableInt32BlockIndexInput.IBlockReader GetBlockReader(IndexInput in, int[] buffer) Parameters Type Name Description IndexInput in System.Int32 [] buffer Returns Type Description VariableInt32BlockIndexInput.IBlockReader | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface VariableInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface VariableInt32BlockIndexInput.IBlockReader Interface for variable-size block decoders. Implementations should decode into the buffer in ReadBlock() . Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public interface IBlockReader Methods | Improve this Doc View Source ReadBlock() Declaration int ReadBlock() Returns Type Description System.Int32 | Improve this Doc View Source Seek(Int64) Declaration void Seek(long pos) Parameters Type Name Description System.Int64 pos"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html",
    "title": "Class VariableInt32BlockIndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VariableInt32BlockIndexOutput Abstract base class that writes variable-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was VariableIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput VariableInt32BlockIndexOutput Implements System.IDisposable Inherited Members Int32IndexOutput.Dispose() 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.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class VariableInt32BlockIndexOutput : Int32IndexOutput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source VariableInt32BlockIndexOutput(IndexOutput, Int32) NOTE: maxBlockSize must be the maximum block size plus the max non-causal lookahead of your codec. EG Simple9 requires lookahead=1 because on seeing the Nth value it knows it must now encode the N-1 values before it. Declaration protected VariableInt32BlockIndexOutput(IndexOutput output, int maxBlockSize) Parameters Type Name Description IndexOutput output System.Int32 maxBlockSize Fields | Improve this Doc View Source m_output Declaration protected readonly IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source Add(Int32) Called one value at a time. Return the number of buffered input values that have been written to out. Declaration protected abstract int Add(int value) Parameters Type Name Description System.Int32 value Returns Type Description System.Int32 | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html",
    "title": "Class DirectDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirectDocValuesFormat In-memory docvalues format that does no (or very little) compression. Indexed values are stored on disk, but then at search time all values are loaded into memory as simple .NET arrays. For numeric values, it uses byte[], short[], int[], long[] as necessary to fit the range of the values. For binary values, there is an System.Int32 (4 bytes) overhead per value. Limitations: For binary and sorted fields the total space required for all binary values cannot exceed about 2.1 GB (see MAX_TOTAL_BYTES_LENGTH ). For sorted set fields, the sum of the size of each document's set of values cannot exceed about 2.1 B values (see MAX_SORTED_SET_ORDS ). For example, if every document has 10 values (10 instances of SortedSetDocValuesField ) added, then no more than ~210 M documents can be added to one segment. Inheritance System.Object DocValuesFormat DirectDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"Direct\")] public class DirectDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source DirectDocValuesFormat() Sole constructor. Declaration public DirectDocValuesFormat() Fields | Improve this Doc View Source MAX_SORTED_SET_ORDS The sum of the number of values across all documents in a sorted set field cannot exceed this. Declaration public static readonly int MAX_SORTED_SET_ORDS Field Value Type Description System.Int32 | Improve this Doc View Source MAX_TOTAL_BYTES_LENGTH The sum of all byte lengths for binary field, or for the unique values in sorted or sorted set fields, cannot exceed this. Declaration public static readonly int MAX_TOTAL_BYTES_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectPostingsFormat.html",
    "title": "Class DirectPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and SeekExact(Int64) . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat DirectPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"Direct\")] public sealed class DirectPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source DirectPostingsFormat() Declaration public DirectPostingsFormat() | Improve this Doc View Source DirectPostingsFormat(Int32, Int32) minSkipCount is how many terms in a row must have the same prefix before we put a skip pointer down. Terms with docFreq less than or equal lowFreqCutoff will use a single int[] to hold all docs, freqs, position and offsets; terms with higher docFreq will use separate arrays. Declaration public DirectPostingsFormat(int minSkipCount, int lowFreqCutoff) Parameters Type Name Description System.Int32 minSkipCount System.Int32 lowFreqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html",
    "title": "Class FSTOrdPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF Inheritance System.Object PostingsFormat FSTOrdPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FSTOrd41\")] public sealed class FSTOrdPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTOrdPostingsFormat() Declaration public FSTOrdPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html",
    "title": "Class FSTOrdPulsing41PostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat FSTOrdPulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FSTOrdPulsing41\")] public class FSTOrdPulsing41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTOrdPulsing41PostingsFormat() Declaration public FSTOrdPulsing41PostingsFormat() | Improve this Doc View Source FSTOrdPulsing41PostingsFormat(Int32) Declaration public FSTOrdPulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html",
    "title": "Class FSTOrdTermsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTOrdTermsReader FST-based terms dictionary reader. The FST index maps each term and its ord, and during seek the ord is used fetch metadata from a single block. The term dictionary is fully memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FSTOrdTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTOrdTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source FSTOrdTermsReader(SegmentReadState, PostingsReaderBase) Declaration public FSTOrdTermsReader(SegmentReadState state, PostingsReaderBase postingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html",
    "title": "Class FSTOrdTermsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer FSTOrdTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTOrdTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source FSTOrdTermsWriter(SegmentWriteState, PostingsWriterBase) Declaration public FSTOrdTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source SKIP_INTERVAL Declaration public const int SKIP_INTERVAL = 8 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CHECKSUM Declaration public const int TERMS_VERSION_CHECKSUM = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CURRENT Declaration public const int TERMS_VERSION_CURRENT = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_START Declaration public const int TERMS_VERSION_START = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPostingsFormat.html",
    "title": "Class FSTPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTPostingsFormat FST term dict + Lucene41PBF Inheritance System.Object PostingsFormat FSTPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FST41\")] public sealed class FSTPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTPostingsFormat() Declaration public FSTPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html",
    "title": "Class FSTPulsing41PostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat FSTPulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FSTPulsing41\")] public class FSTPulsing41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTPulsing41PostingsFormat() Declaration public FSTPulsing41PostingsFormat() | Improve this Doc View Source FSTPulsing41PostingsFormat(Int32) Declaration public FSTPulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsReader.html",
    "title": "Class FSTTermsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTTermsReader FST-based terms dictionary reader. The FST directly maps each term and its metadata, it is memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FSTTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source FSTTermsReader(SegmentReadState, PostingsReaderBase) Declaration public FSTTermsReader(SegmentReadState state, PostingsReaderBase postingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsWriter.html",
    "title": "Class FSTTermsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTTermsWriter FST-based term dict, using metadata as FST output. The FST directly holds the mapping between <term, metadata>. Term metadata consists of three parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information need by postings reader. File: .tst : Term Dictionary Term Dictionary The .tst contains a list of FSTs, one for each field. The FST maps a term to its corresponding statistics (e.g. docfreq) and metadata (e.g. information for postings list reader like file pointer to postings list). Typically the metadata is separated into two parts: Monotonical long array: Some metadata will always be ascending in order with the corresponding term. This part is used by FST to share outputs between arcs. Generic byte array: Used to store non-monotonic metadata. File format: TermsDict(.tst) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, TermFST > NumFields TermFST TermData TermData --> Flag, BytesSize?, LongDelta LongsSize ?, Byte BytesSize ?, < DocFreq[Same?], (TotalTermFreq-DocFreq) > ? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) DocFreq, LongsSize, BytesSize, NumFields, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) TotalTermFreq, NumTerms, SumTotalTermFreq, SumDocFreq, LongDelta --> VLong ( WriteVInt64(Int64) ) Notes: The format of PostingsHeader and generic meta bytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). The format of TermData is determined by FST, typically monotonic metadata will be dense around shallow arcs, while in deeper arcs only generic bytes and term statistics exist. The byte Flag is used to indicate which part of metadata exists on current arc. Specially the monotonic part is omitted when it is an array of 0s. Since LongsSize is per-field fixed, it is only written once in field summary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer FSTTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source FSTTermsWriter(SegmentWriteState, PostingsWriterBase) Declaration public FSTTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source TERMS_VERSION_CHECKSUM Declaration public const int TERMS_VERSION_CHECKSUM = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CURRENT Declaration public const int TERMS_VERSION_CURRENT = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_START Declaration public const int TERMS_VERSION_START = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.html",
    "title": "Namespace Lucene.Net.Codecs.Memory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Memory <!-- 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. --> Term dictionary, DocValues or Postings formats that are read entirely into memory. Classes DirectDocValuesFormat In-memory docvalues format that does no (or very little) compression. Indexed values are stored on disk, but then at search time all values are loaded into memory as simple .NET arrays. For numeric values, it uses byte[], short[], int[], long[] as necessary to fit the range of the values. For binary values, there is an System.Int32 (4 bytes) overhead per value. Limitations: For binary and sorted fields the total space required for all binary values cannot exceed about 2.1 GB (see MAX_TOTAL_BYTES_LENGTH ). For sorted set fields, the sum of the size of each document's set of values cannot exceed about 2.1 B values (see MAX_SORTED_SET_ORDS ). For example, if every document has 10 values (10 instances of SortedSetDocValuesField ) added, then no more than ~210 M documents can be added to one segment. DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and SeekExact(Int64) . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdTermsReader FST-based terms dictionary reader. The FST index maps each term and its ord, and during seek the ord is used fetch metadata from a single block. The term dictionary is fully memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTPostingsFormat FST term dict + Lucene41PBF FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTTermsReader FST-based terms dictionary reader. The FST directly maps each term and its metadata, it is memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTTermsWriter FST-based term dict, using metadata as FST output. The FST directly holds the mapping between <term, metadata>. Term metadata consists of three parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information need by postings reader. File: .tst : Term Dictionary Term Dictionary The .tst contains a list of FSTs, one for each field. The FST maps a term to its corresponding statistics (e.g. docfreq) and metadata (e.g. information for postings list reader like file pointer to postings list). Typically the metadata is separated into two parts: Monotonical long array: Some metadata will always be ascending in order with the corresponding term. This part is used by FST to share outputs between arcs. Generic byte array: Used to store non-monotonic metadata. File format: TermsDict(.tst) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, TermFST > NumFields TermFST TermData TermData --> Flag, BytesSize?, LongDelta LongsSize ?, Byte BytesSize ?, < DocFreq[Same?], (TotalTermFreq-DocFreq) > ? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) DocFreq, LongsSize, BytesSize, NumFields, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) TotalTermFreq, NumTerms, SumTotalTermFreq, SumDocFreq, LongDelta --> VLong ( WriteVInt64(Int64) ) Notes: The format of PostingsHeader and generic meta bytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). The format of TermData is determined by FST, typically monotonic metadata will be dense around shallow arcs, while in deeper arcs only generic bytes and term statistics exist. The byte Flag is used to indicate which part of metadata exists on current arc. Specially the monotonic part is omitted when it is an array of 0s. Since LongsSize is per-field fixed, it is only written once in field summary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MemoryDocValuesFormat In-memory docvalues format. MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html",
    "title": "Class MemoryDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MemoryDocValuesFormat In-memory docvalues format. Inheritance System.Object DocValuesFormat MemoryDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"Memory\")] public class MemoryDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source MemoryDocValuesFormat() Calls MemoryDocValuesFormat(PackedInts.DEFAULT) ( MemoryDocValuesFormat(Single) ) Declaration public MemoryDocValuesFormat() | Improve this Doc View Source MemoryDocValuesFormat(Single) Creates a new MemoryDocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public MemoryDocValuesFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Fields | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html",
    "title": "Class MemoryPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat MemoryPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"Memory\")] public sealed class MemoryPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MemoryPostingsFormat() Declaration public MemoryPostingsFormat() | Improve this Doc View Source MemoryPostingsFormat(Boolean, Single) Create MemoryPostingsFormat , specifying advanced FST options. Declaration public MemoryPostingsFormat(bool doPackFST, float acceptableOverheadRatio) Parameters Type Name Description System.Boolean doPackFST true if a packed FST should be built. NOTE: packed FSTs are limited to ~2.1 GB of postings. System.Single acceptableOverheadRatio Allowable overhead for packed System.Int32 s during FST construction. Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.html",
    "title": "Namespace Lucene.Net.Codecs.Pulsing | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Pulsing <!-- 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. --> Pulsing Codec: inlines low frequency terms' postings into terms dictionary. Classes Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsReader.PulsingEnumAttribute Implementation of PulsingPostingsReader.PulsingEnumAttribute for reuse of wrapped postings readers underneath pulsing. This is a Lucene.NET INTERNAL API, use at your own risk PulsingPostingsWriter Writer for the pulsing format. Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. This is a Lucene.NET INTERNAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html",
    "title": "Class Pulsing41PostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members PulsingPostingsFormat.ToString() PulsingPostingsFormat.FieldsConsumer(SegmentWriteState) PulsingPostingsFormat.FieldsProducer(SegmentReadState) PulsingPostingsFormat.FreqCutoff PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"Pulsing41\")] public class Pulsing41PostingsFormat : PulsingPostingsFormat Constructors | Improve this Doc View Source Pulsing41PostingsFormat() Inlines docFreq=1 terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat() | Improve this Doc View Source Pulsing41PostingsFormat(Int32) Inlines docFreq= freqCutoff terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff | Improve this Doc View Source Pulsing41PostingsFormat(Int32, Int32, Int32) Inlines docFreq= freqCutoff terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat(int freqCutoff, int minBlockSize, int maxBlockSize) Parameters Type Name Description System.Int32 freqCutoff System.Int32 minBlockSize System.Int32 maxBlockSize"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html",
    "title": "Class PulsingPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public abstract class PulsingPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source PulsingPostingsFormat(PostingsBaseFormat, Int32) Declaration public PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff) Parameters Type Name Description PostingsBaseFormat wrappedPostingsBaseFormat System.Int32 freqCutoff | Improve this Doc View Source PulsingPostingsFormat(PostingsBaseFormat, Int32, Int32, Int32) Terms with freq less than or equal freqCutoff are inlined into terms dict. Declaration public PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff, int minBlockSize, int maxBlockSize) Parameters Type Name Description PostingsBaseFormat wrappedPostingsBaseFormat System.Int32 freqCutoff System.Int32 minBlockSize System.Int32 maxBlockSize Properties | Improve this Doc View Source FreqCutoff Declaration public virtual int FreqCutoff { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html",
    "title": "Class PulsingPostingsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PulsingPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase PulsingPostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() 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.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public class PulsingPostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source PulsingPostingsReader(SegmentReadState, PostingsReaderBase) Declaration public PulsingPostingsReader(SegmentReadState state, PostingsReaderBase wrappedPostingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase wrappedPostingsReader Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] empty, DataInput input, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] empty DataInput input FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo field, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo field BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo field, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo field BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html",
    "title": "Interface PulsingPostingsReader.IPulsingEnumAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public interface IPulsingEnumAttribute : IAttribute Properties | Improve this Doc View Source Enums Declaration IDictionary<PulsingPostingsReader, DocsEnum> Enums { get; } Property Value Type Description System.Collections.Generic.IDictionary < PulsingPostingsReader , DocsEnum >"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html",
    "title": "Class PulsingPostingsReader.PulsingEnumAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PulsingPostingsReader.PulsingEnumAttribute Implementation of PulsingPostingsReader.PulsingEnumAttribute for reuse of wrapped postings readers underneath pulsing. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute PulsingPostingsReader.PulsingEnumAttribute Implements PulsingPostingsReader.IPulsingEnumAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() 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.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public sealed class PulsingEnumAttribute : Attribute, PulsingPostingsReader.IPulsingEnumAttribute, IAttribute Properties | Improve this Doc View Source Enums Declaration public IDictionary<PulsingPostingsReader, DocsEnum> Enums { get; } Property Value Type Description System.Collections.Generic.IDictionary < PulsingPostingsReader , DocsEnum > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements PulsingPostingsReader.IPulsingEnumAttribute IAttribute"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html",
    "title": "Class PulsingPostingsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PulsingPostingsWriter Writer for the pulsing format. Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase PulsingPostingsWriter Implements System.IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) 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.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public sealed class PulsingPostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source PulsingPostingsWriter(SegmentWriteState, Int32, PostingsWriterBase) If the total number of positions (summed across all docs for this term) is less than or equal maxPositions , then the postings are inlined into terms dict. Declaration public PulsingPostingsWriter(SegmentWriteState state, int maxPositions, PostingsWriterBase wrappedPostingsWriter) Parameters Type Name Description SegmentWriteState state System.Int32 maxPositions PostingsWriterBase wrappedPostingsWriter Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] empty, DataOutput output, FieldInfo fieldInfo, BlockTermState state, bool abs) Parameters Type Name Description System.Int64 [] empty DataOutput output FieldInfo fieldInfo BlockTermState state System.Boolean abs Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Currently, this instance is re-used across fields, so our parent calls setField whenever the field changes. Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docId, int termDocFreq) Parameters Type Name Description System.Int32 docId System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.html",
    "title": "Namespace Lucene.Net.Codecs.Sep | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Sep <!-- 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. --> Sep: base support for separate files (doc,frq,pos,skp,pyl) Classes Int32IndexInput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32IndexInput.Index Records a single skip-point in the GetReader() . Int32IndexInput.Reader Reads System.Int32 values. Int32IndexOutput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32IndexOutput.Index Records a single skip-point in the IndexOutput . Int32StreamFactory Provides System.Int32 reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk SepPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.html",
    "title": "Class Int32IndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32IndexInput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput FixedInt32BlockIndexInput VariableInt32BlockIndexInput 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexInput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() Declaration public abstract Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index | Improve this Doc View Source GetReader() Declaration public abstract Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html",
    "title": "Class Int32IndexInput.Index | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32IndexInput.Index Records a single skip-point in the GetReader() . Inheritance System.Object Int32IndexInput.Index 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Index Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyFrom(Int32IndexInput.Index) Declaration public abstract void CopyFrom(Int32IndexInput.Index other) Parameters Type Name Description Int32IndexInput.Index other | Improve this Doc View Source Read(DataInput, Boolean) Declaration public abstract void Read(DataInput indexIn, bool absolute) Parameters Type Name Description DataInput indexIn System.Boolean absolute | Improve this Doc View Source Seek(Int32IndexInput.Reader) Seeks primary stream to the last read offset. Declaration public abstract void Seek(Int32IndexInput.Reader stream) Parameters Type Name Description Int32IndexInput.Reader stream"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html",
    "title": "Class Int32IndexInput.Reader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32IndexInput.Reader Reads System.Int32 values. Inheritance System.Object Int32IndexInput.Reader 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Reader Methods | Improve this Doc View Source Next() Reads next single System.Int32 . Declaration public abstract int Next() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.html",
    "title": "Class Int32IndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32IndexOutput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput FixedInt32BlockIndexOutput VariableInt32BlockIndexOutput 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexOutput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() If you are indexing the primary output file, call this and interact with the returned IndexWriter. Declaration public abstract Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index | Improve this Doc View Source Write(Int32) Write an System.Int32 to the primary file. The value must be = 0. Declaration public abstract void Write(int v) Parameters Type Name Description System.Int32 v Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html",
    "title": "Class Int32IndexOutput.Index | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32IndexOutput.Index Records a single skip-point in the IndexOutput . Inheritance System.Object Int32IndexOutput.Index 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Index Methods | Improve this Doc View Source CopyFrom(Int32IndexOutput.Index, Boolean) Copies index from other . Declaration public abstract void CopyFrom(Int32IndexOutput.Index other, bool copyLast) Parameters Type Name Description Int32IndexOutput.Index other System.Boolean copyLast | Improve this Doc View Source Mark() Internally records the current location. Declaration public abstract void Mark() | Improve this Doc View Source Write(DataOutput, Boolean) Writes \"location\" of current output pointer of primary output to different output (out). Declaration public abstract void Write(DataOutput indexOut, bool absolute) Parameters Type Name Description DataOutput indexOut System.Boolean absolute"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32StreamFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32StreamFactory.html",
    "title": "Class Int32StreamFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32StreamFactory Provides System.Int32 reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32StreamFactory 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32StreamFactory Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Create an Int32IndexOutput on the provided fileName. Declaration public abstract Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput | Improve this Doc View Source OpenInput(Directory, String, IOContext) Create an Int32IndexInput on the provided fileName. Declaration public abstract Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsReader.html",
    "title": "Class SepPostingsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SepPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase SepPostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public class SepPostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source SepPostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, Int32StreamFactory, String) Declaration public SepPostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext context, Int32StreamFactory intFactory, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext context Int32StreamFactory intFactory System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] empty, DataInput input, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] empty DataInput input FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsWriter.html",
    "title": "Class SepPostingsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase SepPostingsWriter Implements System.IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) 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.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public sealed class SepPostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source SepPostingsWriter(SegmentWriteState, Int32StreamFactory) Declaration public SepPostingsWriter(SegmentWriteState state, Int32StreamFactory factory) Parameters Type Name Description SegmentWriteState state Int32StreamFactory factory | Improve this Doc View Source SepPostingsWriter(SegmentWriteState, Int32StreamFactory, Int32) Declaration public SepPostingsWriter(SegmentWriteState state, Int32StreamFactory factory, int skipInterval) Parameters Type Name Description SegmentWriteState state Int32StreamFactory factory System.Int32 skipInterval Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload. Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] longs, DataOutput output, FieldInfo fi, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput output FieldInfo fi BlockTermState state System.Boolean absolute Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Called when we are done adding positions & payloads. Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Adds a new doc in this term. If this returns null then we just skip consuming positions/payloads. Declaration public override void StartDoc(int docID, int termDocFreq) Parameters Type Name Description System.Int32 docID System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.html",
    "title": "Namespace Lucene.Net.Codecs.SimpleText | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.SimpleText <!-- 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. --> Simpletext Codec: writes human readable postings. Classes SimpleTextCodec Plain text index format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextDocValuesReader SimpleTextDocValuesWriter SimpleTextFieldInfosFormat Plain text field infos format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosReader Reads plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosWriter Writes plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextLiveDocsFormat Reads/writes plain text live docs. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat Plain-text norms format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsConsumer Writes plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsProducer Reads plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoFormat Plain text segments file format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoReader Reads plaintext segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoWriter Writes plain text segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsFormat Plain text stored fields format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsReader Reads plain text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsWriter Writes plain-text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsFormat Plain text term vectors format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsReader Reads plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsWriter Writes plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html",
    "title": "Class SimpleTextCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextCodec Plain text index format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec SimpleTextCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax [CodecName(\"SimpleText\")] public sealed class SimpleTextCodec : Codec Constructors | Improve this Doc View Source SimpleTextCodec() Declaration public SimpleTextCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html",
    "title": "Class SimpleTextDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat SimpleTextDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"SimpleText\")] public class SimpleTextDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source SimpleTextDocValuesFormat() Declaration public SimpleTextDocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html",
    "title": "Class SimpleTextDocValuesReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextDocValuesReader Inheritance System.Object DocValuesProducer SimpleTextDocValuesReader SimpleTextNormsFormat.SimpleTextNormsProducer Implements System.IDisposable Inherited Members DocValuesProducer.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextDocValuesReader : DocValuesProducer, IDisposable Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides DocValuesProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesProducer.Dispose(Boolean) | Improve this Doc View Source GetBinary(FieldInfo) Declaration public override BinaryDocValues GetBinary(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description BinaryDocValues Overrides DocValuesProducer.GetBinary(FieldInfo) | Improve this Doc View Source GetDocsWithField(FieldInfo) Declaration public override IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits Overrides DocValuesProducer.GetDocsWithField(FieldInfo) | Improve this Doc View Source GetNumeric(FieldInfo) Declaration public override NumericDocValues GetNumeric(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description NumericDocValues Overrides DocValuesProducer.GetNumeric(FieldInfo) | Improve this Doc View Source GetSorted(FieldInfo) Declaration public override SortedDocValues GetSorted(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description SortedDocValues Overrides DocValuesProducer.GetSorted(FieldInfo) | Improve this Doc View Source GetSortedSet(FieldInfo) Declaration public override SortedSetDocValues GetSortedSet(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description SortedSetDocValues Overrides DocValuesProducer.GetSortedSet(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides DocValuesProducer.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html",
    "title": "Class SimpleTextDocValuesWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextDocValuesWriter Inheritance System.Object DocValuesConsumer SimpleTextDocValuesWriter SimpleTextNormsFormat.SimpleTextNormsConsumer Implements System.IDisposable Inherited Members DocValuesConsumer.MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) DocValuesConsumer.MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) DocValuesConsumer.MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) DocValuesConsumer.MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) DocValuesConsumer.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextDocValuesWriter : DocValuesConsumer, IDisposable Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Declaration public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values Overrides DocValuesConsumer.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Declaration public override void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> values Overrides DocValuesConsumer.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrd Overrides DocValuesConsumer.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrdCount System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> ords Overrides DocValuesConsumer.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html",
    "title": "Class SimpleTextFieldInfosFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextFieldInfosFormat Plain text field infos format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat SimpleTextFieldInfosFormat 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosFormat : FieldInfosFormat Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html",
    "title": "Class SimpleTextFieldInfosReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextFieldInfosReader Reads plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosReader SimpleTextFieldInfosReader 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosReader : FieldInfosReader Methods | Improve this Doc View Source DocValuesType(String) Declaration public virtual DocValuesType DocValuesType(string dvType) Parameters Type Name Description System.String dvType Returns Type Description DocValuesType | Improve this Doc View Source Read(Directory, String, String, IOContext) Declaration public override FieldInfos Read(Directory directory, string segmentName, string segmentSuffix, IOContext iocontext) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix IOContext iocontext Returns Type Description FieldInfos Overrides FieldInfosReader.Read(Directory, String, String, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html",
    "title": "Class SimpleTextFieldInfosWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextFieldInfosWriter Writes plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter SimpleTextFieldInfosWriter 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosWriter : FieldInfosWriter Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Declaration public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context Overrides FieldInfosWriter.Write(Directory, String, String, FieldInfos, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html",
    "title": "Class SimpleTextLiveDocsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextLiveDocsFormat Reads/writes plain text live docs. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LiveDocsFormat SimpleTextLiveDocsFormat 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextLiveDocsFormat : LiveDocsFormat Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Declaration public override void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info System.Collections.Generic.ICollection < System.String > files Overrides LiveDocsFormat.Files(SegmentCommitInfo, ICollection<String>) | Improve this Doc View Source NewLiveDocs(IBits) Declaration public override IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(IBits) | Improve this Doc View Source NewLiveDocs(Int32) Declaration public override IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(Int32) | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Declaration public override IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits Overrides LiveDocsFormat.ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Declaration public override void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context Overrides LiveDocsFormat.WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html",
    "title": "Class SimpleTextNormsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextNormsFormat Plain-text norms format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NormsFormat SimpleTextNormsFormat 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsConsumer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextNormsFormat.SimpleTextNormsConsumer Writes plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesConsumer SimpleTextDocValuesWriter SimpleTextNormsFormat.SimpleTextNormsConsumer Implements System.IDisposable Inherited Members SimpleTextDocValuesWriter.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) SimpleTextDocValuesWriter.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.Dispose(Boolean) DocValuesConsumer.MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) DocValuesConsumer.MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) DocValuesConsumer.MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) DocValuesConsumer.MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) DocValuesConsumer.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsConsumer : SimpleTextDocValuesWriter, IDisposable Constructors | Improve this Doc View Source SimpleTextNormsConsumer(SegmentWriteState) Declaration public SimpleTextNormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsProducer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextNormsFormat.SimpleTextNormsProducer Reads plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesProducer SimpleTextDocValuesReader SimpleTextNormsFormat.SimpleTextNormsProducer Implements System.IDisposable Inherited Members SimpleTextDocValuesReader.GetNumeric(FieldInfo) SimpleTextDocValuesReader.GetBinary(FieldInfo) SimpleTextDocValuesReader.GetSorted(FieldInfo) SimpleTextDocValuesReader.GetSortedSet(FieldInfo) SimpleTextDocValuesReader.GetDocsWithField(FieldInfo) SimpleTextDocValuesReader.Dispose(Boolean) SimpleTextDocValuesReader.RamBytesUsed() SimpleTextDocValuesReader.CheckIntegrity() DocValuesProducer.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsProducer : SimpleTextDocValuesReader, IDisposable Constructors | Improve this Doc View Source SimpleTextNormsProducer(SegmentReadState) Declaration public SimpleTextNormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html",
    "title": "Class SimpleTextPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat SimpleTextPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"SimpleText\")] public sealed class SimpleTextPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source SimpleTextPostingsFormat() Declaration public SimpleTextPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html",
    "title": "Class SimpleTextSegmentInfoFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextSegmentInfoFormat Plain text segments file format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat SimpleTextSegmentInfoFormat 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoFormat : SegmentInfoFormat Fields | Improve this Doc View Source SI_EXTENSION Declaration public const string SI_EXTENSION = \"si\" Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html",
    "title": "Class SimpleTextSegmentInfoReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextSegmentInfoReader Reads plaintext segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader SimpleTextSegmentInfoReader 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoReader : SegmentInfoReader Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory System.String segmentName IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html",
    "title": "Class SimpleTextSegmentInfoWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextSegmentInfoWriter Writes plain text segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter SimpleTextSegmentInfoWriter 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoWriter : SegmentInfoWriter Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html",
    "title": "Class SimpleTextStoredFieldsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextStoredFieldsFormat Plain text stored fields format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat SimpleTextStoredFieldsFormat 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsFormat : StoredFieldsFormat Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html",
    "title": "Class SimpleTextStoredFieldsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextStoredFieldsReader Reads plain text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader SimpleTextStoredFieldsReader Implements System.IDisposable Inherited Members StoredFieldsReader.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsReader : StoredFieldsReader, IDisposable Constructors | Improve this Doc View Source SimpleTextStoredFieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public SimpleTextStoredFieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html",
    "title": "Class SimpleTextStoredFieldsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextStoredFieldsWriter Writes plain-text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter SimpleTextStoredFieldsWriter Implements System.IDisposable Inherited Members StoredFieldsWriter.FinishDocument() StoredFieldsWriter.Merge(MergeState) StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsWriter : StoredFieldsWriter, IDisposable Constructors | Improve this Doc View Source SimpleTextStoredFieldsWriter(Directory, String, IOContext) Declaration public SimpleTextStoredFieldsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html",
    "title": "Class SimpleTextTermVectorsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextTermVectorsFormat Plain text term vectors format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat SimpleTextTermVectorsFormat 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsFormat : TermVectorsFormat Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html",
    "title": "Class SimpleTextTermVectorsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextTermVectorsReader Reads plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader SimpleTextTermVectorsReader Implements System.IDisposable Inherited Members TermVectorsReader.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source SimpleTextTermVectorsReader(Directory, SegmentInfo, IOContext) Declaration public SimpleTextTermVectorsReader(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html",
    "title": "Class SimpleTextTermVectorsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTextTermVectorsWriter Writes plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter SimpleTextTermVectorsWriter Implements System.IDisposable Inherited Members TermVectorsWriter.FinishDocument() TermVectorsWriter.FinishField() TermVectorsWriter.FinishTerm() TermVectorsWriter.AddProx(Int32, DataInput, DataInput) TermVectorsWriter.Merge(MergeState) TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() 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.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsWriter : TermVectorsWriter, IDisposable Constructors | Improve this Doc View Source SimpleTextTermVectorsWriter(Directory, String, IOContext) Declaration public SimpleTextTermVectorsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override sealed void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.AssociationsFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.AssociationsFacetsExample.html",
    "title": "Class AssociationsFacetsExample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssociationsFacetsExample Shows example usage of category associations. Inheritance System.Object AssociationsFacetsExample 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.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class AssociationsFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows example usage of category associations. /// </summary> public class AssociationsFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config; /// <summary>Empty constructor</summary> public AssociationsFacetsExample() { config = new FacetsConfig(); config.SetMultiValued(\"tags\", true); config.SetIndexFieldName(\"tags\", \"$tags\"); config.SetMultiValued(\"genre\", true); config.SetIndexFieldName(\"genre\", \"$genre\"); } /// <summary>Build the example index.</summary> private void Index() { IndexWriterConfig iwc = new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)); using (IndexWriter indexWriter = new IndexWriter(indexDir, iwc)) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); // 3 occurrences for tag 'lucene' doc.AddInt32AssociationFacetField(3, \"tags\", \"lucene\"); // 87% confidence level of genre 'computing' doc.AddSingleAssociationFacetField(0.87f, \"genre\", \"computing\"); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); // 1 occurrence for tag 'lucene' doc.AddInt32AssociationFacetField(1, \"tags\", \"lucene\"); // 2 occurrence for tag 'solr' doc.AddInt32AssociationFacetField(2, \"tags\", \"solr\"); // 75% confidence level of genre 'computing' doc.AddSingleAssociationFacetField(0.75f, \"genre\", \"computing\"); // 34% confidence level of genre 'software' doc.AddSingleAssociationFacetField(0.34f, \"genre\", \"software\"); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and aggregates facets by summing their association values.</summary> private IList<FacetResult> SumAssociations() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); Facets tags = new TaxonomyFacetSumInt32Associations(\"$tags\", taxoReader, config, fc); Facets genre = new TaxonomyFacetSumSingleAssociations(\"$genre\", taxoReader, config, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); results.Add(tags.GetTopChildren(10, \"tags\")); results.Add(genre.GetTopChildren(10, \"genre\")); return results; } // Disposes indexReader and taxoReader } /// <summary>User drills down on 'tags/solr'.</summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"tags\", \"solr\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumSingleAssociations(\"$genre\", taxoReader, config, fc); FacetResult result = facets.GetTopChildren(10, \"genre\"); return result; } // Disposes indexReader and taxoReader } /// <summary>Runs summing association example.</summary> public IList<FacetResult> RunSumAssociations() { Index(); return SumAssociations(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the sum int/float associations examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Sum associations example:\"); Console.WriteLine(\"-------------------------\"); IList<FacetResult> results = new AssociationsFacetsExample().RunSumAssociations(); Console.WriteLine(\"tags: \" + results[0]); Console.WriteLine(\"genre: \" + results[1]); } } } Constructors | Improve this Doc View Source AssociationsFacetsExample() Empty constructor Declaration public AssociationsFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the sum int/float associations examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunSumAssociations() Runs summing association example. Declaration public IList<FacetResult> RunSumAssociations() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.DistanceFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.DistanceFacetsExample.html",
    "title": "Class DistanceFacetsExample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DistanceFacetsExample Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. Inheritance System.Object DistanceFacetsExample 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.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class DistanceFacetsExample : IDisposable Examples using J2N; using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Expressions; using Lucene.Net.Expressions.JS; using Lucene.Net.Facet; using Lucene.Net.Facet.Range; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Index; using Lucene.Net.Queries; using Lucene.Net.Queries.Function; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Diagnostics; using System.Globalization; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of dynamic range faceting, using the /// expressions module to calculate distance. /// </summary> public class DistanceFacetsExample : IDisposable { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; internal static readonly DoubleRange ONE_KM = new DoubleRange(\"< 1 km\", 0.0, true, 1.0, false); internal static readonly DoubleRange TWO_KM = new DoubleRange(\"< 2 km\", 0.0, true, 2.0, false); internal static readonly DoubleRange FIVE_KM = new DoubleRange(\"< 5 km\", 0.0, true, 5.0, false); internal static readonly DoubleRange TEN_KM = new DoubleRange(\"< 10 km\", 0.0, true, 10.0, false); private readonly Directory indexDir = new RAMDirectory(); private IndexSearcher searcher; private readonly FacetsConfig config = new FacetsConfig(); /// <summary>The \"home\" latitude.</summary> public readonly static double ORIGIN_LATITUDE = 40.7143528; /// <summary>The \"home\" longitude.</summary> public readonly static double ORIGIN_LONGITUDE = -74.0059731; /// <summary> /// Radius of the Earth in KM /// <para/> /// NOTE: this is approximate, because the earth is a bit /// wider at the equator than the poles. See /// http://en.wikipedia.org/wiki/Earth_radius /// </summary> public readonly static double EARTH_RADIUS_KM = 6371.01; /// <summary>Build the example index.</summary> public void Index() { using (IndexWriter writer = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { // TODO: we could index in radians instead ... saves all the conversions in GetBoundingBoxFilter // Add documents with latitude/longitude location: Document doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.759011, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -73.9844722, Field.Store.NO)); writer.AddDocument(doc); doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.718266, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -74.007819, Field.Store.NO)); writer.AddDocument(doc); doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.7051157, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -74.0088305, Field.Store.NO)); writer.AddDocument(doc); // Open near-real-time searcher searcher = new IndexSearcher(DirectoryReader.Open(writer, true)); } // Disposes writer } private ValueSource GetDistanceValueSource() { Expression distance = JavascriptCompiler.Compile( string.Format(CultureInfo.InvariantCulture, \"haversin({0:R},{1:R},latitude,longitude)\", ORIGIN_LATITUDE, ORIGIN_LONGITUDE)); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"latitude\", SortFieldType.DOUBLE)); bindings.Add(new SortField(\"longitude\", SortFieldType.DOUBLE)); return distance.GetValueSource(bindings); } /// <summary> /// Given a latitude and longitude (in degrees) and the /// maximum great circle (surface of the earth) distance, /// returns a simple Filter bounding box to \"fast match\" /// candidates. /// </summary> public static Filter GetBoundingBoxFilter(double originLat, double originLng, double maxDistanceKM) { // Basic bounding box geo math from // http://JanMatuschek.de/LatitudeLongitudeBoundingCoordinates, // licensed under creative commons 3.0: // http://creativecommons.org/licenses/by/3.0 // TODO: maybe switch to recursive prefix tree instead // (in lucene/spatial)? It should be more efficient // since it's a 2D trie... // Degrees -> Radians: double originLatRadians = originLat.ToRadians(); double originLngRadians = originLng.ToRadians(); double angle = maxDistanceKM / (SloppyMath.EarthDiameter(originLat) / 2.0); double minLat = originLatRadians - angle; double maxLat = originLatRadians + angle; double minLng; double maxLng; if (minLat > -90.ToRadians() && maxLat < 90.ToRadians()) { double delta = Math.Asin(Math.Sin(angle) / Math.Cos(originLatRadians)); minLng = originLngRadians - delta; if (minLng < -180.ToRadians()) { minLng += 2 * Math.PI; } maxLng = originLngRadians + delta; if (maxLng > 180.ToRadians()) { maxLng -= 2 * Math.PI; } } else { // The query includes a pole! minLat = Math.Max(minLat, -90.ToRadians()); maxLat = Math.Min(maxLat, 90.ToRadians()); minLng = -180.ToRadians(); maxLng = 180.ToRadians(); } BooleanFilter f = new BooleanFilter(); // Add latitude range filter: f.Add(NumericRangeFilter.NewDoubleRange(\"latitude\", minLat.ToDegrees(), maxLat.ToDegrees(), true, true), Occur.MUST); // Add longitude range filter: if (minLng > maxLng) { // The bounding box crosses the international date // line: BooleanFilter lonF = new BooleanFilter(); lonF.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", minLng.ToDegrees(), null, true, true), Occur.SHOULD); lonF.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", null, maxLng.ToDegrees(), true, true), Occur.SHOULD); f.Add(lonF, Occur.MUST); } else { f.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", minLng.ToDegrees(), maxLng.ToDegrees(), true, true), Occur.MUST); } return f; } /// <summary>User runs a query and counts facets.</summary> public FacetResult Search() { FacetsCollector fc = new FacetsCollector(); searcher.Search(new MatchAllDocsQuery(), fc); Facets facets = new DoubleRangeFacetCounts(\"field\", GetDistanceValueSource(), fc, GetBoundingBoxFilter(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, 10.0), ONE_KM, TWO_KM, FIVE_KM, TEN_KM); return facets.GetTopChildren(10, \"field\"); } /// <summary>User drills down on the specified range.</summary> public TopDocs DrillDown(DoubleRange range) { // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(null); ValueSource vs = GetDistanceValueSource(); q.Add(\"field\", range.GetFilter(GetBoundingBoxFilter(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, range.Max), vs)); DrillSideways ds = new SearchDrillSideways(searcher, config, vs); return ds.Search(q, 10).Hits; } private class SearchDrillSideways : DrillSideways { private readonly ValueSource vs; public SearchDrillSideways(IndexSearcher indexSearcher, FacetsConfig facetsConfig, ValueSource valueSource) : base(indexSearcher, facetsConfig, (TaxonomyReader)null) { this.vs = valueSource; } protected override Facets BuildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, string[] drillSidewaysDims) { Debug.Assert(drillSideways.Length == 1); return new DoubleRangeFacetCounts(\"field\", vs, drillSideways[0], ONE_KM, TWO_KM, FIVE_KM, TEN_KM); } } public void Dispose() { searcher?.IndexReader?.Dispose(); indexDir?.Dispose(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { using (DistanceFacetsExample example = new DistanceFacetsExample()) { example.Index(); Console.WriteLine(\"Distance facet counting example:\"); Console.WriteLine(\"-----------------------\"); Console.WriteLine(example.Search()); Console.WriteLine(\"\\n\"); Console.WriteLine(\"Distance facet drill-down example (field/< 2 km):\"); Console.WriteLine(\"---------------------------------------------\"); TopDocs hits = example.DrillDown(TWO_KM); Console.WriteLine(hits.TotalHits + \" totalHits\"); } // Disposes example } } } Fields | Improve this Doc View Source EARTH_RADIUS_KM Radius of the Earth in KM NOTE: this is approximate, because the earth is a bit wider at the equator than the poles. See http://en.wikipedia.org/wiki/Earth_radius Declaration public static readonly double EARTH_RADIUS_KM Field Value Type Description System.Double | Improve this Doc View Source ORIGIN_LATITUDE The \"home\" latitude. Declaration public static readonly double ORIGIN_LATITUDE Field Value Type Description System.Double | Improve this Doc View Source ORIGIN_LONGITUDE The \"home\" longitude. Declaration public static readonly double ORIGIN_LONGITUDE Field Value Type Description System.Double Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source DrillDown(DoubleRange) User drills down on the specified range. Declaration public TopDocs DrillDown(DoubleRange range) Parameters Type Name Description DoubleRange range Returns Type Description TopDocs | Improve this Doc View Source GetBoundingBoxFilter(Double, Double, Double) Given a latitude and longitude (in degrees) and the maximum great circle (surface of the earth) distance, returns a simple Filter bounding box to \"fast match\" candidates. Declaration public static Filter GetBoundingBoxFilter(double originLat, double originLng, double maxDistanceKM) Parameters Type Name Description System.Double originLat System.Double originLng System.Double maxDistanceKM Returns Type Description Filter | Improve this Doc View Source Index() Build the example index. Declaration public void Index() | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Search() User runs a query and counts facets. Declaration public FacetResult Search() Returns Type Description FacetResult Implements System.IDisposable"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.ExpressionAggregationFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.ExpressionAggregationFacetsExample.html",
    "title": "Class ExpressionAggregationFacetsExample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExpressionAggregationFacetsExample Shows facets aggregation by an expression. Inheritance System.Object ExpressionAggregationFacetsExample 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.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class ExpressionAggregationFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Expressions; using Lucene.Net.Expressions.JS; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows facets aggregation by an expression. /// </summary> public class ExpressionAggregationFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new TextField(\"c\", \"foo bar\", Field.Store.NO)); doc.Add(new NumericDocValuesField(\"popularity\", 5L)); doc.Add(new FacetField(\"A\", \"B\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new TextField(\"c\", \"foo foo bar\", Field.Store.NO)); doc.Add(new NumericDocValuesField(\"popularity\", 3L)); doc.Add(new FacetField(\"A\", \"C\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and aggregates facets.</summary> private FacetResult Search() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Aggregate categories by an expression that combines the document's score // and its popularity field Expression expr = JavascriptCompiler.Compile(\"_score * sqrt(popularity)\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // the score of the document bindings.Add(new SortField(\"popularity\", SortFieldType.INT64)); // the value of the 'popularity' field // Aggregates the facet values FacetsCollector fc = new FacetsCollector(true); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumValueSource(taxoReader, config, fc, expr.GetValueSource(bindings)); FacetResult result = facets.GetTopChildren(10, \"A\"); return result; } // Disposes indexReader and taxoReader } /// <summary>Runs the search example.</summary> public FacetResult RunSearch() { Index(); return Search(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); FacetResult result = new ExpressionAggregationFacetsExample().RunSearch(); Console.WriteLine(result); } } } Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunSearch() Runs the search example. Declaration public FacetResult RunSearch() Returns Type Description FacetResult"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.html",
    "title": "Namespace Lucene.Net.Demo.Facet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Demo.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. --> Facets example code. Classes AssociationsFacetsExample Shows example usage of category associations. DistanceFacetsExample Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. ExpressionAggregationFacetsExample Shows facets aggregation by an expression. MultiCategoryListsFacetsExample Demonstrates indexing categories into different indexed fields. RangeFacetsExample Shows simple usage of dynamic range faceting. SimpleFacetsExample Shows simple usage of faceted indexing and search. SimpleSortedSetFacetsExample Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts ."
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.html",
    "title": "Class MultiCategoryListsFacetsExample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiCategoryListsFacetsExample Demonstrates indexing categories into different indexed fields. Inheritance System.Object MultiCategoryListsFacetsExample 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.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class MultiCategoryListsFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Demonstrates indexing categories into different indexed fields. /// </summary> public class MultiCategoryListsFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Creates a new instance and populates the catetory list params mapping.</summary> public MultiCategoryListsFacetsExample() { config.SetIndexFieldName(\"Author\", \"author\"); config.SetIndexFieldName(\"Publish Date\", \"pubdate\"); config.SetHierarchical(\"Publish Date\", true); } /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new FacetField(\"Author\", \"Bob\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"15\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"20\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"1\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Susan\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"7\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Frank\")); doc.Add(new FacetField(\"Publish Date\", \"1999\", \"5\", \"5\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> Search() { IList<FacetResult> results = new List<FacetResult>(); using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results // Count both \"Publish Date\" and \"Author\" dimensions Facets author = new FastTaxonomyFacetCounts(\"author\", taxoReader, config, fc); results.Add(author.GetTopChildren(10, \"Author\")); Facets pubDate = new FastTaxonomyFacetCounts(\"pubdate\", taxoReader, config, fc); results.Add(pubDate.GetTopChildren(10, \"Publish Date\")); } // Disposes indexReader and taxoReader return results; } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return Search(); } /// <summary>Runs the search example and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting over multiple category lists example:\"); Console.WriteLine(\"-----------------------\"); IList<FacetResult> results = new MultiCategoryListsFacetsExample().RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Date: \" + results[1]); } } } Constructors | Improve this Doc View Source MultiCategoryListsFacetsExample() Creates a new instance and populates the catetory list params mapping. Declaration public MultiCategoryListsFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the search example and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.RangeFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.RangeFacetsExample.html",
    "title": "Class RangeFacetsExample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RangeFacetsExample Shows simple usage of dynamic range faceting. Inheritance System.Object RangeFacetsExample 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.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class RangeFacetsExample : IDisposable Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Range; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of dynamic range faceting. /// </summary> public class RangeFacetsExample : IDisposable { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private IndexSearcher searcher; private readonly long nowSec = DateTime.Now.Ticks; internal readonly Int64Range PAST_HOUR; internal readonly Int64Range PAST_SIX_HOURS; internal readonly Int64Range PAST_DAY; /// <summary>Constructor</summary> public RangeFacetsExample() { PAST_HOUR = new Int64Range(\"Past hour\", nowSec - 3600, true, nowSec, true); PAST_SIX_HOURS = new Int64Range(\"Past six hours\", nowSec - 6 * 3600, true, nowSec, true); PAST_DAY = new Int64Range(\"Past day\", nowSec - 24 * 3600, true, nowSec, true); } /// <summary>Build the example index.</summary> public void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { // Add documents with a fake timestamp, 1000 sec before // \"now\", 2000 sec before \"now\", ...: for (int i = 0; i < 100; i++) { Document doc = new Document(); long then = nowSec - i * 1000; // Add as doc values field, so we can compute range facets: doc.Add(new NumericDocValuesField(\"timestamp\", then)); // Add as numeric field so we can drill-down: doc.Add(new Int64Field(\"timestamp\", then, Field.Store.NO)); indexWriter.AddDocument(doc); } // Open near-real-time searcher searcher = new IndexSearcher(DirectoryReader.Open(indexWriter, true)); } // Disposes indexWriter } private FacetsConfig GetConfig() { return new FacetsConfig(); } /// <summary>User runs a query and counts facets.</summary> public FacetResult Search() { // Aggregates the facet counts FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); Facets facets = new Int64RangeFacetCounts(\"timestamp\", fc, PAST_HOUR, PAST_SIX_HOURS, PAST_DAY); return facets.GetTopChildren(10, \"timestamp\"); } /// <summary>User drills down on the specified range.</summary> public TopDocs DrillDown(Int64Range range) { // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(GetConfig()); q.Add(\"timestamp\", NumericRangeQuery.NewInt64Range(\"timestamp\", range.Min, range.Max, range.MinInclusive, range.MaxInclusive)); return searcher.Search(q, 10); } public void Dispose() { searcher?.IndexReader?.Dispose(); indexDir?.Dispose(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { using (RangeFacetsExample example = new RangeFacetsExample()) { example.Index(); Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); Console.WriteLine(example.Search()); Console.WriteLine(\"\\n\"); Console.WriteLine(\"Facet drill-down example (timestamp/Past six hours):\"); Console.WriteLine(\"---------------------------------------------\"); TopDocs hits = example.DrillDown(example.PAST_SIX_HOURS); Console.WriteLine(hits.TotalHits + \" TotalHits\"); } // Disposes example } } } Constructors | Improve this Doc View Source RangeFacetsExample() Constructor Declaration public RangeFacetsExample() Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source DrillDown(Int64Range) User drills down on the specified range. Declaration public TopDocs DrillDown(Int64Range range) Parameters Type Name Description Int64Range range Returns Type Description TopDocs | Improve this Doc View Source Index() Build the example index. Declaration public void Index() | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Search() User runs a query and counts facets. Declaration public FacetResult Search() Returns Type Description FacetResult Implements System.IDisposable"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleFacetsExample.html",
    "title": "Class SimpleFacetsExample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFacetsExample Shows simple usage of faceted indexing and search. Inheritance System.Object SimpleFacetsExample 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.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class SimpleFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of faceted indexing and search. /// </summary> public class SimpleFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Constructor</summary> public SimpleFacetsExample() { config.SetHierarchical(\"Publish Date\", true); } /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new FacetField(\"Author\", \"Bob\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"15\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"20\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"1\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Susan\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"7\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Frank\")); doc.Add(new FacetField(\"Publish Date\", \"1999\", \"5\", \"5\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> FacetsWithSearch() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); // Count both \"Publish Date\" and \"Author\" dimensions Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Date\")); return results; } // Disposes indexReader and taxoReader } /// <summary>User runs a query and counts facets only without collecting the matching documents.</summary> private IList<FacetResult> FacetsOnly() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: searcher.Search(new MatchAllDocsQuery(), null /*Filter */, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); // Count both \"Publish Date\" and \"Author\" dimensions Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Date\")); return results; } // Disposes indexReader and taxoReader } /// <summary> /// User drills down on 'Publish Date/2010', and we /// return facets for 'Author' /// </summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"Publish Date\", \"2010\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); FacetResult result = facets.GetTopChildren(10, \"Author\"); return result; } // Disposes indexReader and taxoReader } /// <summary> /// User drills down on 'Publish Date/2010', and we /// return facets for both 'Publish Date' and 'Author', /// using DrillSideways. /// </summary> private IList<FacetResult> DrillSideways() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"Publish Date\", \"2010\"); DrillSideways ds = new DrillSideways(searcher, config, taxoReader); DrillSidewaysResult result = ds.Search(q, 10); // Retrieve results IList<FacetResult> facets = result.Facets.GetAllDims(10); return facets; } // Disposes indexReader and taxoReader } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunFacetOnly() { Index(); return FacetsOnly(); } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return FacetsWithSearch(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the drill-sideways example.</summary> public IList<FacetResult> RunDrillSideways() { Index(); return DrillSideways(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); SimpleFacetsExample example1 = new SimpleFacetsExample(); IList<FacetResult> results1 = example1.RunFacetOnly(); Console.WriteLine(\"Author: \" + results1[0]); Console.WriteLine(\"Publish Date: \" + results1[1]); Console.WriteLine(\"Facet counting example (combined facets and search):\"); Console.WriteLine(\"-----------------------\"); SimpleFacetsExample example = new SimpleFacetsExample(); IList<FacetResult> results = example.RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Date: \" + results[1]); Console.WriteLine(); Console.WriteLine(\"Facet drill-down example (Publish Date/2010):\"); Console.WriteLine(\"---------------------------------------------\"); Console.WriteLine(\"Author: \" + example.RunDrillDown()); Console.WriteLine(); Console.WriteLine(\"Facet drill-sideways example (Publish Date/2010):\"); Console.WriteLine(\"---------------------------------------------\"); foreach (FacetResult result in example.RunDrillSideways()) { Console.WriteLine(result); } } } } Constructors | Improve this Doc View Source SimpleFacetsExample() Constructor Declaration public SimpleFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunDrillSideways() Runs the drill-sideways example. Declaration public IList<FacetResult> RunDrillSideways() Returns Type Description System.Collections.Generic.IList < FacetResult > | Improve this Doc View Source RunFacetOnly() Runs the search example. Declaration public IList<FacetResult> RunFacetOnly() Returns Type Description System.Collections.Generic.IList < FacetResult > | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleSortedSetFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleSortedSetFacetsExample.html",
    "title": "Class SimpleSortedSetFacetsExample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleSortedSetFacetsExample Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts . Inheritance System.Object SimpleSortedSetFacetsExample 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.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class SimpleSortedSetFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.SortedSet; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of faceted indexing and search /// using <see cref=\"SortedSetDocValuesFacetField\"/> and /// <see cref=\"SortedSetDocValuesFacetCounts\"/>. /// </summary> public class SimpleSortedSetFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { Document doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Bob\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2010\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Lisa\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2010\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Lisa\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2012\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Susan\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2012\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Frank\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"1999\")); indexWriter.AddDocument(config.Build(doc)); } // Disposes indexWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> Search() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); SortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader); // Aggregatses the facet counts FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); IList<FacetResult> results = new List<FacetResult>(); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Year\")); return results; } // Disposes indexWriter } /// <summary>User drills down on 'Publish Year/2010'.</summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); SortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader); // Now user drills down on Publish Year/2010: DrillDownQuery q = new DrillDownQuery(config); q.Add(\"Publish Year\", \"2010\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); FacetResult result = facets.GetTopChildren(10, \"Author\"); return result; } // Disposes indexReader } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return Search(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); SimpleSortedSetFacetsExample example = new SimpleSortedSetFacetsExample(); IList<FacetResult> results = example.RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Year: \" + results[0]); Console.WriteLine(); Console.WriteLine(\"Facet drill-down example (Publish Year/2010):\"); Console.WriteLine(\"---------------------------------------------\"); Console.WriteLine(\"Author: \" + example.RunDrillDown()); } } } Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.html",
    "title": "Namespace Lucene.Net.Demo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Demo <!-- 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. --> Demo applications for indexing and searching. Classes IndexFiles Index all text files under a directory. This is a command-line application demonstrating simple Lucene indexing. Run it with no command-line arguments for usage information. SearchFiles Simple command-line based search demo."
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.IndexFiles.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.IndexFiles.html",
    "title": "Class IndexFiles | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexFiles Index all text files under a directory. This is a command-line application demonstrating simple Lucene indexing. Run it with no command-line arguments for usage information. Inheritance System.Object IndexFiles 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.Demo Assembly : Lucene.Net.Demo.dll Syntax public class IndexFiles Methods | Improve this Doc View Source Main(String[]) Index all text files under a directory. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.SearchFiles.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.SearchFiles.html",
    "title": "Class SearchFiles | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchFiles Simple command-line based search demo. Inheritance System.Object SearchFiles 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.Demo Assembly : Lucene.Net.Demo.dll Syntax public class SearchFiles Methods | Improve this Doc View Source DoPagingSearch(IndexSearcher, Query, Int32, Boolean, Boolean) This demonstrates a typical paging search scenario, where the search engine presents pages of size n to the user. The user can then go to the next page if interested in the next hits. When the query is executed for the first time, then only enough results are collected to fill 5 result pages. If the user wants to page beyond this limit, then the query is executed another time and all hits are collected. Declaration public static void DoPagingSearch(IndexSearcher searcher, Query query, int hitsPerPage, bool raw, bool interactive) Parameters Type Name Description IndexSearcher searcher Query query System.Int32 hitsPerPage System.Boolean raw System.Boolean interactive | Improve this Doc View Source Main(String[]) Simple command-line based search demo. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Bindings.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Bindings.html",
    "title": "Class Bindings | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Bindings Binds variable names in expressions to actual data. Inheritance System.Object Bindings SimpleBindings 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.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public abstract class Bindings Remarks Binds variable names in expressions to actual data. These are typically DocValues fields/FieldCache, the document's relevance score, or other ValueSource s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source Bindings() Sole constructor. Declaration public Bindings() Remarks Sole constructor. (For invocation by subclass constructors, typically implicit.) Methods | Improve this Doc View Source GetScoreValueSource() Returns a ValueSource over relevance scores Declaration protected ValueSource GetScoreValueSource() Returns Type Description ValueSource | Improve this Doc View Source GetValueSource(String) Returns a ValueSource bound to the variable name. Declaration public abstract ValueSource GetValueSource(string name) Parameters Type Name Description System.String name Returns Type Description ValueSource"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Expression.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Expression.html",
    "title": "Class Expression | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Expression Base class that computes the value of an expression for a document. Inheritance System.Object Expression 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.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public abstract class Expression Remarks Base class that computes the value of an expression for a document. Example usage: // compile an expression: Expression expr = JavascriptCompiler.Compile(\"sqrt(_score) + ln(popularity)\"); // SimpleBindings just maps variables to SortField instances SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // create a sort field and sort by it (reverse order) Sort sort = new Sort(expr.GetSortField(bindings, true)); Query query = new TermQuery(new Term(\"body\", \"contents\")); searcher.Search(query, null, 10, sort); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source Expression(String, String[]) Creates a new Expression . Declaration public Expression(string sourceText, string[] variables) Parameters Type Name Description System.String sourceText Source text for the expression: e.g. ln(popularity) System.String [] variables Names of external variables referred to by the expression Properties | Improve this Doc View Source SourceText The original source text Declaration public string SourceText { get; } Property Value Type Description System.String | Improve this Doc View Source Variables Named variables referred to by this expression Declaration public string[] Variables { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source Evaluate(Int32, FunctionValues[]) Evaluates the expression for the given document. Declaration public abstract double Evaluate(int document, FunctionValues[] functionValues) Parameters Type Name Description System.Int32 document docId of the document to compute a value for FunctionValues [] functionValues FunctionValues for each element of Variables . Returns Type Description System.Double The computed value of the expression for the given document. Remarks Evaluates the expression for the given document. | Improve this Doc View Source GetRescorer(Bindings) Get a Rescorer , to rescore first-pass hits using this expression. Declaration public virtual Rescorer GetRescorer(Bindings bindings) Parameters Type Name Description Bindings bindings Returns Type Description Rescorer | Improve this Doc View Source GetSortField(Bindings, Boolean) Get a sort field which can be used to rank documents by this expression. Declaration public virtual SortField GetSortField(Bindings bindings, bool reverse) Parameters Type Name Description Bindings bindings System.Boolean reverse Returns Type Description SortField Remarks Get a sort field which can be used to rank documents by this expression. | Improve this Doc View Source GetValueSource(Bindings) Get a value source which can compute the value of this expression in the context of the given bindings. Declaration public virtual ValueSource GetValueSource(Bindings bindings) Parameters Type Name Description Bindings bindings Bindings to use for external values in this expression Returns Type Description ValueSource A value source which will evaluate this expression when used Remarks Get a value source which can compute the value of this expression in the context of the given bindings. See Also Compile(String)"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.html",
    "title": "Namespace Lucene.Net.Expressions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Expressions <!-- 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. --> expressions Expression - result of compiling an expression, which can evaluate it for a given document. Each expression can have external variables are resolved by {@code Bindings}. Bindings - abstraction for binding external variables to a way to get a value for those variables for a particular document (ValueSource). SimpleBindings - default implementation of bindings which provide easy ways to bind sort fields and other expressions to external variables Classes Bindings Binds variable names in expressions to actual data. Expression Base class that computes the value of an expression for a document. SimpleBindings Simple class that binds expression variable names to SortField s or other Expression s. Example usage: SimpleBindings bindings = new SimpleBindings(); // document's text relevance score bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // integer NumericDocValues field (or from FieldCache) bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // another expression bindings.Add(\"recency\", myRecencyExpression); // create a sort field in reverse order Sort sort = new Sort(expr.GetSortField(bindings, true)); This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.html",
    "title": "Namespace Lucene.Net.Expressions.JS | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Expressions.JS <!-- 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. --> Javascript expressions A Javascript expression is a numeric expression specified using an expression syntax that's based on JavaScript expressions. You can construct expressions using: Integer, floating point, hex and octal literals Arithmetic operators: + - * / % Bitwise operators: | & ^ ~ << >> >>> Boolean operators (including the ternary operator): && || ! ?: Comparison operators: < <= == >= > Common mathematic functions: abs ceil exp floor ln log2 log10 logn max min sqrt pow Trigonometric library functions: acosh acos asinh asin atanh atan atan2 cosh cos sinh sin tanh tan Distance functions: haversin Miscellaneous functions: min, max Arbitrary external variables - see Bindings JavaScript order of precedence rules apply for operators. Shortcut evaluation is used for logical operators—the second argument is only evaluated if the value of the expression cannot be determined after evaluating the first argument. For example, in the expression a || b , b is only evaluated if a is not true. To compile an expression, use <xref:Lucene.Net.Expressions.Js.JavascriptCompiler>. Classes JavascriptCompiler An expression compiler for javascript expressions. ParseException"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.JavascriptCompiler.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.JavascriptCompiler.html",
    "title": "Class JavascriptCompiler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JavascriptCompiler An expression compiler for javascript expressions. Inheritance System.Object JavascriptCompiler 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.Expressions.JS Assembly : Lucene.Net.Expressions.dll Syntax public class JavascriptCompiler Remarks An expression compiler for javascript expressions. Example: Expression foo = JavascriptCompiler.Compile(\"((0.3*popularity)/10.0)+(0.7*score)\"); See the Lucene.Net.Expressions.JS for the supported syntax and default functions. You can compile with an alternate set of functions via Compile(String, IDictionary<String, MethodInfo>) . For example: IDictionary<string, MethodInfo> functions = new Dictionary<string, MethodInfo>(); // add all the default functions functions.PutAll(JavascriptCompiler.DEFAULT_FUNCTIONS); // add sqrt() functions.Put(\"sqrt\", (typeof(Math)).GetMethod(\"Sqrt\", new Type[] { typeof(double) })); // call compile with customized function map Expression foo = JavascriptCompiler.Compile(\"sqrt(score)+ln(popularity)\", functions); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields | Improve this Doc View Source DEFAULT_FUNCTIONS The default set of functions available to expressions. Declaration public static readonly IDictionary<string, MethodInfo> DEFAULT_FUNCTIONS Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Reflection.MethodInfo > Remarks The default set of functions available to expressions. See the Lucene.Net.Expressions.JS for a list. Methods | Improve this Doc View Source Compile(String) Compiles the given expression. Declaration public static Expression Compile(string sourceText) Parameters Type Name Description System.String sourceText The expression to compile Returns Type Description Expression A new compiled expression Exceptions Type Condition ParseException on failure to compile | Improve this Doc View Source Compile(String, IDictionary<String, MethodInfo>) Compiles the given expression with the supplied custom functions. Declaration public static Expression Compile(string sourceText, IDictionary<string, MethodInfo> functions) Parameters Type Name Description System.String sourceText The expression to compile System.Collections.Generic.IDictionary < System.String , System.Reflection.MethodInfo > functions map of System.String names to functions Returns Type Description Expression A new compiled expression Remarks Compiles the given expression with the supplied custom functions. Functions must be public static , return System.Double and can take from zero to 256 System.Double parameters. Exceptions Type Condition ParseException on failure to compile"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.ParseException.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParseException Inheritance System.Object System.Exception ParseException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Expressions.JS Assembly : Lucene.Net.Expressions.dll Syntax public class ParseException : Exception, ISerializable Constructors | Improve this Doc View Source ParseException(String, Int32) Declaration public ParseException(string message, int charPositionInLine) Parameters Type Name Description System.String message System.Int32 charPositionInLine Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.SimpleBindings.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.SimpleBindings.html",
    "title": "Class SimpleBindings | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleBindings Simple class that binds expression variable names to SortField s or other Expression s. Example usage: SimpleBindings bindings = new SimpleBindings(); // document's text relevance score bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // integer NumericDocValues field (or from FieldCache) bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // another expression bindings.Add(\"recency\", myRecencyExpression); // create a sort field in reverse order Sort sort = new Sort(expr.GetSortField(bindings, true)); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Bindings SimpleBindings Inherited Members Bindings.GetScoreValueSource() 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.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public sealed class SimpleBindings : Bindings Constructors | Improve this Doc View Source SimpleBindings() Creates a new empty Bindings Declaration public SimpleBindings() Methods | Improve this Doc View Source Add(SortField) Adds a SortField to the bindings. Declaration public void Add(SortField sortField) Parameters Type Name Description SortField sortField Remarks Adds a SortField to the bindings. This can be used to reference a DocValuesField, a field from FieldCache, the document's score, etc. | Improve this Doc View Source Add(String, Expression) Adds an Expression to the bindings. Declaration public void Add(string name, Expression expression) Parameters Type Name Description System.String name Expression expression Remarks Adds an Expression to the bindings. This can be used to reference expressions from other expressions. | Improve this Doc View Source GetValueSource(String) Declaration public override ValueSource GetValueSource(string name) Parameters Type Name Description System.String name Returns Type Description ValueSource Overrides Bindings.GetValueSource(String) | Improve this Doc View Source Validate() Traverses the graph of bindings, checking there are no cycles or missing references Declaration public void Validate() Exceptions Type Condition System.ArgumentException if the bindings is inconsistent"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the 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 Document document This Document . 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 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 Document document This 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 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 Document document This 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 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 Document document This 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 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 Document document This 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 Document . Remarks Add a SortedSetDocValuesFacetField to your Document for every facet label to be indexed via SortedSetDocValues ."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- 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. --> Misc extensions of the Document/Field API. Classes DocumentExtensions LUCENENET specific extensions to the Document class."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillDownQuery.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillDownQuery.html",
    "title": "Class DrillDownQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DrillDownQuery A 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 Query by calling Term(String, String, String[]) , it is recommended to wrap it with ConstantScoreQuery and set the 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 Query DrillDownQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(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 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 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 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 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 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 Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader r) Parameters Type Name Description IndexReader r Returns Type Description Query Overrides Query.Rewrite(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 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)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSideways.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSideways.html",
    "title": "Class DrillSideways | Apache Lucene.NET 4.8.0-beta00008 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 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 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 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 IndexSearcher passed to constructor. Declaration protected readonly IndexSearcher m_searcher Field Value Type Description 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 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 ScoreSubDocsAtOnce() Override this and return true if your collector (e.g., 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 AcceptsDocsOutOfOrder : this will trick BooleanQuery into also scoring all subDocs at once. Declaration protected virtual bool ScoreSubDocsAtOnce() Returns Type Description System.Boolean | Improve this Doc View Source Search(DrillDownQuery, Filter, FieldDoc, Int32, Sort, Boolean, Boolean) Search, sorting by 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 Filter filter FieldDoc after System.Int32 topN 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 ICollector , and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, ICollector hitCollector) Parameters Type Name Description DrillDownQuery query 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 ScoreDoc after DrillDownQuery query System.Int32 topN Returns Type Description DrillSidewaysResult"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSidewaysResult.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSidewaysResult.html",
    "title": "Class DrillSidewaysResult | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DrillSidewaysResult Result of a drill sideways search, including the Facets and 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 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 TopDocs"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetField.html",
    "title": "Class FacetField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FacetField Add an instance of this to your Document for every facet label. NOTE: you must call Build(Document) before you add the document to IndexWriter . Inheritance System.Object Field FacetField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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 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 IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html",
    "title": "Class FacetResult | Apache Lucene.NET 4.8.0-beta00008 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()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Facets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Facets.html",
    "title": "Class Facets | Apache Lucene.NET 4.8.0-beta00008 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 public 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.Docs.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.Docs.html",
    "title": "Class FacetsCollector.Docs | Apache Lucene.NET 4.8.0-beta00008 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 public 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 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.html",
    "title": "Class FacetsCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FacetsCollector Collects hits for subsequent faceting. Once you've run a search and collect hits into this, instantiate one of the 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 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 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 ICollector . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n ICollector fc Returns Type Description 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 ICollector . Declaration public static TopFieldDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n Sort sort ICollector fc Returns Type Description 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 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 IndexSearcher searcher Query q Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore ICollector fc Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IndexSearcher, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q System.Int32 n ICollector fc Returns Type Description 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 ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n ICollector fc Returns Type Description 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 ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n Sort sort ICollector fc Returns Type Description 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 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 IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public virtual TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.MatchingDocs.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.MatchingDocs.html",
    "title": "Class FacetsCollector.MatchingDocs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FacetsCollector.MatchingDocs Holds the documents that were matched in the 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 AtomicReaderContext context 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 DocIdSet | Improve this Doc View Source Context Context for this segment. Declaration public AtomicReaderContext Context { get; } Property Value Type Description 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.DimConfig.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.DimConfig.html",
    "title": "Class FacetsConfig.DimConfig | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.html",
    "title": "Class FacetsConfig | Apache Lucene.NET 4.8.0-beta00008 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 IndexWriter , not the input one! Declaration public virtual Document Build(Document doc) Parameters Type Name Description Document doc Returns Type Description 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 IndexWriter , not the input one! Declaration public virtual Document Build(ITaxonomyWriter taxoWriter, Document doc) Parameters Type Name Description ITaxonomyWriter taxoWriter Document doc Returns Type Description Document | Improve this Doc View Source DedupAndEncode(Int32sRef) Encodes ordinals into a BytesRef ; expert: subclass can override this to change encoding. Declaration protected virtual BytesRef DedupAndEncode(Int32sRef ordinals) Parameters Type Name Description Int32sRef ordinals Returns Type Description 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 ProcessSSDVFacetFields(IDictionary<String, IList<SortedSetDocValuesFacetField>>, Document) Declaration public void ProcessSSDVFacetFields(IDictionary<string, IList<SortedSetDocValuesFacetField>> byField, Document doc) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < SortedSetDocValuesFacetField >> byField Document doc | 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 []"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.html",
    "title": "Namespace Lucene.Net.Facet | Apache Lucene.NET 4.8.0-beta00008 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. --> faceted search 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 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. Classes DrillDownQuery A 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 Query by calling Term(String, String, String[]) , it is recommended to wrap it with ConstantScoreQuery and set the 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 TopDocs . FacetField Add an instance of this to your Document for every facet label. NOTE: you must call Build(Document) before you add the document to 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 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 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. 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 TopOrdAndInt32Queue.OrdAndValue Holds a single entry. TopOrdAndSingleQueue Keeps highest results, first by largest System.Single value, then tie break by smallest ord. NOTE: This was TopOrdAndFloatQueue in Lucene TopOrdAndSingleQueue.OrdAndValue Holds a single entry."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.LabelAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.LabelAndValue.html",
    "title": "Class LabelAndValue | Apache Lucene.NET 4.8.0-beta00008 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()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.MultiFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.MultiFacets.html",
    "title": "Class MultiFacets | Apache Lucene.NET 4.8.0-beta00008 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[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.RandomSamplingFacetsCollector.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.RandomSamplingFacetsCollector.html",
    "title": "Class RandomSamplingFacetsCollector | Apache Lucene.NET 4.8.0-beta00008 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 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 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 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 ICollector"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRange.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRange.html",
    "title": "Class DoubleRange | Apache Lucene.NET 4.8.0-beta00008 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 Filter fastMatchFilter ValueSource valueSource Returns Type Description 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()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html",
    "title": "Class DoubleRangeFacetCounts | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleRangeFacetCounts Facets implementation that computes counts for dynamic double ranges from a provided ValueSource , using DoubleVal(Int32) or DoubleVal(Int32, 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 SingleFieldSource as the ValueSource ; if you used DoubleDocValuesField then pass 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 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 ValueSource . Declaration public DoubleRangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params DoubleRange[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits DoubleRange [] ranges | Improve this Doc View Source DoubleRangeFacetCounts(String, ValueSource, FacetsCollector, Filter, DoubleRange[]) Create RangeFacetCounts , using the provided 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 ValueSource valueSource FacetsCollector hits Filter fastMatchFilter DoubleRange [] ranges"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.html",
    "title": "Namespace Lucene.Net.Facet.Range | Apache Lucene.NET 4.8.0-beta00008 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 ValueSource , using DoubleVal(Int32) or DoubleVal(Int32, 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 SingleFieldSource as the ValueSource ; if you used DoubleDocValuesField then pass 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 ValueSource , using Int64Val(Int32) or Int64Val(Int32, 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64Range.html",
    "title": "Class Int64Range | Apache Lucene.NET 4.8.0-beta00008 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 Filter fastMatchFilter ValueSource valueSource Returns Type Description 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()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64RangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64RangeFacetCounts.html",
    "title": "Class Int64RangeFacetCounts | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64RangeFacetCounts Facets implementation that computes counts for dynamic long ranges from a provided ValueSource , using Int64Val(Int32) or Int64Val(Int32, 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 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 ValueSource . Declaration public Int64RangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params Int64Range[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits Int64Range [] ranges | Improve this Doc View Source Int64RangeFacetCounts(String, ValueSource, FacetsCollector, Filter, Int64Range[]) Create Int64RangeFacetCounts , using the provided 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 ValueSource valueSource FacetsCollector hits Filter fastMatchFilter Int64Range [] ranges"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Range.html",
    "title": "Class Range | Apache Lucene.NET 4.8.0-beta00008 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 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 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 ValueSource valueSource Returns Type Description Filter | Improve this Doc View Source GetFilter(Filter, ValueSource) Returns a new 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 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 Filter fastMatchFilter ValueSource valueSource Returns Type Description Filter"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.RangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.RangeFacetCounts.html",
    "title": "Class RangeFacetCounts | Apache Lucene.NET 4.8.0-beta00008 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 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 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[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html",
    "title": "Class DefaultSortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0-beta00008 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 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 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 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)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.html",
    "title": "Namespace Lucene.Net.Facet.SortedSet | Apache Lucene.NET 4.8.0-beta00008 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 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 SortedSetDocValues . NOTE: : tie-break is by unicode sort order @lucene.experimental SortedSetDocValuesFacetField Add an instance of this to your Document for every facet label to be indexed via SortedSetDocValues . SortedSetDocValuesReaderState Wraps a IndexReader and resolves ords using existing 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 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)."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html",
    "title": "Class SortedSetDocValuesFacetCounts | Apache Lucene.NET 4.8.0-beta00008 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 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 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[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html",
    "title": "Class SortedSetDocValuesFacetField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedSetDocValuesFacetField Add an instance of this to your Document for every facet label to be indexed via SortedSetDocValues . Inheritance System.Object Field SortedSetDocValuesFacetField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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 FieldType . Declaration public static readonly FieldType TYPE Field Value Type Description 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 Field.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html",
    "title": "Class SortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedSetDocValuesReaderState Wraps a IndexReader and resolves ords using existing 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 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 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 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html",
    "title": "Class SortedSetDocValuesReaderState.OrdRange | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.AssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.AssociationFacetField.html",
    "title": "Class AssociationFacetField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssociationFacetField Add an instance of this to your 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 Field AssociationFacetField Int32AssociationFacetField SingleAssociationFacetField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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 BytesRef assoc System.String dim System.String [] path Fields | Improve this Doc View Source TYPE Indexed FieldType . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Properties | Improve this Doc View Source Assoc Associated value. Declaration public BytesRef Assoc { get; } Property Value Type Description 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 Field.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html",
    "title": "Class CachedOrdinalsReader.CachedOrds | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CachedOrdinalsReader.CachedOrds Holds the cached ordinals in two parallel int[] arrays. Inheritance System.Object CachedOrdinalsReader.CachedOrds Implements 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 IAccountable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html",
    "title": "Class CachedOrdinalsReader | Apache Lucene.NET 4.8.0-beta00008 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 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 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 IAccountable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CategoryPath.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CategoryPath.html",
    "title": "Class CategoryPath | Apache Lucene.NET 4.8.0-beta00008 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 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 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() Returns Type Description System.Int32 | 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 Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html",
    "title": "Class DirectoryTaxonomyReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirectoryTaxonomyReader A TaxonomyReader which retrieves stored taxonomy information from a 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.Dispose(Boolean) 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 Directory . Declaration public DirectoryTaxonomyReader(Directory directory) Parameters Type Name Description Directory directory The 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 DoClose() Declaration protected override void DoClose() Overrides TaxonomyReader.DoClose() | 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 DirectoryReader from this IndexWriter . Declaration protected virtual DirectoryReader OpenIndexReader(IndexWriter writer) Parameters Type Name Description IndexWriter writer Returns Type Description DirectoryReader | Improve this Doc View Source OpenIndexReader(Directory) Open the DirectoryReader from this Directory . Declaration protected virtual DirectoryReader OpenIndexReader(Directory directory) Parameters Type Name Description Directory directory Returns Type Description 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.DiskOrdinalMap | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html",
    "title": "Class DirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter ITaxonomyWriter which uses a 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 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 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 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, OpenMode) Creates a new instance with a default cache as defined by DefaultTaxonomyWriterCache() . Declaration public DirectoryTaxonomyWriter(Directory directory, OpenMode openMode = OpenMode.CREATE_OR_APPEND) Parameters Type Name Description Directory directory 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 Directory directory The Directory in which to store the taxonomy. Note that the taxonomy is written directly to that directory (not to a subdirectory of it). 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 Directory of this taxonomy writer. Declaration public virtual Directory Directory { get; } Property Value Type Description 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 Directory taxoDir DirectoryTaxonomyWriter.IOrdinalMap map | Improve this Doc View Source CloseResources() A hook for extending classes to close additional resources that were used. The default implementation closes the IndexReader as well as the ITaxonomyWriterCache instances that were used. NOTE: if you override this method, you should include a base.CloseResources() call in your implementation. Declaration protected virtual void CloseResources() | Improve this Doc View Source Commit() Declaration public virtual void Commit() | Improve this Doc View Source CreateIndexWriterConfig(OpenMode) Create the IndexWriterConfig that would be used for opening the internal index writer. Extensions can configure the 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 OpenMode openMode see OpenMode Returns Type Description 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 IndexWriter , which commits whatever changes made to it to the underlying Directory . Declaration public void Dispose() | 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 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 Directory directory the Directory on top of which an IndexWriter should be opened. IndexWriterConfig config configuration for the internal index writer. Returns Type Description 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 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 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 Directory directory Implements ITaxonomyWriter System.IDisposable ITwoPhaseCommit"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html",
    "title": "Interface DirectoryTaxonomyWriter.IOrdinalMap | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.MemoryOrdinalMap | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.Directory | Apache Lucene.NET 4.8.0-beta00008 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 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 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 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 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)."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html",
    "title": "Class DocValuesOrdinalsReader | Apache Lucene.NET 4.8.0-beta00008 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 BytesRef buf Int32sRef ordinals | Improve this Doc View Source GetReader(AtomicReaderContext) Declaration public override OrdinalsReader.OrdinalsSegmentReader GetReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader Overrides OrdinalsReader.GetReader(AtomicReaderContext)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FacetLabel.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FacetLabel.html",
    "title": "Class FacetLabel | Apache Lucene.NET 4.8.0-beta00008 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() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html",
    "title": "Class FastTaxonomyFacetCounts | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy | Apache Lucene.NET 4.8.0-beta00008 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 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 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 LRUHashMap<TKey, TValue> LRUHashMap<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 LRUHashMap<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 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 IndexSearcher and TaxonomyReader SingleAssociationFacetField Add an instance of this to your 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 DoubleVal(Int32) and DoubleVal(Int32, Double[]) , for each facet label. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyFacetSumValueSource.ScoreValueSource 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.ChildrenIterator 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html",
    "title": "Class Int32AssociationFacetField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32AssociationFacetField Add an instance of this to your 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 Field AssociationFacetField Int32AssociationFacetField Implements IIndexableField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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 BytesRef b Returns Type Description System.Int32 | Improve this Doc View Source Int32ToBytesRef(Int32) Encodes an System.Int32 as a 4-byte 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 BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html",
    "title": "Class Int32TaxonomyFacets | Apache Lucene.NET 4.8.0-beta00008 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()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html",
    "title": "Interface ITaxonomyWriter | Apache Lucene.NET 4.8.0-beta00008 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() ITwoPhaseCommit.PrepareCommit() ITwoPhaseCommit.Commit() 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.LRUHashMap-2.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.LRUHashMap-2.html",
    "title": "Class LRUHashMap<TKey, TValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LRUHashMap<TKey, TValue> LRUHashMap<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 LRUHashMap<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 LRUHashMap<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 LRUHashMap<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 LRUHashMap(Int32) Create a new hash map with a bounded size and with least recently used entries removed. Declaration public LRUHashMap(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 LRUHashMap(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 LRUHashMap(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 int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public 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 ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source Limit allows changing the map's maximal number of elements which was defined at construction time. Note that if the map 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 ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public 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 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 void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public 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 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 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 TValue Get(TKey key) Parameters Type Name Description TKey key Returns Type Description TValue | Improve this Doc View Source GetEnumerator() Declaration public 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 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 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 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 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.html",
    "title": "Class OrdinalsReader | Apache Lucene.NET 4.8.0-beta00008 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 public 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 AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html",
    "title": "Class OrdinalsReader.OrdinalsSegmentReader | Apache Lucene.NET 4.8.0-beta00008 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 public 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 Int32sRef ordinals"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html",
    "title": "Class ParallelTaxonomyArrays | Apache Lucene.NET 4.8.0-beta00008 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 public 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 []"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html",
    "title": "Class PrintTaxonomyStats | Apache Lucene.NET 4.8.0-beta00008 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 class PrintTaxonomyStats Constructors | Improve this Doc View Source PrintTaxonomyStats() Sole constructor. Declaration public 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html",
    "title": "Class SearcherTaxonomyManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearcherTaxonomyManager Manages near-real-time reopen of both an IndexSearcher and a TaxonomyReader . NOTE : If you call ReplaceTaxonomy(Directory) then you must open a new SearcherTaxonomyManager afterwards. Inheritance System.Object ReferenceManager < SearcherTaxonomyManager.SearcherAndTaxonomy > SearcherTaxonomyManager Implements System.IDisposable Inherited Members ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Current ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Acquire() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Dispose() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Dispose(Boolean) ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.MaybeRefresh() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.MaybeRefreshBlocking() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.AfterMaybeRefresh() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Release(SearcherTaxonomyManager.SearcherAndTaxonomy) ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.RemoveListener(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 IndexWriter writer System.Boolean applyAllDeletes 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 MaybeRefresh() (on the ReaderManager ) in the same thread. Otherwise it could lead to an unsync'd IndexSearcher and TaxonomyReader pair. Declaration public SearcherTaxonomyManager(Directory indexDir, Directory taxoDir, SearcherFactory searcherFactory) Parameters Type Name Description Directory indexDir Directory taxoDir 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html",
    "title": "Class SearcherTaxonomyManager.SearcherAndTaxonomy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearcherTaxonomyManager.SearcherAndTaxonomy Holds a matched pair of 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 IndexSearcher searcher DirectoryTaxonomyReader taxonomyReader Properties | Improve this Doc View Source Searcher Point-in-time IndexSearcher . Declaration public IndexSearcher Searcher { get; } Property Value Type Description IndexSearcher | Improve this Doc View Source TaxonomyReader Matching point-in-time DirectoryTaxonomyReader . Declaration public DirectoryTaxonomyReader TaxonomyReader { get; } Property Value Type Description DirectoryTaxonomyReader"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html",
    "title": "Class SingleAssociationFacetField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleAssociationFacetField Add an instance of this to your 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 Field AssociationFacetField SingleAssociationFacetField Implements IIndexableField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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 BytesRef b Returns Type Description System.Single | Improve this Doc View Source SingleToBytesRef(Single) Encodes a System.Single as a 4-byte BytesRef . NOTE: This was floatToBytesRef() in Lucene Declaration public static BytesRef SingleToBytesRef(float v) Parameters Type Name Description System.Single v Returns Type Description BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html",
    "title": "Class SingleTaxonomyFacets | Apache Lucene.NET 4.8.0-beta00008 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()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html",
    "title": "Class TaxonomyFacetCounts | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html",
    "title": "Class TaxonomyFacets | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html",
    "title": "Class TaxonomyFacetSumInt32Associations | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html",
    "title": "Class TaxonomyFacetSumSingleAssociations | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource Aggregates sum of values from DoubleVal(Int32) and DoubleVal(Int32, 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 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 ValueSource valueSource | Improve this Doc View Source TaxonomyFacetSumValueSource(TaxonomyReader, FacetsConfig, FacetsCollector, ValueSource) Aggreggates float facet values from the provided 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 ValueSource valueSource"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource.ScoreValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource.ScoreValueSource 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 ValueSource TaxonomyFacetSumValueSource.ScoreValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenIterator.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenIterator.html",
    "title": "Class TaxonomyReader.ChildrenIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TaxonomyReader.ChildrenIterator An iterator over a category's children. Inheritance System.Object TaxonomyReader.ChildrenIterator 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 ChildrenIterator Methods | Improve this Doc View Source Next() Return the next child ordinal, or INVALID_ORDINAL if no more children. Declaration public virtual int Next() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.html",
    "title": "Class TaxonomyReader | Apache Lucene.NET 4.8.0-beta00008 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 public 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) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoClose() performs the actual task of closing the resources that are used by the taxonomy reader. Declaration protected abstract void DoClose() | 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 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.ChildrenIterator GetChildren(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description TaxonomyReader.ChildrenIterator | 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html",
    "title": "Class Cl2oTaxonomyWriterCache | Apache Lucene.NET 4.8.0-beta00008 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 virtual void Dispose() | 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html",
    "title": "Class CollisionMap | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html",
    "title": "Class CompactLabelToOrdinal | Apache Lucene.NET 4.8.0-beta00008 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)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.WriterCache | Apache Lucene.NET 4.8.0-beta00008 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 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."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html",
    "title": "Interface ITaxonomyWriterCache | Apache Lucene.NET 4.8.0-beta00008 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html",
    "title": "Class LabelToOrdinal | Apache Lucene.NET 4.8.0-beta00008 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 public 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html",
    "title": "Class LruTaxonomyWriterCache | Apache Lucene.NET 4.8.0-beta00008 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 virtual void Dispose() | 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"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html",
    "title": "Enum LruTaxonomyWriterCache.LRUType | Apache Lucene.NET 4.8.0-beta00008 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."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLRU.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLRU.html",
    "title": "Class NameHashInt32CacheLRU | Apache Lucene.NET 4.8.0-beta00008 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 NameInt32CacheLRU NameHashInt32CacheLRU Inherited Members NameInt32CacheLRU.Limit NameInt32CacheLRU.Count 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 : NameInt32CacheLRU"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLRU.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLRU.html",
    "title": "Class NameInt32CacheLRU | Apache Lucene.NET 4.8.0-beta00008 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 NameHashInt32CacheLRU 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 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 virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Limit Maximum number of cache entries before eviction. Declaration public virtual int Limit { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.html",
    "title": "Class TopOrdAndInt32Queue | Apache Lucene.NET 4.8.0-beta00008 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 PriorityQueue < TopOrdAndInt32Queue.OrdAndValue > TopOrdAndInt32Queue Inherited Members PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.GetSentinelObject() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Add(TopOrdAndInt32Queue.OrdAndValue) PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.InsertWithOverflow(TopOrdAndInt32Queue.OrdAndValue) PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Top PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Pop() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.UpdateTop() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Count PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Clear() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.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<TopOrdAndInt32Queue.OrdAndValue> 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(TopOrdAndInt32Queue.OrdAndValue, TopOrdAndInt32Queue.OrdAndValue) Declaration protected override bool LessThan(TopOrdAndInt32Queue.OrdAndValue a, TopOrdAndInt32Queue.OrdAndValue b) Parameters Type Name Description TopOrdAndInt32Queue.OrdAndValue a TopOrdAndInt32Queue.OrdAndValue b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue>.LessThan(Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue, Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue.html",
    "title": "Class TopOrdAndInt32Queue.OrdAndValue | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopOrdAndInt32Queue.OrdAndValue Holds a single entry. Inheritance System.Object TopOrdAndInt32Queue.OrdAndValue 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 OrdAndValue Constructors | Improve this Doc View Source OrdAndValue() Default constructor. Declaration public OrdAndValue() Properties | Improve this Doc View Source Ord Ordinal of the entry. Declaration public int Ord { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Value associated with the ordinal. Declaration public int Value { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.html",
    "title": "Class TopOrdAndSingleQueue | Apache Lucene.NET 4.8.0-beta00008 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 PriorityQueue < TopOrdAndSingleQueue.OrdAndValue > TopOrdAndSingleQueue Inherited Members PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.GetSentinelObject() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Add(TopOrdAndSingleQueue.OrdAndValue) PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.InsertWithOverflow(TopOrdAndSingleQueue.OrdAndValue) PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Top PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Pop() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.UpdateTop() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Count PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Clear() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.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<TopOrdAndSingleQueue.OrdAndValue> 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(TopOrdAndSingleQueue.OrdAndValue, TopOrdAndSingleQueue.OrdAndValue) Declaration protected override bool LessThan(TopOrdAndSingleQueue.OrdAndValue a, TopOrdAndSingleQueue.OrdAndValue b) Parameters Type Name Description TopOrdAndSingleQueue.OrdAndValue a TopOrdAndSingleQueue.OrdAndValue b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue>.LessThan(Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue, Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue.html",
    "title": "Class TopOrdAndSingleQueue.OrdAndValue | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopOrdAndSingleQueue.OrdAndValue Holds a single entry. Inheritance System.Object TopOrdAndSingleQueue.OrdAndValue 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 OrdAndValue Constructors | Improve this Doc View Source OrdAndValue() Default constructor. Declaration public OrdAndValue() Properties | Improve this Doc View Source Ord Ordinal of the entry. Declaration public int Ord { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Value associated with the ordinal. Declaration public float Value { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html",
    "title": "Class AbstractAllGroupHeadsCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration public abstract bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public abstract int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source RetrieveGroupHeads() Declaration public abstract int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public abstract FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description FixedBitSet a FixedBitSet containing all group heads. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to ), should save the passed-in Scorer and call scorer.Score() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html",
    "title": "Class AbstractAllGroupHeadsCollector_GroupHead | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector_GroupHead Remarks LUCENENET: moved this class from being a nested class of AbstractAllGroupHeadsCollector<GH> , made it non-generic so the generic closing type doesn't need to be specified in classes that use AbstractAllGroupHeadsCollector_GroupHead as a generic closing type, and renamed it from GroupHead to AbstractAllGroupHeadsCollector_GroupHead to avoid naming conflicts with nested classes named GroupHead in derived classes of AbstractAllGroupHeadsCollector . Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector_GroupHead(Int32) Declaration protected AbstractAllGroupHeadsCollector_GroupHead(int doc) Parameters Type Name Description System.Int32 doc Properties | Improve this Doc View Source Doc Declaration public int Doc { get; protected set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Compare(Int32, Int32) Compares the specified document for a specified comparer against the current most relevant document. Declaration public abstract int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX The comparer index of the specified comparer. System.Int32 doc The specified document. Returns Type Description System.Int32 -1 if the specified document wasn't competitive against the current most relevant document, 1 if the specified document was competitive against the current most relevant document. Otherwise 0. Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source UpdateDocHead(Int32) Updates the current most relevant document with the specified document. Declaration public abstract void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc The specified document Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector<GH> FunctionAllGroupHeadsCollector TermAllGroupHeadsCollector<GH> Implements ICollector Inherited Members AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector(Int32) Declaration protected AbstractAllGroupHeadsCollector(int numberOfSorts) Parameters Type Name Description System.Int32 numberOfSorts Fields | Improve this Doc View Source m_compIDXEnd Declaration protected readonly int m_compIDXEnd Field Value Type Description System.Int32 | Improve this Doc View Source m_reversed Declaration protected readonly int[] m_reversed Field Value Type Description System.Int32 [] | Improve this Doc View Source m_temporalResult Declaration protected readonly AbstractAllGroupHeadsCollector<GH>.TemporalResult m_temporalResult Field Value Type Description AbstractAllGroupHeadsCollector.TemporalResult <> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public override bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides AbstractAllGroupHeadsCollector.AcceptsDocsOutOfOrder | Improve this Doc View Source CollectedGroupHeads Returns the collected group heads. Subsequent calls should return the same group heads. Declaration protected abstract ICollection<GH> CollectedGroupHeads { get; } Property Value Type Description System.Collections.Generic.ICollection <GH> the collected group heads | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public override int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Overrides AbstractAllGroupHeadsCollector.GroupHeadsCount Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector.Collect(Int32) | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeadAndAddIfNotExist(Int32) Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source RetrieveGroupHeads() Declaration public override int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads() | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public override FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description FixedBitSet a FixedBitSet containing all group heads. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads(Int32) Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. Inheritance System.Object AbstractAllGroupHeadsCollector<GH>.TemporalResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected class TemporalResult Properties | Improve this Doc View Source GroupHead Declaration public GH GroupHead { get; set; } Property Value Type Description GH | Improve this Doc View Source Stop Declaration public bool Stop { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html",
    "title": "Class AbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector<TGroupValue> FunctionAllGroupsCollector TermAllGroupsCollector Implements IAbstractAllGroupsCollector <TGroupValue> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupsCollector<TGroupValue> : IAbstractAllGroupsCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration public virtual int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a BytesRef representing a group value. Declaration public abstract IEnumerable<TGroupValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> the group values Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html",
    "title": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. Inheritance System.Object AbstractDistinctValuesCollector.GroupCount<TGroupValue> FunctionDistinctValuesCollector.GroupCount TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class GroupCount<TGroupValue> : AbstractDistinctValuesCollector.IGroupCount<TGroupValue> Type Parameters Name Description TGroupValue Remarks LUCENENET - removed this class from being a nested class of AbstractDistinctValuesCollector<GC> and renamed from GroupCount to AbstractGroupCount Constructors | Improve this Doc View Source GroupCount(TGroupValue) Declaration public GroupCount(TGroupValue groupValue) Parameters Type Name Description TGroupValue groupValue Properties | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; protected set; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration public IEnumerable<TGroupValue> UniqueValues { get; protected set; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html",
    "title": "Class AbstractDistinctValuesCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). Inheritance System.Object AbstractDistinctValuesCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class AbstractDistinctValuesCollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html",
    "title": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupCount<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration IEnumerable<TGroupValue> UniqueValues { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html",
    "title": "Class AbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector<GC> FunctionDistinctValuesCollector TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector <GC> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractDistinctValuesCollector<GC> : IAbstractDistinctValuesCollector<GC>, ICollector where GC : AbstractDistinctValuesCollector.IGroupCount<object> Type Parameters Name Description GC Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration public abstract IEnumerable<GC> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <GC> all unique values for each top N group Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html",
    "title": "Class AbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractFirstPassGroupingCollector<TGroupValue> FirstPassGroupingCollector is the first of two passes necessary to collect grouped hits. This pass gathers the top N sorted groups. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector<TGroupValue> FunctionFirstPassGroupingCollector TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector <TGroupValue> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractFirstPassGroupingCollector<TGroupValue> : IAbstractFirstPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractFirstPassGroupingCollector(Sort, Int32) Create the first pass collector. Declaration public AbstractFirstPassGroupingCollector(Sort groupSort, int topNGroups) Parameters Type Name Description Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use Sort.RELEVANCE. System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException If I/O related errors occur Fields | Improve this Doc View Source m_orderedGroups Declaration protected SortedSet<CollectedSearchGroup<TGroupValue>> m_orderedGroups Field Value Type Description J2N.Collections.Generic.SortedSet < CollectedSearchGroup <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CopyDocGroupValue(TGroupValue, TGroupValue) Returns a copy of the specified group value by creating a new instance and copying the value from the specified groupValue in the new instance. Or optionally the reuse argument can be used to copy the group value in. Declaration protected abstract TGroupValue CopyDocGroupValue(TGroupValue groupValue, TGroupValue reuse) Parameters Type Name Description TGroupValue groupValue The group value to copy TGroupValue reuse Optionally a reuse instance to prevent a new instance creation Returns Type Description TGroupValue a copy of the specified group value | Improve this Doc View Source GetDocGroupValue(Int32) Returns the group value for the specified doc. Declaration protected abstract TGroupValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description TGroupValue the group value for the specified doc | Improve this Doc View Source GetTopGroups(Int32, Boolean) Returns top groups, starting from offset. This may return null, if no groups were collected, or if the number of unique groups collected is <= offset. Declaration public virtual IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html",
    "title": "Class AbstractGroupFacetCollector.AbstractSegmentResult | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. Inheritance System.Object AbstractGroupFacetCollector.AbstractSegmentResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected abstract class AbstractSegmentResult Remarks LUCENENET NOTE: Renamed from SegmentResult to AbstractSegmentResult to avoid naming conflicts with subclasses. Constructors | Improve this Doc View Source AbstractSegmentResult(Int32[], Int32, Int32, Int32) Declaration protected AbstractSegmentResult(int[] counts, int total, int missing, int maxTermPos) Parameters Type Name Description System.Int32 [] counts System.Int32 total System.Int32 missing System.Int32 maxTermPos Fields | Improve this Doc View Source m_counts Declaration protected readonly int[] m_counts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_maxTermPos Declaration protected readonly int m_maxTermPos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergePos Declaration protected int m_mergePos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeTerm Declaration protected BytesRef m_mergeTerm Field Value Type Description BytesRef | Improve this Doc View Source m_missing Declaration protected readonly int m_missing Field Value Type Description System.Int32 | Improve this Doc View Source m_total Declaration protected readonly int m_total Field Value Type Description System.Int32 Methods | Improve this Doc View Source NextTerm() Go to next term in this AbstractGroupFacetCollector.AbstractSegmentResult in order to retrieve the grouped facet counts. Declaration protected abstract void NextTerm() Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html",
    "title": "Class AbstractGroupFacetCollector.FacetEntry | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. Inheritance System.Object AbstractGroupFacetCollector.FacetEntry Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class FacetEntry Constructors | Improve this Doc View Source FacetEntry(BytesRef, Int32) Declaration public FacetEntry(BytesRef value, int count) Parameters Type Name Description BytesRef value System.Int32 count Properties | Improve this Doc View Source Count Gets the count (number of groups) of this facet entry. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Gets the value of this facet entry Declaration public virtual BytesRef Value { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html",
    "title": "Class AbstractGroupFacetCollector.GroupedFacetResult | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. Inheritance System.Object AbstractGroupFacetCollector.GroupedFacetResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupedFacetResult Constructors | Improve this Doc View Source GroupedFacetResult(Int32, Int32, Boolean, Int32, Int32) Declaration public GroupedFacetResult(int size, int minCount, bool orderByCount, int totalCount, int totalMissingCount) Parameters Type Name Description System.Int32 size System.Int32 minCount System.Boolean orderByCount System.Int32 totalCount System.Int32 totalMissingCount Properties | Improve this Doc View Source TotalCount Gets the sum of all facet entries counts. Declaration public virtual int TotalCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalMissingCount Gets the number of groups that didn't have a facet value. Declaration public virtual int TotalMissingCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddFacetCount(BytesRef, Int32) Declaration public virtual void AddFacetCount(BytesRef facetValue, int count) Parameters Type Name Description BytesRef facetValue System.Int32 count | Improve this Doc View Source GetFacetEntries(Int32, Int32) Returns a list of facet entries to be rendered based on the specified offset and limit. The facet entries are retrieved from the facet entries collected during merging. Declaration public virtual IList<AbstractGroupFacetCollector.FacetEntry> GetFacetEntries(int offset, int limit) Parameters Type Name Description System.Int32 offset The offset in the collected facet entries during merging System.Int32 limit The number of facets to return starting from the offset. Returns Type Description System.Collections.Generic.IList < AbstractGroupFacetCollector.FacetEntry > a list of facet entries to be rendered based on the specified offset and limit"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html",
    "title": "Class AbstractGroupFacetCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractGroupFacetCollector : ICollector Constructors | Improve this Doc View Source AbstractGroupFacetCollector(String, String, BytesRef) Declaration protected AbstractGroupFacetCollector(string groupField, string facetField, BytesRef facetPrefix) Parameters Type Name Description System.String groupField System.String facetField BytesRef facetPrefix Fields | Improve this Doc View Source m_endFacetOrd Declaration protected int m_endFacetOrd Field Value Type Description System.Int32 | Improve this Doc View Source m_facetField Declaration protected readonly string m_facetField Field Value Type Description System.String | Improve this Doc View Source m_facetPrefix Declaration protected readonly BytesRef m_facetPrefix Field Value Type Description BytesRef | Improve this Doc View Source m_groupField Declaration protected readonly string m_groupField Field Value Type Description System.String | Improve this Doc View Source m_segmentFacetCounts Declaration protected int[] m_segmentFacetCounts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_segmentResults Declaration protected readonly IList<AbstractGroupFacetCollector.AbstractSegmentResult> m_segmentResults Field Value Type Description System.Collections.Generic.IList < AbstractGroupFacetCollector.AbstractSegmentResult > | Improve this Doc View Source m_segmentTotalCount Declaration protected int m_segmentTotalCount Field Value Type Description System.Int32 | Improve this Doc View Source m_startFacetOrd Declaration protected int m_startFacetOrd Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CreateSegmentResult() Declaration protected abstract AbstractGroupFacetCollector.AbstractSegmentResult CreateSegmentResult() Returns Type Description AbstractGroupFacetCollector.AbstractSegmentResult | Improve this Doc View Source MergeSegmentResults(Int32, Int32, Boolean) Returns grouped facet results that were computed over zero or more segments. Grouped facet counts are merged from zero or more segment results. Declaration public virtual AbstractGroupFacetCollector.GroupedFacetResult MergeSegmentResults(int size, int minCount, bool orderByCount) Parameters Type Name Description System.Int32 size The total number of facets to include. This is typically offset + limit System.Int32 minCount The minimum count a facet entry should have to be included in the grouped facet result System.Boolean orderByCount Whether to sort the facet entries by facet entry count. If false then the facets are sorted lexicographically in ascending order. Returns Type Description AbstractGroupFacetCollector.GroupedFacetResult grouped facet results Exceptions Type Condition System.IO.IOException If I/O related errors occur during merging segment grouped facet counts. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html",
    "title": "Class AbstractSecondPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. Inheritance System.Object AbstractSecondPassGroupingCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class AbstractSecondPassGroupingCollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html",
    "title": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Inheritance System.Object AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroupDocs<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source SearchGroupDocs(TGroupValue, ITopDocsCollector) Declaration public SearchGroupDocs(TGroupValue groupValue, ITopDocsCollector collector) Parameters Type Name Description TGroupValue groupValue ITopDocsCollector collector Properties | Improve this Doc View Source Collector Declaration public ITopDocsCollector Collector { get; } Property Value Type Description ITopDocsCollector | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html",
    "title": "Class AbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector<TGroupValue> FunctionSecondPassGroupingCollector TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector <TGroupValue> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractSecondPassGroupingCollector<TGroupValue> : IAbstractSecondPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration public AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> groups Sort groupSort Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Fields | Improve this Doc View Source m_groupDocs Declaration protected AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>[] m_groupDocs Field Value Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>[] | Improve this Doc View Source m_groupMap Declaration protected readonly IDictionary<TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>> m_groupMap Field Value Type Description System.Collections.Generic.IDictionary <TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Int32) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue> | Improve this Doc View Source RetrieveGroup(Int32) Returns the group the specified doc belongs to or null if no group could be retrieved. Declaration protected abstract AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue> the group the specified doc belongs to or null if no group could be retrieved Exceptions Type Condition System.IO.IOException If an I/O related error occurred | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.BlockGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.BlockGroupingCollector.html",
    "title": "Class BlockGroupingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BlockGroupingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class BlockGroupingCollector : ICollector Constructors | Improve this Doc View Source BlockGroupingCollector(Sort, Int32, Boolean, Filter) Create the single pass collector. Declaration public BlockGroupingCollector(Sort groupSort, int topNGroups, bool needsScores, Filter lastDocPerGroup) Parameters Type Name Description Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. System.Boolean needsScores true if the collected documents require scores, either because relevance is included in the withinGroupSort or because you plan to pass true for either GetScores or GetMaxScores to GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Filter lastDocPerGroup a Filter that marks the last document in each group. Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<object> GetTopGroups(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Sort withinGroupSort The Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups < System.Object > | Improve this Doc View Source GetTopGroups<TGroupValue>(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups<TGroupValue>(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Sort withinGroupSort The Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue The expected return type for group value | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html",
    "title": "Class CollectedSearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SearchGroup <TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> ICollectedSearchGroup Inherited Members SearchGroup<TGroupValue>.GroupValue SearchGroup<TGroupValue>.SortValues SearchGroup<TGroupValue>.ToString() SearchGroup<TGroupValue>.Equals(Object) SearchGroup<TGroupValue>.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class CollectedSearchGroup<TGroupValue> : SearchGroup<TGroupValue>, ISearchGroup<TGroupValue>, ICollectedSearchGroup Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source ComparerSlot Declaration public int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration public int TopDoc { get; } Property Value Type Description System.Int32 Implements ISearchGroup<TGroupValue> ICollectedSearchGroup"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html",
    "title": "Class FunctionAllGroupHeadsCollector.GroupHead | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Inherited Members AbstractAllGroupHeadsCollector_GroupHead.Doc System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupHead : AbstractAllGroupHeadsCollector_GroupHead Properties | Improve this Doc View Source GroupValue Declaration public MutableValue GroupValue { get; } Property Value Type Description MutableValue Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX System.Int32 doc Returns Type Description System.Int32 Overrides AbstractAllGroupHeadsCollector_GroupHead.Compare(Int32, Int32) | Improve this Doc View Source UpdateDocHead(Int32) Declaration public override void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector_GroupHead.UpdateDocHead(Int32)"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html",
    "title": "Class FunctionAllGroupHeadsCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector < FunctionAllGroupHeadsCollector.GroupHead > FunctionAllGroupHeadsCollector Implements ICollector Inherited Members AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_reversed AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_compIDXEnd AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_temporalResult AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.GroupHeadsCount AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.Collect(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupHeadsCollector : AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupHeadsCollector(ValueSource, IDictionary, Sort) Constructs a FunctionAllGroupHeadsCollector instance. Declaration public FunctionAllGroupHeadsCollector(ValueSource groupBy, IDictionary vsContext, Sort sortWithinGroup) Parameters Type Name Description ValueSource groupBy The ValueSource to group by System.Collections.IDictionary vsContext The ValueSource context Sort sortWithinGroup The sort within a group Properties | Improve this Doc View Source CollectedGroupHeads Declaration protected override ICollection<FunctionAllGroupHeadsCollector.GroupHead> CollectedGroupHeads { get; } Property Value Type Description System.Collections.Generic.ICollection < FunctionAllGroupHeadsCollector.GroupHead > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.CollectedGroupHeads Methods | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Declaration protected override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeadAndAddIfNotExist(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides AbstractAllGroupHeadsCollector.SetScorer(Scorer) Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html",
    "title": "Class FunctionAllGroupsCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses ValueSource and FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < MutableValue > FunctionAllGroupsCollector Implements IAbstractAllGroupsCollector < MutableValue > ICollector Inherited Members AbstractAllGroupsCollector<MutableValue>.GroupCount AbstractAllGroupsCollector<MutableValue>.SetScorer(Scorer) AbstractAllGroupsCollector<MutableValue>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupsCollector : AbstractAllGroupsCollector<MutableValue>, IAbstractAllGroupsCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupsCollector(ValueSource, IDictionary) Constructs a FunctionAllGroupsCollector instance. Declaration public FunctionAllGroupsCollector(ValueSource groupBy, IDictionary vsContext) Parameters Type Name Description ValueSource groupBy The ValueSource to group by System.Collections.IDictionary vsContext The ValueSource context Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<MutableValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html",
    "title": "Class FunctionDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < MutableValue > FunctionDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < MutableValue > Inherited Members AbstractDistinctValuesCollector.GroupCount<MutableValue>.GroupValue AbstractDistinctValuesCollector.GroupCount<MutableValue>.UniqueValues System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<MutableValue>, AbstractDistinctValuesCollector.IGroupCount<MutableValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html",
    "title": "Class FunctionDistinctValuesCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > FunctionDistinctValuesCollector Implements IAbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > ICollector Inherited Members AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionDistinctValuesCollector : AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source FunctionDistinctValuesCollector(IDictionary, ValueSource, ValueSource, IEnumerable<ISearchGroup<MutableValue>>) Declaration public FunctionDistinctValuesCollector(IDictionary vsContext, ValueSource groupSource, ValueSource countSource, IEnumerable<ISearchGroup<MutableValue>> groups) Parameters Type Name Description System.Collections.IDictionary vsContext ValueSource groupSource ValueSource countSource System.Collections.Generic.IEnumerable < ISearchGroup < MutableValue >> groups Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<FunctionDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < FunctionDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html",
    "title": "Class FunctionFirstPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < MutableValue > FunctionFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < MutableValue > ICollector Inherited Members AbstractFirstPassGroupingCollector<MutableValue>.m_orderedGroups AbstractFirstPassGroupingCollector<MutableValue>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<MutableValue>.Collect(Int32) AbstractFirstPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<MutableValue>, IAbstractFirstPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionFirstPassGroupingCollector(ValueSource, IDictionary, Sort, Int32) Creates a first pass collector. Declaration public FunctionFirstPassGroupingCollector(ValueSource groupByVS, IDictionary vsContext, Sort groupSort, int topNGroups) Parameters Type Name Description ValueSource groupByVS The ValueSource instance to group by System.Collections.IDictionary vsContext The ValueSource context Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source CopyDocGroupValue(MutableValue, MutableValue) Declaration protected override MutableValue CopyDocGroupValue(MutableValue groupValue, MutableValue reuse) Parameters Type Name Description MutableValue groupValue MutableValue reuse Returns Type Description MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.CopyDocGroupValue(Lucene.Net.Util.Mutable.MutableValue, Lucene.Net.Util.Mutable.MutableValue) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override MutableValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html",
    "title": "Class FunctionSecondPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < MutableValue > FunctionSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < MutableValue > ICollector Inherited Members AbstractSecondPassGroupingCollector<MutableValue>.m_groupMap AbstractSecondPassGroupingCollector<MutableValue>.m_groupDocs AbstractSecondPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<MutableValue>.Collect(Int32) AbstractSecondPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<MutableValue>.GetTopGroups(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<MutableValue>, IAbstractSecondPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean, ValueSource, IDictionary) Constructs a FunctionSecondPassGroupingCollector instance. Declaration public FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>> searchGroups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields, ValueSource groupByVS, IDictionary vsContext) Parameters Type Name Description System.Collections.Generic.IEnumerable < ISearchGroup < MutableValue >> searchGroups The SearchGroup<TGroupValue> instances collected during the first phase. Sort groupSort The group sort Sort withinGroupSort The sort inside a group System.Int32 maxDocsPerGroup The maximum number of documents to collect inside a group System.Boolean getScores Whether to include the scores System.Boolean getMaxScores Whether to include the maximum score System.Boolean fillSortFields Whether to fill the sort values in WithinGroupSort ValueSource groupByVS The ValueSource to group by System.Collections.IDictionary vsContext The value source context Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<MutableValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Function | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Function <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for grouping by ValueSource . Classes FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses ValueSource and FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupDocs-1.html",
    "title": "Class GroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GroupDocs<TGroupValue> Represents one group in the results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object GroupDocs<TGroupValue> Implements IGroupDocs <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupDocs<TGroupValue> : IGroupDocs<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source GroupDocs(Single, Single, Int32, ScoreDoc[], TGroupValue, Object[]) Declaration public GroupDocs(float score, float maxScore, int totalHits, ScoreDoc[] scoreDocs, TGroupValue groupValue, object[] groupSortValues) Parameters Type Name Description System.Single score System.Single maxScore System.Int32 totalHits ScoreDoc [] scoreDocs TGroupValue groupValue System.Object [] groupSortValues Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration public object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration public float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration public ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration public int TotalHits { get; } Property Value Type Description System.Int32 Implements IGroupDocs<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupingSearch.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupingSearch.html",
    "title": "Class GroupingSearch | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object GroupingSearch Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupingSearch Constructors | Improve this Doc View Source GroupingSearch(ValueSource, IDictionary) Constructs a GroupingSearch instance that groups documents by function using a ValueSource instance. Declaration public GroupingSearch(ValueSource groupFunction, IDictionary valueSourceContext) Parameters Type Name Description ValueSource groupFunction The function to group by specified as ValueSource System.Collections.IDictionary valueSourceContext The context of the specified groupFunction | Improve this Doc View Source GroupingSearch(Filter) Constructor for grouping documents by doc block. This constructor can only be used when documents belonging in a group are indexed in one block. Declaration public GroupingSearch(Filter groupEndDocs) Parameters Type Name Description Filter groupEndDocs The filter that marks the last document in all doc blocks | Improve this Doc View Source GroupingSearch(String) Constructs a GroupingSearch instance that groups documents by index terms using the FieldCache . The group field can only have one token per document. This means that the field must not be analysed. Declaration public GroupingSearch(string groupField) Parameters Type Name Description System.String groupField The name of the field to group by. Methods | Improve this Doc View Source DisableCaching() Disables any enabled cache. Declaration public virtual GroupingSearch DisableCaching() Returns Type Description GroupingSearch this | Improve this Doc View Source GetAllGroupHeads() Returns the matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set. Declaration public virtual IBits GetAllGroupHeads() Returns Type Description IBits The matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set | Improve this Doc View Source GetAllMatchingGroups() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection GetAllMatchingGroups() Returns Type Description System.Collections.ICollection all matching groups are returned, or an empty collection Remarks LUCENENET specific used to get the groups if the type is unknown or if the code expects any type, since GetAllMatchingGroups<T>() will throw an exception if the return type is incorrect. | Improve this Doc View Source GetAllMatchingGroups<T>() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection<T> GetAllMatchingGroups<T>() Returns Type Description System.Collections.Generic.ICollection <T> all matching groups are returned, or an empty collection Type Parameters Name Description T The group value type. This can be a BytesRef or a MutableValue instance. If grouping by doc block this the group value is always null . | Improve this Doc View Source GroupByDocBlock<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByDocBlock<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher Filter filter Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source GroupByFieldOrFunction<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByFieldOrFunction<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher Filter filter Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source Search(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Filter filter The filter to execute with the grouping Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Filter filter The filter to execute with the grouping Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source SetAllGroupHeads(Boolean) Whether to compute all group heads (most relevant document per group) matching the query. This feature isn't enabled when grouping by doc block. Declaration public virtual GroupingSearch SetAllGroupHeads(bool allGroupHeads) Parameters Type Name Description System.Boolean allGroupHeads Whether to compute all group heads (most relevant document per group) matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetAllGroups(Boolean) Whether to also compute all groups matching the query. This can be used to determine the number of groups, which can be used for accurate pagination. When grouping by doc block the number of groups are automatically included in the TopGroups and this option doesn't have any influence. Declaration public virtual GroupingSearch SetAllGroups(bool allGroups) Parameters Type Name Description System.Boolean allGroups to also compute all groups matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetCaching(Int32, Boolean) Enables caching for the second pass search. The cache will not contain more than the maximum specified documents. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCaching(int maxDocsToCache, bool cacheScores) Parameters Type Name Description System.Int32 maxDocsToCache The maximum number of documents the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetCachingInMB(Double, Boolean) Enables caching for the second pass search. The cache will not grow over a specified limit in MB. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCachingInMB(double maxCacheRAMMB, bool cacheScores) Parameters Type Name Description System.Double maxCacheRAMMB The maximum amount in MB the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetFillSortFields(Boolean) Whether to also fill the sort fields per returned group and groups docs. Declaration public virtual GroupingSearch SetFillSortFields(bool fillSortFields) Parameters Type Name Description System.Boolean fillSortFields Whether to also fill the sort fields per returned group and groups docs Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsLimit(Int32) Specifies the number of documents to return inside a group from the specified groupDocsOffset. Declaration public virtual GroupingSearch SetGroupDocsLimit(int groupDocsLimit) Parameters Type Name Description System.Int32 groupDocsLimit The number of documents to return inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsOffset(Int32) Specifies the offset for documents inside a group. Declaration public virtual GroupingSearch SetGroupDocsOffset(int groupDocsOffset) Parameters Type Name Description System.Int32 groupDocsOffset The offset for documents inside a Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupSort(Sort) Specifies how groups are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetGroupSort(Sort groupSort) Parameters Type Name Description Sort groupSort The sort for the groups. Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeMaxScore(Boolean) Whether to include the score of the most relevant document per group. Declaration public virtual GroupingSearch SetIncludeMaxScore(bool includeMaxScore) Parameters Type Name Description System.Boolean includeMaxScore Whether to include the score of the most relevant document per group Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeScores(Boolean) Whether to include the scores per doc inside a group. Declaration public virtual GroupingSearch SetIncludeScores(bool includeScores) Parameters Type Name Description System.Boolean includeScores Whether to include the scores per doc inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetInitialSize(Int32) Sets the initial size of some internal used data structures. This prevents growing data structures many times. This can improve the performance of the grouping at the cost of more initial RAM. The SetAllGroups(Boolean) and SetAllGroupHeads(Boolean) features use this option. Defaults to 128. Declaration public virtual GroupingSearch SetInitialSize(int initialSize) Parameters Type Name Description System.Int32 initialSize The initial size of some internal used data structures Returns Type Description GroupingSearch this | Improve this Doc View Source SetSortWithinGroup(Sort) Specified how documents inside a group are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetSortWithinGroup(Sort sortWithinGroup) Parameters Type Name Description Sort sortWithinGroup The sort for documents inside a group Returns Type Description GroupingSearch this"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.html",
    "title": "Namespace Lucene.Net.Search.Grouping | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping Classes AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractFirstPassGroupingCollector<TGroupValue> FirstPassGroupingCollector is the first of two passes necessary to collect grouped hits. This pass gathers the top N sorted groups. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk GroupDocs<TGroupValue> Represents one group in the results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) TopGroups<TGroupValue> Represents result returned by a grouping search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Enums TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html",
    "title": "Interface IAbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractAllGroupsCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a BytesRef representing a group value. Declaration IEnumerable<TGroupValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> the group values"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html",
    "title": "Interface IAbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractDistinctValuesCollector<out GC> : ICollector Type Parameters Name Description GC Properties | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration IEnumerable<GC> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <GC> all unique values for each top N group"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html",
    "title": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractFirstPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32, Boolean) Returns top groups, starting from offset. This may return null, if no groups were collected, or if the number of unique groups collected is <= offset. Declaration IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset Remarks LUCENENET NOTE: We must use System.Collections.Generic.IEnumerable<T> rather than System.Collections.Generic.ICollection<T> here because we need this to be covariant"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html",
    "title": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractSecondPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32) Declaration ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ICollectedSearchGroup.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ICollectedSearchGroup.html",
    "title": "Interface ICollectedSearchGroup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ICollectedSearchGroup Properties | Improve this Doc View Source ComparerSlot Declaration int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration int TopDoc { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IGroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IGroupDocs-1.html",
    "title": "Interface IGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupDocs<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration int TotalHits { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ISearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ISearchGroup-1.html",
    "title": "Interface ISearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ISearchGroup<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration object[] SortValues { get; set; } Property Value Type Description System.Object []"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ITopGroups-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ITopGroups-1.html",
    "title": "Interface ITopGroups<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ITopGroups<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or System.Single.NaN if scores were not computed. Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration SortField[] WithinGroupSort { get; } Property Value Type Description SortField []"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup.html",
    "title": "Class SearchGroup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) Inheritance System.Object SearchGroup Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroup Methods | Improve this Doc View Source Merge<T>(IList<IEnumerable<ISearchGroup<T>>>, Int32, Int32, Sort) Merges multiple collections of top groups, for example obtained from separate index shards. The provided groupSort must match how the groups were sorted, and the provided SearchGroups must have been computed with fillFields=true passed to GetTopGroups(Int32, Boolean) . NOTE: this returns null if the topGroups is empty. Declaration public static ICollection<SearchGroup<T>> Merge<T>(IList<IEnumerable<ISearchGroup<T>>> topGroups, int offset, int topN, Sort groupSort) Parameters Type Name Description System.Collections.Generic.IList < System.Collections.Generic.IEnumerable < ISearchGroup <T>>> topGroups System.Int32 offset System.Int32 topN Sort groupSort Returns Type Description System.Collections.Generic.ICollection < SearchGroup <T>> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup-1.html",
    "title": "Class SearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SearchGroup<TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroup<TGroupValue> : ISearchGroup<TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration public TGroupValue GroupValue { get; set; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration public object[] SortValues { get; set; } Property Value Type Description System.Object [] Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements ISearchGroup<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Terms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Terms <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for grouping by indexed terms via FieldCache . Classes TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html",
    "title": "Class TermAllGroupHeadsCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). Inheritance System.Object TermAllGroupHeadsCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermAllGroupHeadsCollector Methods | Improve this Doc View Source Create(String, Sort) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Delegates to Create(String, Sort, Int32) with an initialSize of 128. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup) Parameters Type Name Description System.String groupField The field to group by Sort sortWithinGroup The sort within each group Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments | Improve this Doc View Source Create(String, Sort, Int32) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup, int initialSize) Parameters Type Name Description System.String groupField The field to group by Sort sortWithinGroup The sort within each group System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html",
    "title": "Class TermAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> TermAllGroupHeadsCollector<GH> Implements ICollector Inherited Members AbstractAllGroupHeadsCollector<GH>.m_reversed AbstractAllGroupHeadsCollector<GH>.m_compIDXEnd AbstractAllGroupHeadsCollector<GH>.m_temporalResult AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<GH>.GroupHeadsCount AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeadAndAddIfNotExist(Int32) AbstractAllGroupHeadsCollector<GH>.CollectedGroupHeads AbstractAllGroupHeadsCollector<GH>.Collect(Int32) AbstractAllGroupHeadsCollector<GH>.AcceptsDocsOutOfOrder AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector<GH>, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source TermAllGroupHeadsCollector(String, Int32) Declaration protected TermAllGroupHeadsCollector(string groupField, int numberOfSorts) Parameters Type Name Description System.String groupField System.Int32 numberOfSorts Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html",
    "title": "Class TermAllGroupsCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < BytesRef > TermAllGroupsCollector Implements IAbstractAllGroupsCollector < BytesRef > ICollector Inherited Members AbstractAllGroupsCollector<BytesRef>.GroupCount AbstractAllGroupsCollector<BytesRef>.SetScorer(Scorer) AbstractAllGroupsCollector<BytesRef>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermAllGroupsCollector : AbstractAllGroupsCollector<BytesRef>, IAbstractAllGroupsCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermAllGroupsCollector(String) Constructs a AbstractAllGroupsCollector<TGroupValue> . This sets the initial allocation size for the internal int set and group list to 128. Declaration public TermAllGroupsCollector(string groupField) Parameters Type Name Description System.String groupField The field to group by | Improve this Doc View Source TermAllGroupsCollector(String, Int32) Expert: Constructs a AbstractAllGroupsCollector<TGroupValue> Declaration public TermAllGroupsCollector(string groupField, int initialSize) Parameters Type Name Description System.String groupField The field to group by System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<BytesRef> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html",
    "title": "Class TermDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < BytesRef > TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < BytesRef > Inherited Members AbstractDistinctValuesCollector.GroupCount<BytesRef>.GroupValue AbstractDistinctValuesCollector.GroupCount<BytesRef>.UniqueValues System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<BytesRef>, AbstractDistinctValuesCollector.IGroupCount<BytesRef> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html",
    "title": "Class TermDistinctValuesCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > ICollector Inherited Members AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermDistinctValuesCollector : AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source TermDistinctValuesCollector(String, String, IEnumerable<ISearchGroup<BytesRef>>) Constructs TermDistinctValuesCollector instance. Declaration public TermDistinctValuesCollector(string groupField, string countField, IEnumerable<ISearchGroup<BytesRef>> groups) Parameters Type Name Description System.String groupField The field to group by System.String countField The field to count distinct values for System.Collections.Generic.IEnumerable < ISearchGroup < BytesRef >> groups The top N groups, collected during the first phase search Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<TermDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < TermDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html",
    "title": "Class TermFirstPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < BytesRef > TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < BytesRef > ICollector Inherited Members AbstractFirstPassGroupingCollector<BytesRef>.m_orderedGroups AbstractFirstPassGroupingCollector<BytesRef>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<BytesRef>.Collect(Int32) AbstractFirstPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<BytesRef>, IAbstractFirstPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermFirstPassGroupingCollector(String, Sort, Int32) Create the first pass collector. Declaration public TermFirstPassGroupingCollector(string groupField, Sort groupSort, int topNGroups) Parameters Type Name Description System.String groupField The field used to group documents. This field must be single-valued and indexed ( FieldCache is used to access its value per-document). Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source CopyDocGroupValue(BytesRef, BytesRef) Declaration protected override BytesRef CopyDocGroupValue(BytesRef groupValue, BytesRef reuse) Parameters Type Name Description BytesRef groupValue BytesRef reuse Returns Type Description BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.CopyDocGroupValue(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override BytesRef GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html",
    "title": "Class TermGroupFacetCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements ICollector Inherited Members AbstractGroupFacetCollector.m_groupField AbstractGroupFacetCollector.m_facetField AbstractGroupFacetCollector.m_facetPrefix AbstractGroupFacetCollector.m_segmentResults AbstractGroupFacetCollector.m_segmentFacetCounts AbstractGroupFacetCollector.m_segmentTotalCount AbstractGroupFacetCollector.m_startFacetOrd AbstractGroupFacetCollector.m_endFacetOrd AbstractGroupFacetCollector.MergeSegmentResults(Int32, Int32, Boolean) AbstractGroupFacetCollector.CreateSegmentResult() AbstractGroupFacetCollector.SetScorer(Scorer) AbstractGroupFacetCollector.Collect(Int32) AbstractGroupFacetCollector.SetNextReader(AtomicReaderContext) AbstractGroupFacetCollector.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermGroupFacetCollector : AbstractGroupFacetCollector, ICollector Methods | Improve this Doc View Source CreateTermGroupFacetCollector(String, String, Boolean, BytesRef, Int32) Factory method for creating the right implementation based on the fact whether the facet field contains multiple tokens per documents. Declaration public static TermGroupFacetCollector CreateTermGroupFacetCollector(string groupField, string facetField, bool facetFieldMultivalued, BytesRef facetPrefix, int initialSize) Parameters Type Name Description System.String groupField The group field System.String facetField The facet field System.Boolean facetFieldMultivalued Whether the facet field has multiple tokens per document BytesRef facetPrefix The facet prefix a facet entry should start with to be included. System.Int32 initialSize The initial allocation size of the internal int set and group facet list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description TermGroupFacetCollector TermGroupFacetCollector implementation Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html",
    "title": "Class TermSecondPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < BytesRef > TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < BytesRef > ICollector Inherited Members AbstractSecondPassGroupingCollector<BytesRef>.m_groupMap AbstractSecondPassGroupingCollector<BytesRef>.m_groupDocs AbstractSecondPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<BytesRef>.Collect(Int32) AbstractSecondPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<BytesRef>.GetTopGroups(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<BytesRef>, IAbstractSecondPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermSecondPassGroupingCollector(String, IEnumerable<ISearchGroup<BytesRef>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration public TermSecondPassGroupingCollector(string groupField, IEnumerable<ISearchGroup<BytesRef>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description System.String groupField System.Collections.Generic.IEnumerable < ISearchGroup < BytesRef >> groups Sort groupSort Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<BytesRef> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.html",
    "title": "Class TopGroups | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) Inheritance System.Object TopGroups Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class TopGroups Methods | Improve this Doc View Source Merge<T>(ITopGroups<T>[], Sort, Sort, Int32, Int32, TopGroups.ScoreMergeMode) Merges an array of TopGroups, for example obtained from the second-pass collector across multiple shards. Each TopGroups must have been sorted by the same groupSort and docSort, and the top groups passed to all second-pass collectors must be the same. NOTE : We can't always compute an exact totalGroupCount. Documents belonging to a group may occur on more than one shard and thus the merged totalGroupCount can be higher than the actual totalGroupCount. In this case the totalGroupCount represents a upper bound. If the documents of one group do only reside in one shard then the totalGroupCount is exact. NOTE : the topDocs in each GroupDocs is actually an instance of TopDocsAndShards Declaration public static TopGroups<T> Merge<T>(ITopGroups<T>[] shardGroups, Sort groupSort, Sort docSort, int docOffset, int docTopN, TopGroups.ScoreMergeMode scoreMergeMode) Parameters Type Name Description ITopGroups <T>[] shardGroups Sort groupSort Sort docSort System.Int32 docOffset System.Int32 docTopN TopGroups.ScoreMergeMode scoreMergeMode Returns Type Description TopGroups <T> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html",
    "title": "Enum TopGroups.ScoreMergeMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public enum ScoreMergeMode Fields Name Description Avg Avg score across all shards for this group. None Set score to Float.NaN Total Sum score across all shards for this group."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups-1.html",
    "title": "Class TopGroups<TGroupValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopGroups<TGroupValue> Represents result returned by a grouping search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TopGroups<TGroupValue> Implements ITopGroups <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class TopGroups<TGroupValue> : ITopGroups<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source TopGroups(ITopGroups<TGroupValue>, Nullable<Int32>) Declaration public TopGroups(ITopGroups<TGroupValue> oldTopGroups, int? totalGroupCount) Parameters Type Name Description ITopGroups <TGroupValue> oldTopGroups System.Nullable < System.Int32 > totalGroupCount | Improve this Doc View Source TopGroups(SortField[], SortField[], Int32, Int32, IGroupDocs<TGroupValue>[], Single) Declaration public TopGroups(SortField[] groupSort, SortField[] withinGroupSort, int totalHitCount, int totalGroupedHitCount, IGroupDocs<TGroupValue>[] groups, float maxScore) Parameters Type Name Description SortField [] groupSort SortField [] withinGroupSort System.Int32 totalHitCount System.Int32 totalGroupedHitCount IGroupDocs <TGroupValue>[] groups System.Single maxScore Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration public IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration public SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or System.Single.NaN if scores were not computed. Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration public int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration public int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration public int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration public SortField[] WithinGroupSort { get; } Property Value Type Description SortField [] Implements ITopGroups<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/package.html": {
    "href": "api/Lucene.Net.Grouping/package.html",
    "title": "Lucene.Net.Grouping | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.Grouping <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This module enables search result grouping with Lucene, where hits with the same value in the specified single-valued group field are grouped together. For example, if you group by the author field, then all documents with the same value in the author field fall into a single group. Grouping requires a number of inputs: groupField : this is the field used for grouping. For example, if you use the author field then each group has all books by the same author. Documents that don't have this field are grouped under a single group with a null group value. groupSort : how the groups are sorted. For sorting purposes, each group is \"represented\" by the highest-sorted document according to the groupSort within it. For example, if you specify \"price\" (ascending) then the first group is the one with the lowest price book within it. Or if you specify relevance group sort, then the first group is the one containing the highest scoring book. topNGroups : how many top groups to keep. For example, 10 means the top 10 groups are computed. groupOffset : which \"slice\" of top groups you want to retrieve. For example, 3 means you'll get 7 groups back (assuming topNGroups is 10). This is useful for paging, where you might show 5 groups per page. withinGroupSort : how the documents within each group are sorted. This can be different from the group sort. maxDocsPerGroup : how many top documents within each group to keep. withinGroupOffset : which \"slice\" of top documents you want to retrieve from each group. The implementation is two-pass: the first pass (<xref:Lucene.Net.Grouping.Term.TermFirstPassGroupingCollector>) gathers the top groups, and the second pass (<xref:Lucene.Net.Grouping.Term.TermSecondPassGroupingCollector>) gathers documents within those groups. If the search is costly to run you may want to use the CachingCollector class, which caches hits and can (quickly) replay them for the second pass. This way you only run the query once, but you pay a RAM cost to (briefly) hold all hits. Results are returned as a <xref:Lucene.Net.Grouping.TopGroups> instance. This module abstracts away what defines group and how it is collected. All grouping collectors are abstract and have currently term based implementations. One can implement collectors that for example group on multiple fields. Known limitations: For the two-pass grouping search, the group field must be a single-valued indexed field (or indexed as a SortedDocValuesField ). FieldCache is used to load the SortedDocValues for this field. Although Solr support grouping by function and this module has abstraction of what a group is, there are currently only implementations for grouping based on terms. Sharding is not directly supported, though is not too difficult, if you can merge the top groups and top documents per group yourself. Typical usage for the generic two-pass grouping search looks like this using the grouping convenience utility (optionally using caching for the second pass search): GroupingSearch groupingSearch = new GroupingSearch(\"author\"); groupingSearch.setGroupSort(groupSort); groupingSearch.setFillSortFields(fillFields); if (useCache) { // Sets cache in MB groupingSearch.setCachingInMB(4.0, true); } if (requiredTotalGroupCount) { groupingSearch.setAllGroups(true); } TermQuery query = new TermQuery(new Term(\"content\", searchTerm)); TopGroups result = groupingSearch.search(indexSearcher, query, groupOffset, groupLimit); // Render groupsResult... if (requiredTotalGroupCount) { int totalGroupCount = result.totalGroupCount; } To use the single-pass BlockGroupingCollector , first, at indexing time, you must ensure all docs in each group are added as a block, and you have some way to find the last document of each group. One simple way to do this is to add a marker binary field: // Create Documents from your source: List<Document> oneGroup = ...; Field groupEndField = new Field(\"groupEnd\", \"x\", Field.Store.NO, Field.Index.NOT_ANALYZED); groupEndField.setIndexOptions(IndexOptions.DOCS_ONLY); groupEndField.setOmitNorms(true); oneGroup.get(oneGroup.size()-1).add(groupEndField); // You can also use writer.updateDocuments(); just be sure you // replace an entire previous doc block with this new one. For // example, each group could have a \"groupID\" field, with the same // value for all docs in this group: writer.addDocuments(oneGroup); Then, at search time, do this up front: // Set this once in your app & save away for reusing across all queries: Filter groupEndDocs = new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term(\"groupEnd\", \"x\")))); Finally, do this per search: // Per search: BlockGroupingCollector c = new BlockGroupingCollector(groupSort, groupOffset+topNGroups, needsScores, groupEndDocs); s.search(new TermQuery(new Term(\"content\", searchTerm)), c); TopGroups groupsResult = c.getTopGroups(withinGroupSort, groupOffset, docOffset, docOffset+docsPerGroup, fillFields); // Render groupsResult... Or alternatively use the GroupingSearch convenience utility: // Per search: GroupingSearch groupingSearch = new GroupingSearch(groupEndDocs); groupingSearch.setGroupSort(groupSort); groupingSearch.setIncludeScores(needsScores); TermQuery query = new TermQuery(new Term(\"content\", searchTerm)); TopGroups groupsResult = groupingSearch.search(indexSearcher, query, groupOffset, groupLimit); // Render groupsResult... Note that the groupValue of each GroupDocs will be null , so if you need to present this value you'll have to separately retrieve it (for example using stored fields, FieldCache , etc.). Another collector is the TermAllGroupHeadsCollector that can be used to retrieve all most relevant documents per group. Also known as group heads. This can be useful in situations when one wants to compute group based facets / statistics on the complete query result. The collector can be executed during the first or second phase. This collector can also be used with the GroupingSearch convenience utility, but when if one only wants to compute the most relevant documents per group it is better to just use the collector as done here below. AbstractAllGroupHeadsCollector c = TermAllGroupHeadsCollector.create(groupField, sortWithinGroup); s.search(new TermQuery(new Term(\"content\", searchTerm)), c); // Return all group heads as int array int[] groupHeadsArray = c.retrieveGroupHeads() // Return all group heads as FixedBitSet. int maxDoc = s.maxDoc(); FixedBitSet groupHeadsBitSet = c.retrieveGroupHeads(maxDoc) For each of the above collector types there is also a variant that works with ValueSource instead of of fields. Concretely this means that these variants can work with functions. These variants are slower than there term based counter parts. These implementations are located in the org.apache.lucene.search.grouping.function package, but can also be used with the GroupingSearch convenience utility"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.DefaultEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.DefaultEncoder.html",
    "title": "Class DefaultEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultEncoder Simple IEncoder implementation that does not modify the output Inheritance System.Object DefaultEncoder Implements IEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class DefaultEncoder : IEncoder Constructors | Improve this Doc View Source DefaultEncoder() Declaration public DefaultEncoder() Methods | Improve this Doc View Source EncodeText(String) Declaration public virtual string EncodeText(string originalText) Parameters Type Name Description System.String originalText Returns Type Description System.String Implements IEncoder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.GradientFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.GradientFormatter.html",
    "title": "Class GradientFormatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GradientFormatter Formats text with different color intensity depending on the score of the term. Inheritance System.Object GradientFormatter SpanGradientFormatter Implements IFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class GradientFormatter : IFormatter Constructors | Improve this Doc View Source GradientFormatter(Single, String, String, String, String) Sets the color range for the IDF scores Declaration public GradientFormatter(float maxScore, string minForegroundColor, string maxForegroundColor, string minBackgroundColor, string maxBackgroundColor) Parameters Type Name Description System.Single maxScore The score (and above) displayed as maxColor (See MaxTermWeight which can be used to callibrate scoring scale) System.String minForegroundColor The hex color used for representing IDF scores of zero eg FFFFFF (white) or null if no foreground color required System.String maxForegroundColor The largest hex color used for representing IDF scores eg 000000 (black) or null if no foreground color required System.String minBackgroundColor The hex color used for representing IDF scores of zero eg FFFFFF (white) or null if no background color required System.String maxBackgroundColor The largest hex color used for representing IDF scores eg 000000 (black) or null if no background color required Fields | Improve this Doc View Source m_bgBMax Declaration protected int m_bgBMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgBMin Declaration protected int m_bgBMin Field Value Type Description System.Int32 | Improve this Doc View Source m_bgGMax Declaration protected int m_bgGMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgGMin Declaration protected int m_bgGMin Field Value Type Description System.Int32 | Improve this Doc View Source m_bgRMax Declaration protected int m_bgRMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgRMin Declaration protected int m_bgRMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgBMax Declaration protected int m_fgBMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgBMin Declaration protected int m_fgBMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgGMax Declaration protected int m_fgGMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgGMin Declaration protected int m_fgGMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgRMax Declaration protected int m_fgRMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgRMin Declaration protected int m_fgRMin Field Value Type Description System.Int32 | Improve this Doc View Source m_highlightBackground Declaration protected bool m_highlightBackground Field Value Type Description System.Boolean | Improve this Doc View Source m_highlightForeground Declaration protected bool m_highlightForeground Field Value Type Description System.Boolean Methods | Improve this Doc View Source GetBackgroundColorString(Single) Declaration protected virtual string GetBackgroundColorString(float score) Parameters Type Name Description System.Single score Returns Type Description System.String | Improve this Doc View Source GetForegroundColorString(Single) Declaration protected virtual string GetForegroundColorString(float score) Parameters Type Name Description System.Single score Returns Type Description System.String | Improve this Doc View Source HexToInt32(String) Converts a hex string into an System.Int32 . NOTE: This was hexToInt() in Lucene Declaration public static int HexToInt32(string hex) Parameters Type Name Description System.String hex A string in capital or lower case hex, of no more then 16 characters. Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the string is more than 16 characters long, or if any character is not in the set [0-9a-fA-f] | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration public virtual string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Implements IFormatter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.Highlighter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.Highlighter.html",
    "title": "Class Highlighter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Highlighter Class used to markup highlighted terms found in the best sections of a text, using configurable IFragmenter , Scorer , IFormatter , IEncoder and tokenizers. Inheritance System.Object Highlighter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class Highlighter Constructors | Improve this Doc View Source Highlighter(IFormatter, IEncoder, IScorer) Declaration public Highlighter(IFormatter formatter, IEncoder encoder, IScorer fragmentScorer) Parameters Type Name Description IFormatter formatter IEncoder encoder IScorer fragmentScorer | Improve this Doc View Source Highlighter(IFormatter, IScorer) Declaration public Highlighter(IFormatter formatter, IScorer fragmentScorer) Parameters Type Name Description IFormatter formatter IScorer fragmentScorer | Improve this Doc View Source Highlighter(IScorer) Declaration public Highlighter(IScorer fragmentScorer) Parameters Type Name Description IScorer fragmentScorer Fields | Improve this Doc View Source DEFAULT_MAX_CHARS_TO_ANALYZE Declaration public static readonly int DEFAULT_MAX_CHARS_TO_ANALYZE Field Value Type Description System.Int32 Properties | Improve this Doc View Source Encoder Declaration public virtual IEncoder Encoder { get; set; } Property Value Type Description IEncoder | Improve this Doc View Source FragmentScorer Declaration public virtual IScorer FragmentScorer { get; set; } Property Value Type Description IScorer | Improve this Doc View Source MaxDocCharsToAnalyze Declaration public virtual int MaxDocCharsToAnalyze { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TextFragmenter Declaration public virtual IFragmenter TextFragmenter { get; set; } Property Value Type Description IFragmenter Methods | Improve this Doc View Source GetBestFragment(Analyzer, String, String) Highlights chosen terms in a text, extracting the most relevant section. This is a convenience method that calls GetBestFragment(TokenStream, String) Declaration public string GetBestFragment(Analyzer analyzer, string fieldName, string text) Parameters Type Name Description Analyzer analyzer the analyzer that will be used to split text into chunks System.String fieldName Name of field used to influence analyzer's tokenization policy System.String text text to highlight terms in Returns Type Description System.String highlighted text fragment or null if no terms found Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragment(TokenStream, String) Highlights chosen terms in a text, extracting the most relevant section. The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragment with the highest score is returned Declaration public string GetBestFragment(TokenStream tokenStream, string text) Parameters Type Name Description TokenStream tokenStream A stream of tokens identified in the text parameter, including offset information. This is typically produced by an analyzer re-parsing a document's text. Some work may be done on retrieving TokenStreams more efficiently by adding support for storing original text position data in the Lucene index but this support is not currently available (as of Lucene 1.4 rc2). System.String text text to highlight terms in Returns Type Description System.String highlighted text fragment or null if no terms found Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(Analyzer, String, String, Int32) Highlights chosen terms in a text, extracting the most relevant sections. This is a convenience method that calls GetBestFragments(TokenStream, String, Int32) Declaration public string[] GetBestFragments(Analyzer analyzer, string fieldName, string text, int maxNumFragments) Parameters Type Name Description Analyzer analyzer the analyzer that will be used to split text into chunks System.String fieldName the name of the field being highlighted (used by analyzer) System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. Returns Type Description System.String [] highlighted text fragments (between 0 and maxNumFragments number of fragments) Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(TokenStream, String, Int32) Highlights chosen terms in a text, extracting the most relevant sections. The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragments with the highest scores are returned as an array of strings in order of score (contiguous fragments are merged into one in their original order to improve readability) Declaration public string[] GetBestFragments(TokenStream tokenStream, string text, int maxNumFragments) Parameters Type Name Description TokenStream tokenStream System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. Returns Type Description System.String [] highlighted text fragments (between 0 and maxNumFragments number of fragments) Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(TokenStream, String, Int32, String) Highlights terms in the text , extracting the most relevant sections and concatenating the chosen fragments with a separator (typically \"...\"). The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragments with the highest scores are returned in order as \"separator\" delimited strings. Declaration public virtual string GetBestFragments(TokenStream tokenStream, string text, int maxNumFragments, string separator) Parameters Type Name Description TokenStream tokenStream System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. System.String separator the separator used to intersperse the document fragments (typically \"...\") Returns Type Description System.String highlighted text Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestTextFragments(TokenStream, String, Boolean, Int32) Low level api to get the most relevant (formatted) sections of the document. This method has been made public to allow visibility of score information held in TextFragment objects. Thanks to Jason Calabrese for help in redefining the interface. Declaration public TextFragment[] GetBestTextFragments(TokenStream tokenStream, string text, bool mergeContiguousFragments, int maxNumFragments) Parameters Type Name Description TokenStream tokenStream System.String text System.Boolean mergeContiguousFragments System.Int32 maxNumFragments Returns Type Description TextFragment [] Exceptions Type Condition System.IO.IOException If there is a low-level I/O error InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.html",
    "title": "Namespace Lucene.Net.Search.Highlight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Highlight <!-- 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. --> The highlight package contains classes to provide \"keyword in context\" features typically used to highlight search terms in the text of results pages. The Highlighter class is the central component and can be used to extract the most interesting sections of a piece of text and highlight them, with the help of Fragmenter, fragment Scorer, and Formatter classes. Example Usage //... Above, create documents with two fields, one with term vectors (tv) and one without (notv) IndexSearcher searcher = new IndexSearcher(directory); QueryParser parser = new QueryParser(\"notv\", analyzer); Query query = parser.parse(\"million\"); TopDocs hits = searcher.search(query, 10); SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter(); Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(query)); for (int i = 0; i < 10;=\"\" i++)=\"\" {=\"\" int=\"\" id=\"hits.scoreDocs[i].doc;\" document=\"\" doc=\"searcher.doc(id);\" string=\"\" text=\"doc.get(\" notv\");\"=\"\" tokenstream=\"\" tokenstream=\"TokenSources.getAnyTokenStream(searcher.getIndexReader(),\" id,=\"\" \"notv\",=\"\" analyzer);=\"\" textfragment[]=\"\" frag=\"highlighter.getBestTextFragments(tokenStream,\" text,=\"\" false,=\"\" 10);//highlighter.getbestfragments(tokenstream,=\"\" text,=\"\" 3,=\"\" \"...\");=\"\" for=\"\" (int=\"\" j=\"0;\" j=\"\">< frag.length;=\"\" j++)=\"\" {=\"\" if=\"\" ((frag[j]=\"\" !=\"null)\" &&=\"\" (frag[j].getscore()=\"\"> 0)) { System.out.println((frag[j].toString())); } } //Term vector text = doc.get(\"tv\"); tokenStream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), hits.scoreDocs[i].doc, \"tv\", analyzer); frag = highlighter.getBestTextFragments(tokenStream, text, false, 10); for (int j = 0; j < frag.length;=\"\" j++)=\"\" {=\"\" if=\"\" ((frag[j]=\"\" !=\"null)\" &&=\"\" (frag[j].getscore()=\"\"> 0)) { System.out.println((frag[j].toString())); } } System.out.println(\"-------------\"); } New features 06/02/2005 This release adds options for encoding (thanks to Nicko Cadell). An \"Encoder\" implementation such as the new SimpleHTMLEncoder class can be passed to the highlighter to encode all those non-xhtml standard characters such as & into legal values. This simple class may not suffice for some languages - Commons Lang has an implementation that could be used: escapeHtml(String) in http://svn.apache.org/viewcvs.cgi/jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringEscapeUtils.java?rev=137958&view=markup New features 22/12/2004 This release adds some new capabilities: Faster highlighting using Term vector support New formatting options to use color intensity to show informational value Options for better summarization by using term IDF scores to influence fragment selection The highlighter takes a TokenStream as input. Until now these streams have typically been produced using an Analyzer but the new class TokenSources provides helper methods for obtaining TokenStreams from the new TermVector position support (see latest CVS version). The new class GradientFormatter can use a scale of colors to highlight terms according to their score. A subtle use of color can help emphasise the reasons for matching (useful when doing \"MoreLikeThis\" queries and you want to see what the basis of the similarities are). The QueryScorer class has a new constructor which can use an IndexReader to derive the IDF (inverse document frequency) for each term in order to influence the score. This is useful for helping to extracting the most significant sections of a document and in supplying scores used by the new GradientFormatter to color significant words more strongly. The QueryScorer.getMaxWeight method is useful when passed to the GradientFormatter constructor to define the top score which is associated with the top color. Classes DefaultEncoder Simple IEncoder implementation that does not modify the output GradientFormatter Formats text with different color intensity depending on the score of the term. Highlighter Class used to markup highlighted terms found in the best sections of a text, using configurable IFragmenter , Scorer , IFormatter , IEncoder and tokenizers. InvalidTokenOffsetsException Exception thrown if TokenStream Tokens are incompatible with provided text NullFragmenter IFragmenter implementation which does not fragment the text. This is useful for highlighting the entire content of a document or field. OffsetLimitTokenFilter This TokenFilter limits the number of tokens while indexing by adding up the current offset. PositionSpan Utility class to record Positions Spans This is a Lucene.NET INTERNAL API, use at your own risk QueryScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class converts appropriate Query s to SpanQuery s and attempts to score only those terms that participated in generating the 'hit' on the document. QueryTermExtractor Utility class used to extract the terms used in a query, plus any weights. This class will not find terms for MultiTermQuery , RangeQuery and PrefixQuery classes so the caller must pass a rewritten query (see Rewrite(IndexReader) ) to obtain a list of expanded terms. QueryTermScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class uses the QueryTermExtractor class to process determine the query terms and their boosts to be used. SimpleFragmenter IFragmenter implementation which breaks text up into same-size fragments with no concerns over spotting sentence boundaries. SimpleHTMLEncoder Simple IEncoder implementation to escape text for HTML output SimpleHTMLFormatter Simple IFormatter implementation to highlight terms with a pre and post tag SimpleSpanFragmenter IFragmenter implementation which breaks text up into same-size fragments but does not split up Spans . This is a simple sample class. SpanGradientFormatter Formats text with different color intensity depending on the score of the term using the span tag. GradientFormatter uses a bgcolor argument to the font tag which doesn't work in Mozilla, thus this class. TextFragment Low-level class used to record information about a section of a document with a score. TokenGroup One, or several overlapping tokens, along with the score(s) and the scope of the original text TokenSources Hides implementation issues associated with obtaining a TokenStream for use with the Highlighter - can obtain from term vectors with offsets and positions or from an Analyzer re-parsing the stored content. see TokenStreamFromTermVector TokenStreamFromTermPositionVector TokenStream created from a term vector field. WeightedSpanTerm Lightweight class to hold term, weight, and positions used for scoring this term. WeightedSpanTermExtractor Class used to extract WeightedSpanTerm s from a Query based on whether Term s from the Query are contained in a supplied TokenStream . WeightedSpanTermExtractor.PositionCheckingMap<K> This class makes sure that if both position sensitive and insensitive versions of the same term are added, the position insensitive one wins. WeightedTerm Lightweight class to hold term and a Weight value used for scoring this term Interfaces IEncoder Encodes original text. The IEncoder works with the IFormatter to generate the output. IFormatter Processes terms found in the original text, typically by applying some form of mark-up to highlight terms in HTML search results pages. IFragmenter Implements the policy for breaking text into multiple fragments for consideration by the Highlighter class. A sophisticated implementation may do this on the basis of detecting end of sentences in the text. IScorer A IScorer is responsible for scoring a stream of tokens. These token scores can then be used to compute TextFragment scores."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IEncoder.html",
    "title": "Interface IEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IEncoder Encodes original text. The IEncoder works with the IFormatter to generate the output. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IEncoder Methods | Improve this Doc View Source EncodeText(String) Declaration string EncodeText(string originalText) Parameters Type Name Description System.String originalText The section of text being output Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFormatter.html",
    "title": "Interface IFormatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFormatter Processes terms found in the original text, typically by applying some form of mark-up to highlight terms in HTML search results pages. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFormatter Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText The section of text being considered for markup TokenGroup tokenGroup contains one or several overlapping Tokens along with their scores and positions. Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFragmenter.html",
    "title": "Interface IFragmenter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFragmenter Implements the policy for breaking text into multiple fragments for consideration by the Highlighter class. A sophisticated implementation may do this on the basis of detecting end of sentences in the text. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragmenter Methods | Improve this Doc View Source IsNewFragment() Test to see if this token from the stream should be held in a new TextFragment . Every time this is called, the TokenStream passed to Start(String, TokenStream) will have been incremented. Declaration bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Initializes the Fragmenter. You can grab references to the Attributes you are interested in from tokenStream and then access the values in IsNewFragment() . Declaration void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText the original source text TokenStream tokenStream tokenStream the TokenStream to be fragmented"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.InvalidTokenOffsetsException.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.InvalidTokenOffsetsException.html",
    "title": "Class InvalidTokenOffsetsException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InvalidTokenOffsetsException Exception thrown if TokenStream Tokens are incompatible with provided text Inheritance System.Object System.Exception InvalidTokenOffsetsException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class InvalidTokenOffsetsException : Exception, ISerializable Constructors | Improve this Doc View Source InvalidTokenOffsetsException() Declaration public InvalidTokenOffsetsException() | Improve this Doc View Source InvalidTokenOffsetsException(String) Declaration public InvalidTokenOffsetsException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source InvalidTokenOffsetsException(String, Exception) Declaration public InvalidTokenOffsetsException(string message, Exception inner) Parameters Type Name Description System.String message System.Exception inner Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IScorer.html",
    "title": "Interface IScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IScorer A IScorer is responsible for scoring a stream of tokens. These token scores can then be used to compute TextFragment scores. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IScorer Properties | Improve this Doc View Source FragmentScore Called when the Highlighter has no more tokens for the current fragment - the IScorer returns the weighting it has derived for the most recent fragment, typically based on the results of GetTokenScore() . Declaration float FragmentScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetTokenScore() Called for each token in the current fragment. The Highlighter will increment the TokenStream passed to init on every call. Declaration float GetTokenScore() Returns Type Description System.Single a score which is passed to the Highlighter class to influence the mark-up of the text (this return value is NOT used to score the fragment) | Improve this Doc View Source Init(TokenStream) Called to init the Scorer with a TokenStream . You can grab references to the attributes you are interested in here and access them from GetTokenScore() . Declaration TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream the TokenStream that will be scored. Returns Type Description TokenStream either a TokenStream that the Highlighter should continue using (eg if you read the tokenSream in this method) or null to continue using the same TokenStream that was passed in. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source StartFragment(TextFragment) Called when a new fragment is started for consideration. Declaration void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment the fragment that will be scored next"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.NullFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.NullFragmenter.html",
    "title": "Class NullFragmenter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NullFragmenter IFragmenter implementation which does not fragment the text. This is useful for highlighting the entire content of a document or field. Inheritance System.Object NullFragmenter Implements IFragmenter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class NullFragmenter : IFragmenter Methods | Improve this Doc View Source IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText TokenStream tokenStream Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.OffsetLimitTokenFilter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.OffsetLimitTokenFilter.html",
    "title": "Class OffsetLimitTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OffsetLimitTokenFilter This TokenFilter limits the number of tokens while indexing by adding up the current offset. Inheritance System.Object AttributeSource TokenStream TokenFilter OffsetLimitTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public sealed class OffsetLimitTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OffsetLimitTokenFilter(TokenStream, Int32) Declaration public OffsetLimitTokenFilter(TokenStream input, int offsetLimit) Parameters Type Name Description TokenStream input System.Int32 offsetLimit Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.PositionSpan.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.PositionSpan.html",
    "title": "Class PositionSpan | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PositionSpan Utility class to record Positions Spans This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PositionSpan Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class PositionSpan Constructors | Improve this Doc View Source PositionSpan(Int32, Int32) Declaration public PositionSpan(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Properties | Improve this Doc View Source End Declaration public int End { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Declaration public int Start { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryScorer.html",
    "title": "Class QueryScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class converts appropriate Query s to SpanQuery s and attempts to score only those terms that participated in generating the 'hit' on the document. Inheritance System.Object QueryScorer Implements IScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryScorer : IScorer Constructors | Improve this Doc View Source QueryScorer(WeightedSpanTerm[]) Constructs a new QueryScorer instance Declaration public QueryScorer(WeightedSpanTerm[] weightedTerms) Parameters Type Name Description WeightedSpanTerm [] weightedTerms an array of pre-created WeightedSpanTerm s | Improve this Doc View Source QueryScorer(Query) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query) Parameters Type Name Description Query query Query to use for highlighting | Improve this Doc View Source QueryScorer(Query, IndexReader, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, IndexReader reader, string field) Parameters Type Name Description Query query Query to use for highlighting IndexReader reader IndexReader to use for quasi tf/idf scoring System.String field Field to highlight - pass null to ignore fields | Improve this Doc View Source QueryScorer(Query, IndexReader, String, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, IndexReader reader, string field, string defaultField) Parameters Type Name Description Query query Query to use for highlighting IndexReader reader IndexReader to use for quasi tf/idf scoring System.String field Field to highlight - pass null to ignore fields System.String defaultField The default field for queries with the field name unspecified | Improve this Doc View Source QueryScorer(Query, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, string field) Parameters Type Name Description Query query Query to use for highlighting System.String field Field to highlight - pass null to ignore fields | Improve this Doc View Source QueryScorer(Query, String, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, string field, string defaultField) Parameters Type Name Description Query query Query to use for highlighting System.String field Field to highlight - pass null to ignore fields System.String defaultField The default field for queries with the field name unspecified Properties | Improve this Doc View Source ExpandMultiTermQuery Controls whether or not multi-term queries are expanded against a MemoryIndex IndexReader . true if multi-term queries should be expanded Declaration public virtual bool ExpandMultiTermQuery { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FragmentScore Declaration public virtual float FragmentScore { get; } Property Value Type Description System.Single See Also FragmentScore | Improve this Doc View Source MaxTermWeight The highest weighted term (useful for passing to GradientFormatter to set top end of coloring scale). Declaration public virtual float MaxTermWeight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetTokenScore() Declaration public virtual float GetTokenScore() Returns Type Description System.Single See Also GetTokenScore () | Improve this Doc View Source GetWeightedSpanTerm(String) Retrieve the WeightedSpanTerm for the specified token. Useful for passing Span information to a IFragmenter . Declaration public virtual WeightedSpanTerm GetWeightedSpanTerm(string token) Parameters Type Name Description System.String token token to get WeightedSpanTerm for Returns Type Description WeightedSpanTerm WeightedSpanTerm for token | Improve this Doc View Source Init(TokenStream) Declaration public virtual TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream See Also Init ( TokenStream ) | Improve this Doc View Source NewTermExtractor(String) Declaration protected virtual WeightedSpanTermExtractor NewTermExtractor(string defaultField) Parameters Type Name Description System.String defaultField Returns Type Description WeightedSpanTermExtractor | Improve this Doc View Source SetMaxDocCharsToAnalyze(Int32) Declaration public virtual void SetMaxDocCharsToAnalyze(int maxDocCharsToAnalyze) Parameters Type Name Description System.Int32 maxDocCharsToAnalyze | Improve this Doc View Source SetWrapIfNotCachingTokenFilter(Boolean) By default, TokenStream s that are not of the type CachingTokenFilter are wrapped in a CachingTokenFilter to ensure an efficient reset - if you are already using a different caching TokenStream impl and you don't want it to be wrapped, set this to false. Declaration public virtual void SetWrapIfNotCachingTokenFilter(bool wrap) Parameters Type Name Description System.Boolean wrap | Improve this Doc View Source StartFragment(TextFragment) Declaration public virtual void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment See Also StartFragment ( TextFragment ) Implements IScorer"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermExtractor.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermExtractor.html",
    "title": "Class QueryTermExtractor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryTermExtractor Utility class used to extract the terms used in a query, plus any weights. This class will not find terms for MultiTermQuery , RangeQuery and PrefixQuery classes so the caller must pass a rewritten query (see Rewrite(IndexReader) ) to obtain a list of expanded terms. Inheritance System.Object QueryTermExtractor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public static class QueryTermExtractor Methods | Improve this Doc View Source GetIdfWeightedTerms(Query, IndexReader, String) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetIdfWeightedTerms(Query query, IndexReader reader, string fieldName) Parameters Type Name Description Query query Query to extract term texts from IndexReader reader used to compute IDF which can be used to a) score selected fragments better b) use graded highlights eg chaning intensity of font color System.String fieldName the field on which Inverse Document Frequency (IDF) calculations are based Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query) Parameters Type Name Description Query query Query to extract term texts from Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query, Boolean) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query, bool prohibited) Parameters Type Name Description Query query Query to extract term texts from System.Boolean prohibited true to extract \"prohibited\" terms, too Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query, Boolean, String) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query, bool prohibited, string fieldName) Parameters Type Name Description Query query Query to extract term texts from System.Boolean prohibited true to extract \"prohibited\" terms, too System.String fieldName The fieldName used to filter query terms Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermScorer.html",
    "title": "Class QueryTermScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryTermScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class uses the QueryTermExtractor class to process determine the query terms and their boosts to be used. Inheritance System.Object QueryTermScorer Implements IScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryTermScorer : IScorer Constructors | Improve this Doc View Source QueryTermScorer(WeightedTerm[]) Declaration public QueryTermScorer(WeightedTerm[] weightedTerms) Parameters Type Name Description WeightedTerm [] weightedTerms | Improve this Doc View Source QueryTermScorer(Query) Declaration public QueryTermScorer(Query query) Parameters Type Name Description Query query a Lucene query (ideally rewritten using Rewrite(IndexReader) before being passed to this class and the searcher) | Improve this Doc View Source QueryTermScorer(Query, IndexReader, String) Declaration public QueryTermScorer(Query query, IndexReader reader, string fieldName) Parameters Type Name Description Query query a Lucene query (ideally rewritten using Rewrite(IndexReader) before being passed to this class and the searcher) IndexReader reader used to compute IDF which can be used to a) score selected fragments better b) use graded highlights eg set font color intensity System.String fieldName the field on which Inverse Document Frequency (IDF) calculations are based | Improve this Doc View Source QueryTermScorer(Query, String) Declaration public QueryTermScorer(Query query, string fieldName) Parameters Type Name Description Query query a Lucene query (ideally rewritten using Rewrite(IndexReader) before being passed to this class and the searcher) System.String fieldName the Field name which is used to match Query terms Properties | Improve this Doc View Source FragmentScore FragmentScore Declaration public virtual float FragmentScore { get; } Property Value Type Description System.Single | Improve this Doc View Source MaxTermWeight The highest weighted term (useful for passing to GradientFormatter to set top end of coloring scale. Declaration public virtual float MaxTermWeight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source AllFragmentsProcessed() Declaration public virtual void AllFragmentsProcessed() | Improve this Doc View Source GetTokenScore() GetTokenScore() Declaration public virtual float GetTokenScore() Returns Type Description System.Single | Improve this Doc View Source Init(TokenStream) Init(TokenStream) Declaration public virtual TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream | Improve this Doc View Source StartFragment(TextFragment) Declaration public virtual void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment Implements IScorer"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleFragmenter.html",
    "title": "Class SimpleFragmenter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFragmenter IFragmenter implementation which breaks text up into same-size fragments with no concerns over spotting sentence boundaries. Inheritance System.Object SimpleFragmenter Implements IFragmenter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragmenter : IFragmenter Constructors | Improve this Doc View Source SimpleFragmenter() Declaration public SimpleFragmenter() | Improve this Doc View Source SimpleFragmenter(Int32) Declaration public SimpleFragmenter(int fragmentSize) Parameters Type Name Description System.Int32 fragmentSize size in number of characters of each fragment Properties | Improve this Doc View Source FragmentSize Gets or Sets size in number of characters of each fragment Declaration public virtual int FragmentSize { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IsNewFragment() IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream stream) Parameters Type Name Description System.String originalText TokenStream stream Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLEncoder.html",
    "title": "Class SimpleHTMLEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleHTMLEncoder Simple IEncoder implementation to escape text for HTML output Inheritance System.Object SimpleHTMLEncoder Implements IEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleHTMLEncoder : IEncoder Constructors | Improve this Doc View Source SimpleHTMLEncoder() Declaration public SimpleHTMLEncoder() Methods | Improve this Doc View Source EncodeText(String) Declaration public string EncodeText(string originalText) Parameters Type Name Description System.String originalText Returns Type Description System.String | Improve this Doc View Source HtmlEncode(String) Encode string into HTML Declaration public static string HtmlEncode(string plainText) Parameters Type Name Description System.String plainText Returns Type Description System.String Implements IEncoder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLFormatter.html",
    "title": "Class SimpleHTMLFormatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleHTMLFormatter Simple IFormatter implementation to highlight terms with a pre and post tag Inheritance System.Object SimpleHTMLFormatter Implements IFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleHTMLFormatter : IFormatter Constructors | Improve this Doc View Source SimpleHTMLFormatter() Default constructor uses HTML: <B> tags to markup terms Declaration public SimpleHTMLFormatter() | Improve this Doc View Source SimpleHTMLFormatter(String, String) Declaration public SimpleHTMLFormatter(string preTag, string postTag) Parameters Type Name Description System.String preTag System.String postTag Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) HighlightTerm(String, TokenGroup) Declaration public virtual string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Implements IFormatter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleSpanFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleSpanFragmenter.html",
    "title": "Class SimpleSpanFragmenter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleSpanFragmenter IFragmenter implementation which breaks text up into same-size fragments but does not split up Spans . This is a simple sample class. Inheritance System.Object SimpleSpanFragmenter Implements IFragmenter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleSpanFragmenter : IFragmenter Constructors | Improve this Doc View Source SimpleSpanFragmenter(QueryScorer) Declaration public SimpleSpanFragmenter(QueryScorer queryScorer) Parameters Type Name Description QueryScorer queryScorer QueryScorer that was used to score hits | Improve this Doc View Source SimpleSpanFragmenter(QueryScorer, Int32) Declaration public SimpleSpanFragmenter(QueryScorer queryScorer, int fragmentSize) Parameters Type Name Description QueryScorer queryScorer QueryScorer that was used to score hits System.Int32 fragmentSize size in bytes of each fragment Methods | Improve this Doc View Source IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean See Also IsNewFragment () | Improve this Doc View Source Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText TokenStream tokenStream See Also Start ( System.String , TokenStream ) Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SpanGradientFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SpanGradientFormatter.html",
    "title": "Class SpanGradientFormatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanGradientFormatter Formats text with different color intensity depending on the score of the term using the span tag. GradientFormatter uses a bgcolor argument to the font tag which doesn't work in Mozilla, thus this class. Inheritance System.Object GradientFormatter SpanGradientFormatter Implements IFormatter Inherited Members GradientFormatter.m_fgRMin GradientFormatter.m_fgGMin GradientFormatter.m_fgBMin GradientFormatter.m_fgRMax GradientFormatter.m_fgGMax GradientFormatter.m_fgBMax GradientFormatter.m_highlightForeground GradientFormatter.m_bgRMin GradientFormatter.m_bgGMin GradientFormatter.m_bgBMin GradientFormatter.m_bgRMax GradientFormatter.m_bgGMax GradientFormatter.m_bgBMax GradientFormatter.m_highlightBackground GradientFormatter.GetForegroundColorString(Single) GradientFormatter.GetBackgroundColorString(Single) GradientFormatter.HexToInt32(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.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SpanGradientFormatter : GradientFormatter, IFormatter Constructors | Improve this Doc View Source SpanGradientFormatter(Single, String, String, String, String) Declaration public SpanGradientFormatter(float maxScore, string minForegroundColor, string maxForegroundColor, string minBackgroundColor, string maxBackgroundColor) Parameters Type Name Description System.Single maxScore System.String minForegroundColor System.String maxForegroundColor System.String minBackgroundColor System.String maxBackgroundColor Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration public override string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Overrides GradientFormatter.HighlightTerm(String, TokenGroup) Implements IFormatter See Also GradientFormatter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TextFragment.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TextFragment.html",
    "title": "Class TextFragment | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TextFragment Low-level class used to record information about a section of a document with a score. Inheritance System.Object TextFragment 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) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TextFragment Constructors | Improve this Doc View Source TextFragment(StringBuilder, Int32, Int32) Declaration public TextFragment(StringBuilder markedUpText, int textStartPos, int fragNum) Parameters Type Name Description System.Text.StringBuilder markedUpText System.Int32 textStartPos System.Int32 fragNum Properties | Improve this Doc View Source FragNum the fragment sequence number Declaration public virtual int FragNum { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score Declaration public virtual float Score { get; protected set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Follows(TextFragment) true if this fragment follows the one passed Declaration public virtual bool Follows(TextFragment fragment) Parameters Type Name Description TextFragment fragment Returns Type Description System.Boolean | Improve this Doc View Source Merge(TextFragment) Declaration public virtual void Merge(TextFragment frag2) Parameters Type Name Description TextFragment frag2 Fragment to be merged into this one | Improve this Doc View Source ToString() Returns the marked-up text for this text fragment Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenGroup.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenGroup.html",
    "title": "Class TokenGroup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenGroup One, or several overlapping tokens, along with the score(s) and the scope of the original text Inheritance System.Object TokenGroup Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TokenGroup Constructors | Improve this Doc View Source TokenGroup(TokenStream) Declaration public TokenGroup(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Properties | Improve this Doc View Source EndOffset the end position in the original text Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumTokens the number of tokens in this group Declaration public virtual int NumTokens { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset the start position in the original text Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalScore all tokens' scores summed up Declaration public virtual float TotalScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetScore(Int32) the \"n\"th score Declaration public virtual float GetScore(int index) Parameters Type Name Description System.Int32 index a value between 0 and numTokens -1 Returns Type Description System.Single | Improve this Doc View Source GetToken(Int32) the \"n\"th token Declaration public virtual Token GetToken(int index) Parameters Type Name Description System.Int32 index a value between 0 and numTokens -1 Returns Type Description Token"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenSources.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenSources.html",
    "title": "Class TokenSources | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenSources Hides implementation issues associated with obtaining a TokenStream for use with the Highlighter - can obtain from term vectors with offsets and positions or from an Analyzer re-parsing the stored content. see TokenStreamFromTermVector Inheritance System.Object TokenSources Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TokenSources Methods | Improve this Doc View Source GetAnyTokenStream(IndexReader, Int32, String, Analyzer) A convenience method that tries a number of approaches to getting a token stream. The cost of finding there are no termVectors in the index is minimal (1000 invocations still registers 0 ms). So this \"lazy\" (flexible?) approach to coding is probably acceptable Declaration public static TokenStream GetAnyTokenStream(IndexReader reader, int docId, string field, Analyzer analyzer) Parameters Type Name Description IndexReader reader System.Int32 docId System.String field Analyzer analyzer Returns Type Description TokenStream null if field not stored correctly Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetAnyTokenStream(IndexReader, Int32, String, Document, Analyzer) A convenience method that tries to first get a TermPositionVector for the specified docId, then, falls back to using the passed in Document to retrieve the TokenStream . This is useful when you already have the document, but would prefer to use the vector first. Declaration public static TokenStream GetAnyTokenStream(IndexReader reader, int docId, string field, Document doc, Analyzer analyzer) Parameters Type Name Description IndexReader reader The IndexReader to use to try and get the vector from System.Int32 docId The docId to retrieve. System.String field The field to retrieve on the document Document doc The document to fall back on Analyzer analyzer The analyzer to use for creating the TokenStream if the vector doesn't exist Returns Type Description TokenStream The TokenStream for the IIndexableField on the Document Exceptions Type Condition System.IO.IOException if there was an error loading | Improve this Doc View Source GetTokenStream(Document, String, Analyzer) Declaration public static TokenStream GetTokenStream(Document doc, string field, Analyzer analyzer) Parameters Type Name Description Document doc System.String field Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(IndexReader, Int32, String, Analyzer) Declaration public static TokenStream GetTokenStream(IndexReader reader, int docId, string field, Analyzer analyzer) Parameters Type Name Description IndexReader reader System.Int32 docId System.String field Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(Terms) Declaration public static TokenStream GetTokenStream(Terms vector) Parameters Type Name Description Terms vector Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(Terms, Boolean) Low level api. Returns a token stream generated from a Terms . This can be used to feed the highlighter with a pre-parsed token stream. The Terms must have offsets available. In my tests the speeds to recreate 1000 token streams using this method are: with TermVector offset only data stored - 420 milliseconds with TermVector offset AND position data stored - 271 milliseconds (nb timings for TermVector with position data are based on a tokenizer with contiguous positions - no overlaps or gaps) The cost of not using TermPositionVector to store pre-parsed content and using an analyzer to re-parse the original content: reanalyzing the original content - 980 milliseconds The re-analyze timings will typically vary depending on - The complexity of the analyzer code (timings above were using a stemmer/lowercaser/stopword combo) The number of other fields (Lucene reads ALL fields off the disk when accessing just one document field - can cost dear!) Use of compression on field storage - could be faster due to compression (less disk IO) or slower (more CPU burn) depending on the content. Declaration public static TokenStream GetTokenStream(Terms tpv, bool tokenPositionsGuaranteedContiguous) Parameters Type Name Description Terms tpv System.Boolean tokenPositionsGuaranteedContiguous true if the token position numbers have no overlaps or gaps. If looking to eek out the last drops of performance, set to true. If in doubt, set to false. Returns Type Description TokenStream Exceptions Type Condition System.ArgumentException if no offsets are available | Improve this Doc View Source GetTokenStream(String, String, Analyzer) Declaration public static TokenStream GetTokenStream(string field, string contents, Analyzer analyzer) Parameters Type Name Description System.String field System.String contents Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStreamWithOffsets(IndexReader, Int32, String) Returns a TokenStream with positions and offsets constructed from field termvectors. If the field has no termvectors or offsets are not included in the termvector, return null. See GetTokenStream(Terms) for an explanation of what happens when positions aren't present. Declaration public static TokenStream GetTokenStreamWithOffsets(IndexReader reader, int docId, string field) Parameters Type Name Description IndexReader reader the IndexReader to retrieve term vectors from System.Int32 docId the document to retrieve term vectors for System.String field the field to retrieve term vectors for Returns Type Description TokenStream a TokenStream , or null if offsets are not available Exceptions Type Condition System.IO.IOException If there is a low-level I/O error"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenStreamFromTermPositionVector.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenStreamFromTermPositionVector.html",
    "title": "Class TokenStreamFromTermPositionVector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenStreamFromTermPositionVector TokenStream created from a term vector field. Inheritance System.Object AttributeSource TokenStream TokenStreamFromTermPositionVector Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public sealed class TokenStreamFromTermPositionVector : TokenStream, IDisposable Constructors | Improve this Doc View Source TokenStreamFromTermPositionVector(Terms) Constructor Declaration public TokenStreamFromTermPositionVector(Terms vector) Parameters Type Name Description Terms vector Terms that contains the data for creating the TokenStream . Must have positions and offsets. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTerm.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTerm.html",
    "title": "Class WeightedSpanTerm | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WeightedSpanTerm Lightweight class to hold term, weight, and positions used for scoring this term. Inheritance System.Object WeightedTerm WeightedSpanTerm Inherited Members WeightedTerm.Term WeightedTerm.Weight System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedSpanTerm : WeightedTerm Constructors | Improve this Doc View Source WeightedSpanTerm(Single, String) Declaration public WeightedSpanTerm(float weight, string term) Parameters Type Name Description System.Single weight System.String term | Improve this Doc View Source WeightedSpanTerm(Single, String, Boolean) Declaration public WeightedSpanTerm(float weight, string term, bool positionSensitive) Parameters Type Name Description System.Single weight System.String term System.Boolean positionSensitive Properties | Improve this Doc View Source IsPositionSensitive Declaration public virtual bool IsPositionSensitive { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source PositionSpans Declaration public virtual IList<PositionSpan> PositionSpans { get; } Property Value Type Description System.Collections.Generic.IList < PositionSpan > Methods | Improve this Doc View Source AddPositionSpans(IList<PositionSpan>) Declaration public virtual void AddPositionSpans(IList<PositionSpan> positionSpans) Parameters Type Name Description System.Collections.Generic.IList < PositionSpan > positionSpans | Improve this Doc View Source CheckPosition(Int32) Checks to see if this term is valid at position . Declaration public virtual bool CheckPosition(int position) Parameters Type Name Description System.Int32 position to check against valid term postions Returns Type Description System.Boolean true iff this term is a hit at this position"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.html",
    "title": "Class WeightedSpanTermExtractor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WeightedSpanTermExtractor Class used to extract WeightedSpanTerm s from a Query based on whether Term s from the Query are contained in a supplied TokenStream . Inheritance System.Object WeightedSpanTermExtractor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedSpanTermExtractor Constructors | Improve this Doc View Source WeightedSpanTermExtractor() Declaration public WeightedSpanTermExtractor() | Improve this Doc View Source WeightedSpanTermExtractor(String) Declaration public WeightedSpanTermExtractor(string defaultField) Parameters Type Name Description System.String defaultField Properties | Improve this Doc View Source ExpandMultiTermQuery Declaration public virtual bool ExpandMultiTermQuery { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsCachedTokenStream Declaration public virtual bool IsCachedTokenStream { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TokenStream Declaration public virtual TokenStream TokenStream { get; } Property Value Type Description TokenStream Methods | Improve this Doc View Source CollectSpanQueryFields(SpanQuery, ISet<String>) Declaration protected virtual void CollectSpanQueryFields(SpanQuery spanQuery, ISet<string> fieldNames) Parameters Type Name Description SpanQuery spanQuery System.Collections.Generic.ISet < System.String > fieldNames | Improve this Doc View Source Extract(Query, IDictionary<String, WeightedSpanTerm>) Fills a with WeightedSpanTerm s using the terms from the supplied query . Declaration protected virtual void Extract(Query query, IDictionary<string, WeightedSpanTerm> terms) Parameters Type Name Description Query query Query to extract Terms from System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms Map to place created WeightedSpanTerm s in Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source ExtractUnknownQuery(Query, IDictionary<String, WeightedSpanTerm>) Declaration protected virtual void ExtractUnknownQuery(Query query, IDictionary<string, WeightedSpanTerm> terms) Parameters Type Name Description Query query System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms | Improve this Doc View Source ExtractWeightedSpanTerms(IDictionary<String, WeightedSpanTerm>, SpanQuery) Fills a with WeightedSpanTerm s using the terms from the supplied SpanQuery . Declaration protected virtual void ExtractWeightedSpanTerms(IDictionary<string, WeightedSpanTerm> terms, SpanQuery spanQuery) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms to place created WeightedSpanTerm s in SpanQuery spanQuery SpanQuery to extract Terms from Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source ExtractWeightedTerms(IDictionary<String, WeightedSpanTerm>, Query) Fills a with WeightedSpanTerm s using the terms from the supplied SpanQuery . Declaration protected virtual void ExtractWeightedTerms(IDictionary<string, WeightedSpanTerm> terms, Query query) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms to place created WeightedSpanTerm s in Query query Query to extract Terms from Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source FieldNameComparer(String) Necessary to implement matches for queries against Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.defaultField Declaration protected virtual bool FieldNameComparer(string fieldNameToCheck) Parameters Type Name Description System.String fieldNameToCheck Returns Type Description System.Boolean | Improve this Doc View Source GetLeafContext() Declaration protected virtual AtomicReaderContext GetLeafContext() Returns Type Description AtomicReaderContext | Improve this Doc View Source GetWeightedSpanTerms(Query, TokenStream) Creates an from the given Query and TokenStream . Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTerms(Query query, TokenStream tokenStream) Parameters Type Name Description Query query Query that caused hit TokenStream tokenStream TokenStream of text to be highlighted Returns Type Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > Map containing WeightedSpanTerm s Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetWeightedSpanTerms(Query, TokenStream, String) Creates an from the given Query and TokenStream . Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTerms(Query query, TokenStream tokenStream, string fieldName) Parameters Type Name Description Query query Query that caused hit TokenStream tokenStream TokenStream of text to be highlighted System.String fieldName restricts Term's used based on field name Returns Type Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > Map containing WeightedSpanTerm s Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetWeightedSpanTermsWithScores(Query, TokenStream, String, IndexReader) Creates an from the given Query and TokenStream . Uses a supplied IndexReader to properly Weight terms (for gradient highlighting). Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTermsWithScores(Query query, TokenStream tokenStream, string fieldName, IndexReader reader) Parameters Type Name Description Query query Query that caused hit TokenStream tokenStream TokenStream of text to be highlighted System.String fieldName restricts Term's used based on field name IndexReader reader to use for scoring Returns Type Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > Map of WeightedSpanTerm s with quasi tf/idf scores Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source MustRewriteQuery(SpanQuery) Declaration protected virtual bool MustRewriteQuery(SpanQuery spanQuery) Parameters Type Name Description SpanQuery spanQuery Returns Type Description System.Boolean | Improve this Doc View Source SetMaxDocCharsToAnalyze(Int32) Declaration protected void SetMaxDocCharsToAnalyze(int maxDocCharsToAnalyze) Parameters Type Name Description System.Int32 maxDocCharsToAnalyze | Improve this Doc View Source SetWrapIfNotCachingTokenFilter(Boolean) By default, TokenStream s that are not of the type CachingTokenFilter are wrapped in a CachingTokenFilter to TokenStream impl and you don't want it to be wrapped, set this to false. Declaration public virtual void SetWrapIfNotCachingTokenFilter(bool wrap) Parameters Type Name Description System.Boolean wrap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.PositionCheckingMap-1.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.PositionCheckingMap-1.html",
    "title": "Class WeightedSpanTermExtractor.PositionCheckingMap<K> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WeightedSpanTermExtractor.PositionCheckingMap<K> This class makes sure that if both position sensitive and insensitive versions of the same term are added, the position insensitive one wins. Inheritance System.Object WeightedSpanTermExtractor.PositionCheckingMap<K> Implements System.Collections.Generic.IDictionary <K, WeightedSpanTerm > System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >> 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.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax protected class PositionCheckingMap<K> : IDictionary<K, WeightedSpanTerm>, ICollection<KeyValuePair<K, WeightedSpanTerm>>, IEnumerable<KeyValuePair<K, WeightedSpanTerm>>, IEnumerable Type Parameters Name Description K Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[K] Declaration public WeightedSpanTerm this[K key] { get; set; } Parameters Type Name Description K key Property Value Type Description WeightedSpanTerm | Improve this Doc View Source Keys Declaration public ICollection<K> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <K> | Improve this Doc View Source Values Declaration public ICollection<WeightedSpanTerm> Values { get; } Property Value Type Description System.Collections.Generic.ICollection < WeightedSpanTerm > Methods | Improve this Doc View Source Add(K, WeightedSpanTerm) Declaration public void Add(K key, WeightedSpanTerm value) Parameters Type Name Description K key WeightedSpanTerm value | Improve this Doc View Source Add(KeyValuePair<K, WeightedSpanTerm>) Declaration public void Add(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm > item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<K, WeightedSpanTerm>) Declaration public bool Contains(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm > item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(K) Declaration public bool ContainsKey(K key) Parameters Type Name Description K key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<K, WeightedSpanTerm>[], Int32) Declaration public void CopyTo(KeyValuePair<K, WeightedSpanTerm>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<K, WeightedSpanTerm>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >> | Improve this Doc View Source Remove(K) Declaration public bool Remove(K key) Parameters Type Name Description K key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<K, WeightedSpanTerm>) Declaration public bool Remove(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm > item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(K, out WeightedSpanTerm) Declaration public bool TryGetValue(K key, out WeightedSpanTerm value) Parameters Type Name Description K key WeightedSpanTerm 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"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedTerm.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedTerm.html",
    "title": "Class WeightedTerm | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WeightedTerm Lightweight class to hold term and a Weight value used for scoring this term Inheritance System.Object WeightedTerm WeightedSpanTerm Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedTerm Constructors | Improve this Doc View Source WeightedTerm(Single, String) Declaration public WeightedTerm(float weight, string term) Parameters Type Name Description System.Single weight System.String term Properties | Improve this Doc View Source Term the term value (stemmed) Declaration public virtual string Term { get; set; } Property Value Type Description System.String | Improve this Doc View Source Weight the Weight associated with this term Declaration public virtual float Weight { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragListBuilder.html",
    "title": "Class BaseFragListBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseFragListBuilder A abstract implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder SimpleFragListBuilder WeightedFragListBuilder Implements IFragListBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class BaseFragListBuilder : IFragListBuilder Constructors | Improve this Doc View Source BaseFragListBuilder() Declaration public BaseFragListBuilder() | Improve this Doc View Source BaseFragListBuilder(Int32) Declaration public BaseFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Fields | Improve this Doc View Source MARGIN_DEFAULT Declaration public static readonly int MARGIN_DEFAULT Field Value Type Description System.Int32 | Improve this Doc View Source MIN_FRAG_CHAR_SIZE_FACTOR Declaration public static readonly int MIN_FRAG_CHAR_SIZE_FACTOR Field Value Type Description System.Int32 Methods | Improve this Doc View Source AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) A predicate to decide if the given FieldPhraseList.WeightedPhraseInfo should be accepted as a highlighted phrase or if it should be discarded. The default implementation discards phrases that are composed of more than one term and where the matchLength exceeds the fragment character size. Declaration protected virtual bool AcceptPhrase(FieldPhraseList.WeightedPhraseInfo info, int matchLength, int fragCharSize) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo info the phrase info to accept System.Int32 matchLength the match length of the current phrase System.Int32 fragCharSize the configured fragment character size Returns Type Description System.Boolean true if this phrase info should be accepted as a highligh phrase | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) Declaration protected virtual FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, FieldFragList fieldFragList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList FieldFragList fieldFragList System.Int32 fragCharSize Returns Type Description FieldFragList | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) Declaration public abstract FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragmentsBuilder.html",
    "title": "Class BaseFragmentsBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseFragmentsBuilder Base IFragmentsBuilder implementation that supports colored pre/post tags and multivalued fields. Uses IBoundaryScanner to determine fragments. Inheritance System.Object BaseFragmentsBuilder ScoreOrderFragmentsBuilder SimpleFragmentsBuilder Implements IFragmentsBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class BaseFragmentsBuilder : IFragmentsBuilder Constructors | Improve this Doc View Source BaseFragmentsBuilder() Declaration protected BaseFragmentsBuilder() | Improve this Doc View Source BaseFragmentsBuilder(IBoundaryScanner) Declaration protected BaseFragmentsBuilder(IBoundaryScanner boundaryScanner) Parameters Type Name Description IBoundaryScanner boundaryScanner | Improve this Doc View Source BaseFragmentsBuilder(String[], String[]) Declaration protected BaseFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags System.String [] postTags | Improve this Doc View Source BaseFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration protected BaseFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner boundaryScanner) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner boundaryScanner Fields | Improve this Doc View Source COLORED_POST_TAGS Declaration public static readonly string[] COLORED_POST_TAGS Field Value Type Description System.String [] | Improve this Doc View Source COLORED_PRE_TAGS Declaration public static readonly string[] COLORED_PRE_TAGS Field Value Type Description System.String [] | Improve this Doc View Source m_postTags Declaration protected string[] m_postTags Field Value Type Description System.String [] | Improve this Doc View Source m_preTags Declaration protected string[] m_preTags Field Value Type Description System.String [] Properties | Improve this Doc View Source IsDiscreteMultiValueHighlighting Declaration public virtual bool IsDiscreteMultiValueHighlighting { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiValuedSeparator Declaration public virtual char MultiValuedSeparator { get; set; } Property Value Type Description System.Char Methods | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList) Declaration public virtual string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList Returns Type Description System.String | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) Declaration public virtual string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) Declaration public virtual string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.Int32 maxNumFragments Returns Type Description System.String [] | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) Declaration public virtual string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.Int32 maxNumFragments System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String [] | Improve this Doc View Source DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) Declaration protected virtual IList<FieldFragList.WeightedFragInfo> DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo> fragInfos, Field[] fields) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > fragInfos Field [] fields Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > | Improve this Doc View Source GetFields(IndexReader, Int32, String) Declaration protected virtual Field[] GetFields(IndexReader reader, int docId, string fieldName) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName Returns Type Description Field [] | Improve this Doc View Source GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) Declaration protected virtual string GetFragmentSource(StringBuilder buffer, int[] index, Field[] values, int startOffset, int endOffset) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 [] index Field [] values System.Int32 startOffset System.Int32 endOffset Returns Type Description System.String | Improve this Doc View Source GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) Declaration protected virtual string GetFragmentSourceMSO(StringBuilder buffer, int[] index, Field[] values, int startOffset, int endOffset, int[] modifiedStartOffset) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 [] index Field [] values System.Int32 startOffset System.Int32 endOffset System.Int32 [] modifiedStartOffset Returns Type Description System.String | Improve this Doc View Source GetPostTag(Int32) Declaration protected virtual string GetPostTag(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPostTag(String[], Int32) Declaration protected virtual string GetPostTag(string[] postTags, int num) Parameters Type Name Description System.String [] postTags System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPreTag(Int32) Declaration protected virtual string GetPreTag(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPreTag(String[], Int32) Declaration protected virtual string GetPreTag(string[] preTags, int num) Parameters Type Name Description System.String [] preTags System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Declaration public abstract IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > src Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > | Improve this Doc View Source MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) Declaration protected virtual string MakeFragment(StringBuilder buffer, int[] index, Field[] values, FieldFragList.WeightedFragInfo fragInfo, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 [] index Field [] values FieldFragList.WeightedFragInfo fragInfo System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FastVectorHighlighter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FastVectorHighlighter.html",
    "title": "Class FastVectorHighlighter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FastVectorHighlighter Another highlighter implementation. Inheritance System.Object FastVectorHighlighter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FastVectorHighlighter Constructors | Improve this Doc View Source FastVectorHighlighter() the default constructor. Declaration public FastVectorHighlighter() | Improve this Doc View Source FastVectorHighlighter(Boolean, Boolean) a constructor. Using SimpleFragListBuilder and ScoreOrderFragmentsBuilder . Declaration public FastVectorHighlighter(bool phraseHighlight, bool fieldMatch) Parameters Type Name Description System.Boolean phraseHighlight true or false for phrase highlighting System.Boolean fieldMatch true of false for field matching | Improve this Doc View Source FastVectorHighlighter(Boolean, Boolean, IFragListBuilder, IFragmentsBuilder) a constructor. A IFragListBuilder and a IFragmentsBuilder can be specified (plugins). Declaration public FastVectorHighlighter(bool phraseHighlight, bool fieldMatch, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder) Parameters Type Name Description System.Boolean phraseHighlight true of false for phrase highlighting System.Boolean fieldMatch true of false for field matching IFragListBuilder fragListBuilder an instance of IFragmentsBuilder IFragmentsBuilder fragmentsBuilder an instance of IFragmentsBuilder Fields | Improve this Doc View Source DEFAULT_FIELD_MATCH Declaration public static readonly bool DEFAULT_FIELD_MATCH Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_PHRASE_HIGHLIGHT Declaration public static readonly bool DEFAULT_PHRASE_HIGHLIGHT Field Value Type Description System.Boolean Properties | Improve this Doc View Source IsFieldMatch return whether fieldMatch or not. Declaration public virtual bool IsFieldMatch { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsPhraseHighlight return whether phraseHighlight or not. Declaration public virtual bool IsPhraseHighlight { get; } Property Value Type Description System.Boolean | Improve this Doc View Source PhraseLimit Gets or Sets the maximum number of phrases to analyze when searching for the highest-scoring phrase. The default is unlimited (int.MaxValue). Declaration public virtual int PhraseLimit { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetBestFragment(FieldQuery, IndexReader, Int32, String, Int32) return the best fragment. Declaration public string GetBestFragment(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment Returns Type Description System.String the best fragment (snippet) string Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragment(FieldQuery, IndexReader, Int32, String, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) return the best fragment. Declaration public string GetBestFragment(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String the best fragment (snippet) string Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, ISet<String>, Int32, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) Return the best fragments. Matches are scanned from matchedFields and turned into fragments against storedField . The highlighting may not make sense if matchedFields has matches with offsets that don't correspond features in storedField . It will outright throw a System.IndexOutOfRangeException if matchedFields produces offsets outside of storedField . As such it is advisable that all matchedFields share the same source as storedField or are at least a prefix of it. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string storedField, ISet<string> matchedFields, int fragCharSize, int maxNumFragments, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String storedField field of the document that stores the text System.Collections.Generic.ISet < System.String > matchedFields fields of the document to scan for matches System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, Int32, Int32) return the best fragments. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, int maxNumFragments) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, Int32, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) return the best fragments. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, int maxNumFragments, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetFieldQuery(Query) create a FieldQuery object. Declaration public virtual FieldQuery GetFieldQuery(Query query) Parameters Type Name Description Query query a query Returns Type Description FieldQuery the created FieldQuery object | Improve this Doc View Source GetFieldQuery(Query, IndexReader) create a FieldQuery object. Declaration public virtual FieldQuery GetFieldQuery(Query query, IndexReader reader) Parameters Type Name Description Query query a query IndexReader reader Returns Type Description FieldQuery the created FieldQuery object"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.html",
    "title": "Class FieldFragList | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldFragList FieldFragList has a list of \"frag info\" that is used by IFragmentsBuilder class to create fragments (snippets). Inheritance System.Object FieldFragList SimpleFieldFragList WeightedFieldFragList Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class FieldFragList Constructors | Improve this Doc View Source FieldFragList(Int32) a constructor. Declaration public FieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Properties | Improve this Doc View Source FragInfos return the list of FieldFragList.WeightedFragInfo s. Declaration public virtual IList<FieldFragList.WeightedFragInfo> FragInfos { get; } Property Value Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) convert the list of FieldPhraseList.WeightedPhraseInfo to FieldFragList.WeightedFragInfo , then add it to the fragInfos Declaration public abstract void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset start offset of the fragment System.Int32 endOffset end offset of the fragment System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList list of FieldPhraseList.WeightedPhraseInfo objects"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.html",
    "title": "Class FieldFragList.WeightedFragInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldFragList.WeightedFragInfo List of term offsets + weight for a frag info Inheritance System.Object FieldFragList.WeightedFragInfo 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) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFragInfo Constructors | Improve this Doc View Source WeightedFragInfo(Int32, Int32, IList<FieldFragList.WeightedFragInfo.SubInfo>, Single) Declaration public WeightedFragInfo(int startOffset, int endOffset, IList<FieldFragList.WeightedFragInfo.SubInfo> subInfos, float totalBoost) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset System.Collections.Generic.IList < FieldFragList.WeightedFragInfo.SubInfo > subInfos System.Single totalBoost Properties | Improve this Doc View Source EndOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SubInfos Declaration public IList<FieldFragList.WeightedFragInfo.SubInfo> SubInfos { get; } Property Value Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo.SubInfo > | Improve this Doc View Source TotalBoost Declaration public float TotalBoost { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.SubInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.SubInfo.html",
    "title": "Class FieldFragList.WeightedFragInfo.SubInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldFragList.WeightedFragInfo.SubInfo Represents the list of term offsets for some text Inheritance System.Object FieldFragList.WeightedFragInfo.SubInfo 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) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SubInfo Constructors | Improve this Doc View Source SubInfo(String, IList<FieldPhraseList.WeightedPhraseInfo.Toffs>, Int32, Single) Declaration public SubInfo(string text, IList<FieldPhraseList.WeightedPhraseInfo.Toffs> termsOffsets, int seqnum, float boost) Parameters Type Name Description System.String text System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo.Toffs > termsOffsets System.Int32 seqnum System.Single boost Properties | Improve this Doc View Source Boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source Seqnum Declaration public virtual int Seqnum { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsOffsets Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo.Toffs> TermsOffsets { get; } Property Value Type Description System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo.Toffs > | Improve this Doc View Source Text Declaration public virtual string Text { 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 System.Object.ToString()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.html",
    "title": "Class FieldPhraseList | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldPhraseList FieldPhraseList has a list of WeightedPhraseInfo that is used by FragListBuilder to create a FieldFragList object. Inheritance System.Object FieldPhraseList Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldPhraseList Constructors | Improve this Doc View Source FieldPhraseList(FieldPhraseList[]) Merging constructor. Declaration public FieldPhraseList(FieldPhraseList[] toMerge) Parameters Type Name Description FieldPhraseList [] toMerge FieldPhraseList s to merge to build this one | Improve this Doc View Source FieldPhraseList(FieldTermStack, FieldQuery) create a FieldPhraseList that has no limit on the number of phrases to analyze Declaration public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery) Parameters Type Name Description FieldTermStack fieldTermStack FieldTermStack object FieldQuery fieldQuery FieldQuery object | Improve this Doc View Source FieldPhraseList(FieldTermStack, FieldQuery, Int32) a constructor. Declaration public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery, int phraseLimit) Parameters Type Name Description FieldTermStack fieldTermStack FieldTermStack object FieldQuery fieldQuery FieldQuery object System.Int32 phraseLimit maximum size of phraseList Properties | Improve this Doc View Source PhraseList return the list of FieldPhraseList.WeightedPhraseInfo . Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo> PhraseList { get; } Property Value Type Description System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > Methods | Improve this Doc View Source AddIfNoOverlap(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual void AddIfNoOverlap(FieldPhraseList.WeightedPhraseInfo wpi) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo wpi"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.html",
    "title": "Class FieldPhraseList.WeightedPhraseInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldPhraseList.WeightedPhraseInfo Represents the list of term offsets and boost for some text Inheritance System.Object FieldPhraseList.WeightedPhraseInfo Implements System.IComparable < FieldPhraseList.WeightedPhraseInfo > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedPhraseInfo : IComparable<FieldPhraseList.WeightedPhraseInfo> Constructors | Improve this Doc View Source WeightedPhraseInfo(ICollection<FieldPhraseList.WeightedPhraseInfo>) Merging constructor. Note that this just grabs seqnum from the first info. Declaration public WeightedPhraseInfo(ICollection<FieldPhraseList.WeightedPhraseInfo> toMerge) Parameters Type Name Description System.Collections.Generic.ICollection < FieldPhraseList.WeightedPhraseInfo > toMerge | Improve this Doc View Source WeightedPhraseInfo(IList<FieldTermStack.TermInfo>, Single) Declaration public WeightedPhraseInfo(IList<FieldTermStack.TermInfo> terms, float boost) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > terms System.Single boost | Improve this Doc View Source WeightedPhraseInfo(IList<FieldTermStack.TermInfo>, Single, Int32) Declaration public WeightedPhraseInfo(IList<FieldTermStack.TermInfo> terms, float boost, int seqnum) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > terms System.Single boost System.Int32 seqnum Properties | Improve this Doc View Source Boost the boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Seqnum the seqnum Declaration public virtual int Seqnum { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsInfos the termInfos Declaration public virtual IList<FieldTermStack.TermInfo> TermsInfos { get; } Property Value Type Description System.Collections.Generic.IList < FieldTermStack.TermInfo > | Improve this Doc View Source TermsOffsets the termsOffsets Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo.Toffs> TermsOffsets { get; } Property Value Type Description System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo.Toffs > Methods | Improve this Doc View Source CompareTo(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual int CompareTo(FieldPhraseList.WeightedPhraseInfo other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo 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 GetText() Text of the match, calculated on the fly. Use for debugging only. Declaration public virtual string GetText() Returns Type Description System.String the text | Improve this Doc View Source IsOffsetOverlap(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual bool IsOffsetOverlap(FieldPhraseList.WeightedPhraseInfo other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo other Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.Toffs.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.Toffs.html",
    "title": "Class FieldPhraseList.WeightedPhraseInfo.Toffs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldPhraseList.WeightedPhraseInfo.Toffs Term offsets (start + end) Inheritance System.Object FieldPhraseList.WeightedPhraseInfo.Toffs Implements System.IComparable < FieldPhraseList.WeightedPhraseInfo.Toffs > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class Toffs : IComparable<FieldPhraseList.WeightedPhraseInfo.Toffs> Constructors | Improve this Doc View Source Toffs(Int32, Int32) Declaration public Toffs(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(FieldPhraseList.WeightedPhraseInfo.Toffs) Declaration public virtual int CompareTo(FieldPhraseList.WeightedPhraseInfo.Toffs other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo.Toffs 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 ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.html",
    "title": "Class FieldQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldQuery FieldQuery breaks down query object into terms/phrases and keeps them in a FieldQuery.QueryPhraseMap structure. Inheritance System.Object FieldQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldQuery Methods | Improve this Doc View Source ApplyParentBoost(Query, Query) Push parent's boost into a clone of query if parent has a non 1 boost. Declaration protected virtual Query ApplyParentBoost(Query query, Query parent) Parameters Type Name Description Query query Query parent Returns Type Description Query | Improve this Doc View Source GetFieldTermMap(String, String) Declaration public virtual FieldQuery.QueryPhraseMap GetFieldTermMap(string fieldName, string term) Parameters Type Name Description System.String fieldName System.String term Returns Type Description FieldQuery.QueryPhraseMap QueryPhraseMap | Improve this Doc View Source SearchPhrase(String, IList<FieldTermStack.TermInfo>) Declaration public virtual FieldQuery.QueryPhraseMap SearchPhrase(string fieldName, IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description System.String fieldName System.Collections.Generic.IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description FieldQuery.QueryPhraseMap QueryPhraseMap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.QueryPhraseMap.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.QueryPhraseMap.html",
    "title": "Class FieldQuery.QueryPhraseMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldQuery.QueryPhraseMap Internal structure of a query for highlighting: represents a nested query structure Inheritance System.Object FieldQuery.QueryPhraseMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryPhraseMap Constructors | Improve this Doc View Source QueryPhraseMap(FieldQuery) Declaration public QueryPhraseMap(FieldQuery fieldQuery) Parameters Type Name Description FieldQuery fieldQuery Properties | Improve this Doc View Source Boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source IsTerminal Declaration public virtual bool IsTerminal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Slop Declaration public virtual int Slop { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermOrPhraseNumber Declaration public virtual int TermOrPhraseNumber { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetTermMap(String) Declaration public virtual FieldQuery.QueryPhraseMap GetTermMap(string term) Parameters Type Name Description System.String term Returns Type Description FieldQuery.QueryPhraseMap | Improve this Doc View Source IsValidTermOrPhrase(IList<FieldTermStack.TermInfo>) Declaration public virtual bool IsValidTermOrPhrase(IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description System.Boolean | Improve this Doc View Source SearchPhrase(IList<FieldTermStack.TermInfo>) Declaration public virtual FieldQuery.QueryPhraseMap SearchPhrase(IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description FieldQuery.QueryPhraseMap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.html",
    "title": "Class FieldTermStack | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldTermStack FieldTermStack is a stack that keeps query terms in the specified field of the document to be highlighted. Inheritance System.Object FieldTermStack Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldTermStack Constructors | Improve this Doc View Source FieldTermStack(IndexReader, Int32, String, FieldQuery) a constructor. Declaration public FieldTermStack(IndexReader reader, int docId, string fieldName, FieldQuery fieldQuery) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldQuery fieldQuery FieldQuery object Exceptions Type Condition System.IO.IOException If there is a low-level I/O error Properties | Improve this Doc View Source FieldName field name Declaration public virtual string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source IsEmpty to know whether the stack is empty. Returns true if the stack is empty, false if not Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Pop() Returns the top FieldTermStack.TermInfo object of the stack Declaration public virtual FieldTermStack.TermInfo Pop() Returns Type Description FieldTermStack.TermInfo the top FieldTermStack.TermInfo object of the stack | Improve this Doc View Source Push(FieldTermStack.TermInfo) Puts a FieldTermStack.TermInfo onto the top of the stack Declaration public virtual void Push(FieldTermStack.TermInfo termInfo) Parameters Type Name Description FieldTermStack.TermInfo termInfo the FieldTermStack.TermInfo object to be put on the top of the stack"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.TermInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.TermInfo.html",
    "title": "Class FieldTermStack.TermInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldTermStack.TermInfo Single term with its position/offsets in the document and IDF weight. It is System.IComparable<T> but considers only position. Inheritance System.Object FieldTermStack.TermInfo Implements System.IComparable < FieldTermStack.TermInfo > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TermInfo : IComparable<FieldTermStack.TermInfo> Constructors | Improve this Doc View Source TermInfo(String, Int32, Int32, Int32, Single) Declaration public TermInfo(string text, int startOffset, int endOffset, int position, float weight) Parameters Type Name Description System.String text System.Int32 startOffset System.Int32 endOffset System.Int32 position System.Single weight Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Next Returns the next TermInfo at this same position. This is a circular list! Declaration public virtual FieldTermStack.TermInfo Next { get; } Property Value Type Description FieldTermStack.TermInfo | Improve this Doc View Source Position Declaration public virtual int Position { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public virtual string Text { get; } Property Value Type Description System.String | Improve this Doc View Source Weight Declaration public virtual float Weight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source CompareTo(FieldTermStack.TermInfo) Declaration public virtual int CompareTo(FieldTermStack.TermInfo o) Parameters Type Name Description FieldTermStack.TermInfo o 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 ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.html",
    "title": "Namespace Lucene.Net.Search.VectorHighlight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.VectorHighlight <!-- 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 is an another highlighter implementation. Features fast for large docs support N-gram fields support phrase-unit highlighting with slops support multi-term (includes wildcard, range, regexp, etc) queries need Java 1.5 highlight fields need to be stored with Positions and Offsets take into account query boost and/or IDF-weight to score fragments support colored highlight tags pluggable FragListBuilder / FieldFragList pluggable FragmentsBuilder Algorithm To explain the algorithm, let's use the following sample text (to be highlighted) and user query: Sample Text Lucene is a search engine library. User Query Lucene^2 OR \"search library\"~1 The user query is a BooleanQuery that consists of TermQuery(\"Lucene\") with boost of 2 and PhraseQuery(\"search library\") with slop of 1. For your convenience, here is the offsets and positions info of the sample text. +--------+-----------------------------------+ | | 1111111111222222222233333| | offset|01234567890123456789012345678901234| +--------+-----------------------------------+ |document|Lucene is a search engine library. | +--------*-----------------------------------+ |position|0 1 2 3 4 5 | +--------*-----------------------------------+ Step 1. In Step 1, Fast Vector Highlighter generates FieldQuery.QueryPhraseMap from the user query. QueryPhraseMap consists of the following members: public class QueryPhraseMap { boolean terminal; int slop; // valid if terminal == true and phraseHighlight == true float boost; // valid if terminal == true Map<String, QueryPhraseMap> subMap; } QueryPhraseMap has subMap. The key of the subMap is a term text in the user query and the value is a subsequent QueryPhraseMap . If the query is a term (not phrase), then the subsequent QueryPhraseMap is marked as terminal. If the query is a phrase, then the subsequent QueryPhraseMap is not a terminal and it has the next term text in the phrase. From the sample user query, the following QueryPhraseMap will be generated: QueryPhraseMap +--------+-+ +-------+-+ |\"Lucene\"|o+->|boost=2|*| * : terminal +--------+-+ +-------+-+ +--------+-+ +---------+-+ +-------+------+-+ |\"search\"|o+->|\"library\"|o+->|boost=1|slop=1|*| +--------+-+ +---------+-+ +-------+------+-+ Step 2. In Step 2, Fast Vector Highlighter generates FieldTermStack . Fast Vector Highlighter uses term vector data (must be stored #setStoreTermVectorOffsets(boolean) and #setStoreTermVectorPositions(boolean) ) to generate it. FieldTermStack keeps the terms in the user query. Therefore, in this sample case, Fast Vector Highlighter generates the following FieldTermStack : FieldTermStack +------------------+ |\"Lucene\"(0,6,0) | +------------------+ |\"search\"(12,18,3) | +------------------+ |\"library\"(26,33,5)| +------------------+ where : \"termText\"(startOffset,endOffset,position) Step 3. In Step 3, Fast Vector Highlighter generates FieldPhraseList by reference to QueryPhraseMap and FieldTermStack . FieldPhraseList +----------------+-----------------+---+ |\"Lucene\" |[(0,6)] |w=2| +----------------+-----------------+---+ |\"search library\"|[(12,18),(26,33)]|w=1| +----------------+-----------------+---+ The type of each entry is WeightedPhraseInfo that consists of an array of terms offsets and weight. Step 4. In Step 4, Fast Vector Highlighter creates FieldFragList by reference to FieldPhraseList . In this sample case, the following FieldFragList will be generated: FieldFragList +---------------------------------+ |\"Lucene\"[(0,6)] | |\"search library\"[(12,18),(26,33)]| |totalBoost=3 | +---------------------------------+ The calculation for each FieldFragList.WeightedFragInfo.totalBoost (weight) depends on the implementation of FieldFragList.add( ... ) : public void add( int startOffset, int endOffset, List<WeightedPhraseInfo> phraseInfoList ) { float totalBoost = 0; List<SubInfo> subInfos = new ArrayList<SubInfo>(); for( WeightedPhraseInfo phraseInfo : phraseInfoList ){ subInfos.add( new SubInfo( phraseInfo.getText(), phraseInfo.getTermsOffsets(), phraseInfo.getSeqnum() ) ); totalBoost += phraseInfo.getBoost(); } getFragInfos().add( new WeightedFragInfo( startOffset, endOffset, subInfos, totalBoost ) ); } The used implementation of FieldFragList is noted in BaseFragListBuilder.createFieldFragList( ... ) : public FieldFragList createFieldFragList( FieldPhraseList fieldPhraseList, int fragCharSize ){ return createFieldFragList( fieldPhraseList, new SimpleFieldFragList( fragCharSize ), fragCharSize ); } Currently there are basically to approaches available: SimpleFragListBuilder using SimpleFieldFragList : sum-of-boosts -approach. The totalBoost is calculated by summarizing the query-boosts per term. Per default a term is boosted by 1.0 WeightedFragListBuilder using WeightedFieldFragList : sum-of-distinct-weights -approach. The totalBoost is calculated by summarizing the IDF-weights of distinct terms. Comparison of the two approaches: query = das alte testament (The Old Testament) Terms in fragment sum-of-distinct-weights sum-of-boosts das alte testament 5.339621 3.0 das alte testament 5.339621 3.0 das testament alte 5.339621 3.0 das alte testament 5.339621 3.0 das testament 2.9455688 2.0 das alte 2.4759595 2.0 das das das das 1.5015357 4.0 das das das 1.3003681 3.0 das das 1.061746 2.0 alte 1.0 1.0 alte 1.0 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 Step 5. In Step 5, by using FieldFragList and the field stored data, Fast Vector Highlighter creates highlighted snippets! Classes BaseFragListBuilder A abstract implementation of IFragListBuilder . BaseFragmentsBuilder Base IFragmentsBuilder implementation that supports colored pre/post tags and multivalued fields. Uses IBoundaryScanner to determine fragments. FastVectorHighlighter Another highlighter implementation. FieldFragList FieldFragList has a list of \"frag info\" that is used by IFragmentsBuilder class to create fragments (snippets). FieldFragList.WeightedFragInfo List of term offsets + weight for a frag info FieldFragList.WeightedFragInfo.SubInfo Represents the list of term offsets for some text FieldPhraseList FieldPhraseList has a list of WeightedPhraseInfo that is used by FragListBuilder to create a FieldFragList object. FieldPhraseList.WeightedPhraseInfo Represents the list of term offsets and boost for some text FieldPhraseList.WeightedPhraseInfo.Toffs Term offsets (start + end) FieldQuery FieldQuery breaks down query object into terms/phrases and keeps them in a FieldQuery.QueryPhraseMap structure. FieldQuery.QueryPhraseMap Internal structure of a query for highlighting: represents a nested query structure FieldTermStack FieldTermStack is a stack that keeps query terms in the specified field of the document to be highlighted. FieldTermStack.TermInfo Single term with its position/offsets in the document and IDF weight. It is System.IComparable<T> but considers only position. ScoreOrderFragmentsBuilder An implementation of FragmentsBuilder that outputs score-order fragments. ScoreOrderFragmentsBuilder.ScoreComparer System.Collections.Generic.IComparer<T> for FieldFragList.WeightedFragInfo by boost, breaking ties by offset. SimpleBoundaryScanner Simple boundary scanner implementation that divides fragments based on a set of separator characters. SimpleFieldFragList A simple implementation of FieldFragList . SimpleFragListBuilder A simple implementation of IFragListBuilder . SimpleFragmentsBuilder A simple implementation of FragmentsBuilder. SingleFragListBuilder An implementation class of IFragListBuilder that generates one FieldFragList.WeightedFragInfo object. Typical use case of this class is that you can get an entire field contents by using both of this class and SimpleFragmentsBuilder . FastVectorHighlighter h = new FastVectorHighlighter( true, true, new SingleFragListBuilder(), new SimpleFragmentsBuilder() ); WeightedFieldFragList A weighted implementation of FieldFragList . WeightedFragListBuilder A weighted implementation of IFragListBuilder . Interfaces IBoundaryScanner Finds fragment boundaries: pluggable into BaseFragmentsBuilder IFragListBuilder IFragListBuilder is an interface for FieldFragList builder classes. A IFragListBuilder class can be plugged in to Highlighter . IFragmentsBuilder IFragmentsBuilder is an interface for fragments (snippets) builder classes. A IFragmentsBuilder class can be plugged in to FastVectorHighlighter ."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IBoundaryScanner.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IBoundaryScanner.html",
    "title": "Interface IBoundaryScanner | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IBoundaryScanner Finds fragment boundaries: pluggable into BaseFragmentsBuilder Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IBoundaryScanner Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Scan forward to find start offset. Declaration int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer scanned object System.Int32 start start offset to begin Returns Type Description System.Int32 the found end offset | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Scan backward to find end offset. Declaration int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer scanned object System.Int32 start offset to begin Returns Type Description System.Int32 the found start offset"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragListBuilder.html",
    "title": "Interface IFragListBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFragListBuilder IFragListBuilder is an interface for FieldFragList builder classes. A IFragListBuilder class can be plugged in to Highlighter . Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragListBuilder Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) create a FieldFragList . Declaration FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList FieldPhraseList object System.Int32 fragCharSize the length (number of chars) of a fragment Returns Type Description FieldFragList the created FieldFragList object"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragmentsBuilder.html",
    "title": "Interface IFragmentsBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFragmentsBuilder IFragmentsBuilder is an interface for fragments (snippets) builder classes. A IFragmentsBuilder class can be plugged in to FastVectorHighlighter . Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragmentsBuilder Methods | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList) create a fragment. Declaration string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object Returns Type Description System.String a created fragment or null when no fragment created Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) create a fragment. Declaration string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String a created fragment or null when no fragment created Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) create multiple fragments. Declaration string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighter System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.Int32 maxNumFragments maximum number of fragments Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) create multiple fragments. Declaration string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighter System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.Int32 maxNumFragments maximum number of fragments System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.html",
    "title": "Class ScoreOrderFragmentsBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScoreOrderFragmentsBuilder An implementation of FragmentsBuilder that outputs score-order fragments. Inheritance System.Object BaseFragmentsBuilder ScoreOrderFragmentsBuilder Implements IFragmentsBuilder Inherited Members BaseFragmentsBuilder.m_preTags BaseFragmentsBuilder.m_postTags BaseFragmentsBuilder.COLORED_PRE_TAGS BaseFragmentsBuilder.COLORED_POST_TAGS BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) BaseFragmentsBuilder.GetFields(IndexReader, Int32, String) BaseFragmentsBuilder.MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) BaseFragmentsBuilder.GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) BaseFragmentsBuilder.GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) BaseFragmentsBuilder.DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) BaseFragmentsBuilder.MultiValuedSeparator BaseFragmentsBuilder.IsDiscreteMultiValueHighlighting BaseFragmentsBuilder.GetPreTag(Int32) BaseFragmentsBuilder.GetPostTag(Int32) BaseFragmentsBuilder.GetPreTag(String[], Int32) BaseFragmentsBuilder.GetPostTag(String[], Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class ScoreOrderFragmentsBuilder : BaseFragmentsBuilder, IFragmentsBuilder Constructors | Improve this Doc View Source ScoreOrderFragmentsBuilder() a constructor. Declaration public ScoreOrderFragmentsBuilder() | Improve this Doc View Source ScoreOrderFragmentsBuilder(IBoundaryScanner) Declaration public ScoreOrderFragmentsBuilder(IBoundaryScanner bs) Parameters Type Name Description IBoundaryScanner bs | Improve this Doc View Source ScoreOrderFragmentsBuilder(String[], String[]) a constructor. Declaration public ScoreOrderFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags array of pre-tags for markup terms. System.String [] postTags array of post-tags for markup terms. | Improve this Doc View Source ScoreOrderFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration public ScoreOrderFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner bs) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner bs Methods | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Sort by score the list of FieldFragList.WeightedFragInfo Declaration public override IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > src Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > Overrides BaseFragmentsBuilder.GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.ScoreComparer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.ScoreComparer.html",
    "title": "Class ScoreOrderFragmentsBuilder.ScoreComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScoreOrderFragmentsBuilder.ScoreComparer System.Collections.Generic.IComparer<T> for FieldFragList.WeightedFragInfo by boost, breaking ties by offset. Inheritance System.Object ScoreOrderFragmentsBuilder.ScoreComparer Implements System.Collections.Generic.IComparer < FieldFragList.WeightedFragInfo > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class ScoreComparer : IComparer<FieldFragList.WeightedFragInfo> Methods | Improve this Doc View Source Compare(FieldFragList.WeightedFragInfo, FieldFragList.WeightedFragInfo) Declaration public virtual int Compare(FieldFragList.WeightedFragInfo o1, FieldFragList.WeightedFragInfo o2) Parameters Type Name Description FieldFragList.WeightedFragInfo o1 FieldFragList.WeightedFragInfo o2 Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleBoundaryScanner.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleBoundaryScanner.html",
    "title": "Class SimpleBoundaryScanner | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleBoundaryScanner Simple boundary scanner implementation that divides fragments based on a set of separator characters. Inheritance System.Object SimpleBoundaryScanner Implements IBoundaryScanner Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleBoundaryScanner : IBoundaryScanner Constructors | Improve this Doc View Source SimpleBoundaryScanner() Declaration public SimpleBoundaryScanner() | Improve this Doc View Source SimpleBoundaryScanner(Char[]) Declaration public SimpleBoundaryScanner(char[] boundaryChars) Parameters Type Name Description System.Char [] boundaryChars | Improve this Doc View Source SimpleBoundaryScanner(Int32) Declaration public SimpleBoundaryScanner(int maxScan) Parameters Type Name Description System.Int32 maxScan | Improve this Doc View Source SimpleBoundaryScanner(Int32, Char[]) Declaration public SimpleBoundaryScanner(int maxScan, char[] boundaryChars) Parameters Type Name Description System.Int32 maxScan System.Char [] boundaryChars | Improve this Doc View Source SimpleBoundaryScanner(Int32, ISet<Char>) Declaration public SimpleBoundaryScanner(int maxScan, ISet<char> boundaryChars) Parameters Type Name Description System.Int32 maxScan System.Collections.Generic.ISet < System.Char > boundaryChars Fields | Improve this Doc View Source DEFAULT_BOUNDARY_CHARS Declaration public static readonly char[] DEFAULT_BOUNDARY_CHARS Field Value Type Description System.Char [] | Improve this Doc View Source DEFAULT_MAX_SCAN Declaration public static readonly int DEFAULT_MAX_SCAN Field Value Type Description System.Int32 | Improve this Doc View Source m_boundaryChars Declaration protected ISet<char> m_boundaryChars Field Value Type Description System.Collections.Generic.ISet < System.Char > | Improve this Doc View Source m_maxScan Declaration protected int m_maxScan Field Value Type Description System.Int32 Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Declaration public virtual int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Declaration public virtual int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 Implements IBoundaryScanner"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFieldFragList.html",
    "title": "Class SimpleFieldFragList | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFieldFragList A simple implementation of FieldFragList . Inheritance System.Object FieldFragList SimpleFieldFragList Inherited Members FieldFragList.FragInfos System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFieldFragList : FieldFragList Constructors | Improve this Doc View Source SimpleFieldFragList(Int32) a constructor. Declaration public SimpleFieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Declaration public override void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList Overrides FieldFragList.Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>)"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragListBuilder.html",
    "title": "Class SimpleFragListBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFragListBuilder A simple implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder SimpleFragListBuilder Implements IFragListBuilder Inherited Members BaseFragListBuilder.MARGIN_DEFAULT BaseFragListBuilder.MIN_FRAG_CHAR_SIZE_FACTOR BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) BaseFragListBuilder.AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragListBuilder : BaseFragListBuilder, IFragListBuilder Constructors | Improve this Doc View Source SimpleFragListBuilder() Declaration public SimpleFragListBuilder() | Improve this Doc View Source SimpleFragListBuilder(Int32) Declaration public SimpleFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) CreateFieldFragList(FieldPhraseList, Int32) Declaration public override FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Overrides BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, Int32) Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragmentsBuilder.html",
    "title": "Class SimpleFragmentsBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFragmentsBuilder A simple implementation of FragmentsBuilder. Inheritance System.Object BaseFragmentsBuilder SimpleFragmentsBuilder Implements IFragmentsBuilder Inherited Members BaseFragmentsBuilder.m_preTags BaseFragmentsBuilder.m_postTags BaseFragmentsBuilder.COLORED_PRE_TAGS BaseFragmentsBuilder.COLORED_POST_TAGS BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) BaseFragmentsBuilder.GetFields(IndexReader, Int32, String) BaseFragmentsBuilder.MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) BaseFragmentsBuilder.GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) BaseFragmentsBuilder.GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) BaseFragmentsBuilder.DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) BaseFragmentsBuilder.MultiValuedSeparator BaseFragmentsBuilder.IsDiscreteMultiValueHighlighting BaseFragmentsBuilder.GetPreTag(Int32) BaseFragmentsBuilder.GetPostTag(Int32) BaseFragmentsBuilder.GetPreTag(String[], Int32) BaseFragmentsBuilder.GetPostTag(String[], Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragmentsBuilder : BaseFragmentsBuilder, IFragmentsBuilder Constructors | Improve this Doc View Source SimpleFragmentsBuilder() a constructor. Declaration public SimpleFragmentsBuilder() | Improve this Doc View Source SimpleFragmentsBuilder(IBoundaryScanner) Declaration public SimpleFragmentsBuilder(IBoundaryScanner bs) Parameters Type Name Description IBoundaryScanner bs | Improve this Doc View Source SimpleFragmentsBuilder(String[], String[]) a constructor. Declaration public SimpleFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags array of pre-tags for markup terms. System.String [] postTags array of post-tags for markup terms. | Improve this Doc View Source SimpleFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration public SimpleFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner bs) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner bs Methods | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) do nothing. return the source list. Declaration public override IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > src Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > Overrides BaseFragmentsBuilder.GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SingleFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SingleFragListBuilder.html",
    "title": "Class SingleFragListBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleFragListBuilder An implementation class of IFragListBuilder that generates one FieldFragList.WeightedFragInfo object. Typical use case of this class is that you can get an entire field contents by using both of this class and SimpleFragmentsBuilder . FastVectorHighlighter h = new FastVectorHighlighter( true, true, new SingleFragListBuilder(), new SimpleFragmentsBuilder() ); Inheritance System.Object SingleFragListBuilder Implements IFragListBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SingleFragListBuilder : IFragListBuilder Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) Declaration public virtual FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFieldFragList.html",
    "title": "Class WeightedFieldFragList | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WeightedFieldFragList A weighted implementation of FieldFragList . Inheritance System.Object FieldFragList WeightedFieldFragList Inherited Members FieldFragList.FragInfos System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFieldFragList : FieldFragList Constructors | Improve this Doc View Source WeightedFieldFragList(Int32) a constructor. Declaration public WeightedFieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) . Declaration public override void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList Overrides FieldFragList.Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>)"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFragListBuilder.html",
    "title": "Class WeightedFragListBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WeightedFragListBuilder A weighted implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder WeightedFragListBuilder Implements IFragListBuilder Inherited Members BaseFragListBuilder.MARGIN_DEFAULT BaseFragListBuilder.MIN_FRAG_CHAR_SIZE_FACTOR BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) BaseFragListBuilder.AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFragListBuilder : BaseFragListBuilder, IFragListBuilder Constructors | Improve this Doc View Source WeightedFragListBuilder() Declaration public WeightedFragListBuilder() | Improve this Doc View Source WeightedFragListBuilder(Int32) Declaration public WeightedFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) CreateFieldFragList(FieldPhraseList, Int32) Declaration public override FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Overrides BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, Int32) Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/overview.html": {
    "href": "api/Lucene.Net.Highlighter/overview.html",
    "title": "Lucene.Net.Highlighter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.Highlighter <!-- 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. --> The highlight package contains classes to provide \"keyword in context\" features typically used to highlight search terms in the text of results pages."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.html",
    "title": "Namespace Lucene.Net.Analysis.Icu | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu <!-- 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. --> Analysis components based on ICU Classes ICUFoldingFilter A TokenFilter that applies search term folding to Unicode text, applying foldings from UTR#30 Character Foldings. ICUFoldingFilterFactory Factory for ICUFoldingFilter . ICUNormalizer2CharFilter Normalize token text with ICU's ICU4N.Text.Normalizer2 . ICUNormalizer2CharFilterFactory Factory for ICUNormalizer2CharFilter . ICUNormalizer2Filter Normalize token text with ICU's ICU4N.Text.Normalizer2 . ICUNormalizer2FilterFactory Factory for ICUNormalizer2Filter . ICUTransformFilter A TokenFilter that transforms text with ICU. ICUTransformFilterFactory Factory for ICUTransformFilter ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilter.html",
    "title": "Class ICUFoldingFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUFoldingFilter A TokenFilter that applies search term folding to Unicode text, applying foldings from UTR#30 Character Foldings. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUNormalizer2Filter ICUFoldingFilter Implements System.IDisposable Inherited Members ICUNormalizer2Filter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUFoldingFilter : ICUNormalizer2Filter, IDisposable Remarks This filter applies the following foldings from the report to unicode text: Accent removal Case folding Canonical duplicates folding Dashes folding Diacritic removal (including stroke, hook, descender) Greek letterforms folding Han Radical folding Hebrew Alternates folding Jamo folding Letterforms folding Math symbol folding Multigraph Expansions: All Native digit folding No-break folding Overline folding Positional forms folding Small forms folding Space folding Spacing Accents folding Subscript folding Superscript folding Suzhou Numeral folding Symbol folding Underline folding Vertical forms folding Width folding Additionally, Default Ignorables are removed, and text is normalized to NFKC. All foldings, case folding, and normalization mappings are applied recursively to ensure a fully folded and normalized result. Constructors | Improve this Doc View Source ICUFoldingFilter(TokenStream) Create a new ICUFoldingFilter on the specified input Declaration public ICUFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilterFactory.html",
    "title": "Class ICUFoldingFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUFoldingFilterFactory Factory for ICUFoldingFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUFoldingFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUFoldingFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks <fieldType name=\"text_folded\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ICUFoldingFilterFactory\"/> </analyzer> </fieldType> Constructors | Improve this Doc View Source ICUFoldingFilterFactory(IDictionary<String, String>) Creates a new ICUFoldingFilterFactory . Declaration public ICUFoldingFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html",
    "title": "Class ICUNormalizer2CharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUNormalizer2CharFilter Normalize token text with ICU's ICU4N.Text.Normalizer2 . Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter BaseCharFilter ICUNormalizer2CharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Read() CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUNormalizer2CharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source ICUNormalizer2CharFilter(TextReader) Create a new ICUNormalizer2CharFilter that combines NFKC normalization, Case Folding, and removes Default Ignorables (NFKC_Casefold). Declaration public ICUNormalizer2CharFilter(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source ICUNormalizer2CharFilter(TextReader, Normalizer2) Create a new ICUNormalizer2CharFilter with the specified ICU4N.Text.Normalizer2 . Declaration public ICUNormalizer2CharFilter(TextReader input, Normalizer2 normalizer) Parameters Type Name Description System.IO.TextReader input Input text. ICU4N.Text.Normalizer2 normalizer Normalizer to use. Methods | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilterFactory.html",
    "title": "Class ICUNormalizer2CharFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUNormalizer2CharFilterFactory Factory for ICUNormalizer2CharFilter . Inheritance System.Object AbstractAnalysisFactory CharFilterFactory ICUNormalizer2CharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2CharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: name A Unicode Normalization Form , one of 'nfc','nfkc', 'nfkc_cf'. Default is nfkc_cf. mode Either 'compose' or 'decompose'. Default is compose. Use \"decompose\" with nfc or nfkc, to get nfd or nfkd, respectively. filter A ICU4N.Text.UnicodeSet pattern. Codepoints outside the set are always left unchanged. Default is [] (the null set, no filtering). Constructors | Improve this Doc View Source ICUNormalizer2CharFilterFactory(IDictionary<String, String>) Creates a new ICUNormalizer2CharFilterFactory . Declaration public ICUNormalizer2CharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICUNormalizer2CharFilter ICU4N.Text.Normalizer2 ICU4N.Text.FilteredNormalizer2"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html",
    "title": "Class ICUNormalizer2Filter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUNormalizer2Filter Normalize token text with ICU's ICU4N.Text.Normalizer2 . Inheritance System.Object AttributeSource TokenStream TokenFilter ICUNormalizer2Filter ICUFoldingFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2Filter : TokenFilter, IDisposable Remarks With this filter, you can normalize text in the following ways: NFKC Normalization, Case Folding, and removing Ignorables (the default) Using a standard Normalization mode (NFC, NFD, NFKC, NFKD) Based on rules from a custom normalization mapping. If you use the defaults, this filter is a simple way to standardize Unicode text in a language-independent way for search: The case folding that it does can be seen as a replacement for LowerCaseFilter: For example, it handles cases such as the Greek sigma, so that \"Μάϊος\" and \"ΜΆΪΟΣ\" will match correctly. The normalization will standardizes different forms of the same character in Unicode. For example, CJK full-width numbers will be standardized to their ASCII forms. Ignorables such as Zero-Width Joiner and Variation Selectors are removed. These are typically modifier characters that affect display. Constructors | Improve this Doc View Source ICUNormalizer2Filter(TokenStream) Create a new ICUNormalizer2Filter that combines NFKC normalization, Case Folding, and removes Default Ignorables (NFKC_Casefold) Declaration public ICUNormalizer2Filter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source ICUNormalizer2Filter(TokenStream, Normalizer2) Create a new ICUNormalizer2Filter with the specified ICU4N.Text.Normalizer2 Declaration public ICUNormalizer2Filter(TokenStream input, Normalizer2 normalizer) Parameters Type Name Description TokenStream input stream ICU4N.Text.Normalizer2 normalizer normalizer to use Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also ICU4N.Text.Normalizer2 ICU4N.Text.FilteredNormalizer2"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2FilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2FilterFactory.html",
    "title": "Class ICUNormalizer2FilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUNormalizer2FilterFactory Factory for ICUNormalizer2Filter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUNormalizer2FilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2FilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: name A Unicode Normalization Form , one of 'nfc','nfkc', 'nfkc_cf'. Default is nfkc_cf. mode Either 'compose' or 'decompose'. Default is compose. Use \"decompose\" with nfc or nfkc, to get nfd or nfkd, respectively. filter A ICU4N.Text.UnicodeSet pattern. Codepoints outside the set are always left unchanged. Default is [] (the null set, no filtering). Constructors | Improve this Doc View Source ICUNormalizer2FilterFactory(IDictionary<String, String>) Creates a new ICUNormalizer2FilterFactory . Declaration public ICUNormalizer2FilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICUNormalizer2Filter ICU4N.Text.Normalizer2 ICU4N.Text.FilteredNormalizer2"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilter.html",
    "title": "Class ICUTransformFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUTransformFilter A TokenFilter that transforms text with ICU. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUTransformFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUTransformFilter : TokenFilter, IDisposable Remarks ICU provides text-transformation functionality via its Transliteration API. Although script conversion is its most common use, a Transliterator can actually perform a more general class of tasks. In fact, Transliterator defines a very general API which specifies only that a segment of the input text is replaced by new text. The particulars of this conversion are determined entirely by subclasses of Transliterator. Some useful transformations for search are built-in: Conversion from Traditional to Simplified Chinese characters Conversion from Hiragana to Katakana Conversion from Fullwidth to Halfwidth forms. Script conversions, for example Serbian Cyrillic to Latin Example usage: stream = new ICUTransformFilter(stream, Transliterator.GetInstance(\"Traditional-Simplified\")); For more details, see the ICU User Guide . Constructors | Improve this Doc View Source ICUTransformFilter(TokenStream, Transliterator) Create a new ICUTransformFilter that transforms text on the given stream. Declaration public ICUTransformFilter(TokenStream input, Transliterator transform) Parameters Type Name Description TokenStream input TokenStream to filter. ICU4N.Text.Transliterator transform Transliterator to transform the text. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilterFactory.html",
    "title": "Class ICUTransformFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUTransformFilterFactory Factory for ICUTransformFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUTransformFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUTransformFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: A Transliterator ID, one from ICU4N.Text.Transliterator.GetAvailableIDs Either 'forward' or 'reverse'. Default is forward. Constructors | Improve this Doc View Source ICUTransformFilterFactory(IDictionary<String, String>) Creates a new ICUTransformFilterFactory . Declaration public ICUTransformFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICU4N.Text.Transliterator"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.DefaultICUTokenizerConfig.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.DefaultICUTokenizerConfig.html",
    "title": "Class DefaultICUTokenizerConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultICUTokenizerConfig Default ICUTokenizerConfig that is generally applicable to many languages. Inheritance System.Object ICUTokenizerConfig DefaultICUTokenizerConfig 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.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public class DefaultICUTokenizerConfig : ICUTokenizerConfig Remarks Generally tokenizes Unicode text according to UAX#29 ( BreakIterator.GetWordInstance(ULocale.ROOT) ), but with the following tailorings: Thai, Lao, Myanmar, Khmer, and CJK text is broken into words with a dictionary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source DefaultICUTokenizerConfig(Boolean, Boolean) Creates a new config. This object is lightweight, but the first time the class is referenced, breakiterators will be initialized. Declaration public DefaultICUTokenizerConfig(bool cjkAsWords, bool myanmarAsWords) Parameters Type Name Description System.Boolean cjkAsWords true if cjk text should undergo dictionary-based segmentation, otherwise text will be segmented according to UAX#29 defaults. System.Boolean myanmarAsWords If this is true, all Han+Hiragana+Katakana words will be tagged as IDEOGRAPHIC. Fields | Improve this Doc View Source WORD_HANGUL Token type for words containing Korean hangul Declaration public static readonly string WORD_HANGUL Field Value Type Description System.String | Improve this Doc View Source WORD_HIRAGANA Token type for words containing Japanese hiragana Declaration public static readonly string WORD_HIRAGANA Field Value Type Description System.String | Improve this Doc View Source WORD_IDEO Token type for words containing ideographic characters Declaration public static readonly string WORD_IDEO Field Value Type Description System.String | Improve this Doc View Source WORD_KATAKANA Token type for words containing Japanese katakana Declaration public static readonly string WORD_KATAKANA Field Value Type Description System.String | Improve this Doc View Source WORD_LETTER Token type for words that contain letters Declaration public static readonly string WORD_LETTER Field Value Type Description System.String | Improve this Doc View Source WORD_NUMBER Token type for words that appear to be numbers Declaration public static readonly string WORD_NUMBER Field Value Type Description System.String Properties | Improve this Doc View Source CombineCJ Declaration public override bool CombineCJ { get; } Property Value Type Description System.Boolean Overrides ICUTokenizerConfig.CombineCJ Methods | Improve this Doc View Source GetBreakIterator(Int32) Declaration public override BreakIterator GetBreakIterator(int script) Parameters Type Name Description System.Int32 script Returns Type Description ICU4N.Text.BreakIterator Overrides ICUTokenizerConfig.GetBreakIterator(Int32) | Improve this Doc View Source GetType(Int32, Int32) Declaration public override string GetType(int script, int ruleStatus) Parameters Type Name Description System.Int32 script System.Int32 ruleStatus Returns Type Description System.String Overrides ICUTokenizerConfig.GetType(Int32, Int32)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.html",
    "title": "Namespace Lucene.Net.Analysis.Icu.Segmentation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu.Segmentation <!-- 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. --> Tokenizer that breaks text into words with the Unicode Text Segmentation algorithm. Classes DefaultICUTokenizerConfig Default ICUTokenizerConfig that is generally applicable to many languages. ICUTokenizer Breaks text into words according to UAX #29: Unicode Text Segmentation ( http://www.unicode.org/reports/tr29/ ) Words are broken across script boundaries, then segmented according to the BreakIterator and typing provided by the ICUTokenizerConfig This is a Lucene.NET EXPERIMENTAL API, use at your own risk ICUTokenizerConfig Class that allows for tailored Unicode Text Segmentation on a per-writing system basis. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ICUTokenizerFactory Factory for ICUTokenizer . Words are broken across script boundaries, then segmented according to the ICU4N.Text.BreakIterator and typing provided by the DefaultICUTokenizerConfig ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizer.html",
    "title": "Class ICUTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUTokenizer Breaks text into words according to UAX #29: Unicode Text Segmentation ( http://www.unicode.org/reports/tr29/ ) Words are broken across script boundaries, then segmented according to the BreakIterator and typing provided by the ICUTokenizerConfig This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer ICUTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ICUTokenizer(AttributeSource.AttributeFactory, TextReader, ICUTokenizerConfig) Construct a new ICUTokenizer that breaks text into words from the given System.IO.TextReader , using a tailored ICU4N.Text.BreakIterator configuration. Declaration public ICUTokenizer(AttributeSource.AttributeFactory factory, TextReader input, ICUTokenizerConfig config) Parameters Type Name Description AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use. System.IO.TextReader input System.IO.TextReader containing text to tokenize. ICUTokenizerConfig config Tailored ICU4N.Text.BreakIterator configuration. | Improve this Doc View Source ICUTokenizer(TextReader) Construct a new ICUTokenizer that breaks text into words from the given System.IO.TextReader . Declaration public ICUTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader containing text to tokenize. Remarks The default script-specific handling is used. The default attribute factory is used. See Also DefaultICUTokenizerConfig | Improve this Doc View Source ICUTokenizer(TextReader, ICUTokenizerConfig) Construct a new ICUTokenizer that breaks text into words from the given System.IO.TextReader , using a tailored ICU4N.Text.BreakIterator configuration. Declaration public ICUTokenizer(TextReader input, ICUTokenizerConfig config) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader containing text to tokenize. ICUTokenizerConfig config Tailored ICU4N.Text.BreakIterator configuration. Remarks The default attribute factory is used. Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable See Also ICUTokenizerConfig"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerConfig.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerConfig.html",
    "title": "Class ICUTokenizerConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUTokenizerConfig Class that allows for tailored Unicode Text Segmentation on a per-writing system basis. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ICUTokenizerConfig DefaultICUTokenizerConfig 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.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public abstract class ICUTokenizerConfig Constructors | Improve this Doc View Source ICUTokenizerConfig() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public ICUTokenizerConfig() Properties | Improve this Doc View Source CombineCJ true if Han, Hiragana, and Katakana scripts should all be returned as Japanese Declaration public abstract bool CombineCJ { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetBreakIterator(Int32) Return a breakiterator capable of processing a given script. Declaration public abstract BreakIterator GetBreakIterator(int script) Parameters Type Name Description System.Int32 script Returns Type Description ICU4N.Text.BreakIterator | Improve this Doc View Source GetType(Int32, Int32) Return a token type value for a given script and BreakIterator rule status. Declaration public abstract string GetType(int script, int ruleStatus) Parameters Type Name Description System.Int32 script System.Int32 ruleStatus Returns Type Description System.String"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerFactory.html",
    "title": "Class ICUTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUTokenizerFactory Factory for ICUTokenizer . Words are broken across script boundaries, then segmented according to the ICU4N.Text.BreakIterator and typing provided by the DefaultICUTokenizerConfig . Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ICUTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public class ICUTokenizerFactory : TokenizerFactory, IResourceLoaderAware Remarks To use the default set of per-script rules: <fieldType name=\"text_icu\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ICUTokenizerFactory\"/> </analyzer> </fieldType> You can customize this tokenizer's behavior by specifying per-script rule files, which are compiled by the ICU ICU4N.Text.RuleBasedBreakIterator . See the ICU RuleBasedBreakIterator syntax reference . To add per-script rules, add a \"rulefiles\" argument, which should contain a comma-separated list of code:rulefile pairs in the following format: four-letter ISO 15924 script code , followed by a colon, then a resource path. E.g. to specify rules for Latin (script code \"Latn\") and Cyrillic (script code \"Cyrl\"): <fieldType name=\"text_icu_custom\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ICUTokenizerFactory\" cjkAsWords=\"true\" rulefiles=\"Latn:my.Latin.rules.rbbi,Cyrl:my.Cyrillic.rules.rbbi\"/> </analyzer> </fieldType> Constructors | Improve this Doc View Source ICUTokenizerFactory(IDictionary<String, String>) Creates a new ICUTokenizerFactory . Declaration public ICUTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Icu.TokenAttributes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu.TokenAttributes <!-- 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. --> Additional ICU-specific Attributes for text analysis. Classes ScriptAttribute Implementation of IScriptAttribute that stores the script as an integer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IScriptAttribute This attribute stores the UTR #24 script value for a token of text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.IScriptAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.IScriptAttribute.html",
    "title": "Interface IScriptAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IScriptAttribute This attribute stores the UTR #24 script value for a token of text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Icu.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public interface IScriptAttribute : IAttribute Properties | Improve this Doc View Source Code Gets or Sets the numeric code for this script value. This is the constant value from ICU4N.Globalization.UScript . Declaration int Code { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetName() Get the full name. Declaration string GetName() Returns Type Description System.String UTR #24 full name. | Improve this Doc View Source GetShortName() Get the abbreviated name. Declaration string GetShortName() Returns Type Description System.String UTR #24 abbreviated name."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.ScriptAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.ScriptAttribute.html",
    "title": "Class ScriptAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScriptAttribute Implementation of IScriptAttribute that stores the script as an integer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Attribute ScriptAttribute Implements IScriptAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public class ScriptAttribute : Attribute, IScriptAttribute, IAttribute Constructors | Improve this Doc View Source ScriptAttribute() Initializes this attribute with ICU4N.Globalization.UScript.Common . Declaration public ScriptAttribute() Properties | Improve this Doc View Source Code Declaration public virtual int Code { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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 GetName() Declaration public virtual string GetName() Returns Type Description System.String | Improve this Doc View Source GetShortName() Declaration public virtual string GetShortName() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements IScriptAttribute IAttribute"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.html",
    "title": "Namespace Lucene.Net.Analysis.Th | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Th <!-- 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. --> Analyzer for Thai. Classes ThaiAnalyzer Analyzer for Thai language. It uses ICU4N.Text.BreakIterator to break words. You must specify the required LuceneVersion compatibility when creating ThaiAnalyzer : As of 3.6, a set of Thai stopwords is used by default ThaiTokenizer Tokenizer that use ICU4N.Text.BreakIterator to tokenize Thai text. ThaiTokenizerFactory Factory for ThaiTokenizer . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ThaiTokenizerFactory\"/> </analyzer> </fieldType> ThaiWordFilter TokenFilter that use ICU4N.Text.BreakIterator to break each Token that is Thai into separate Token(s) for each Thai word. Please note: Since matchVersion 3.1 on, this filter no longer lowercases non-thai text. ThaiAnalyzer will insert a LowerCaseFilter before this filter so the behaviour of the Analyzer does not change. With version 3.1, the filter handles position increments correctly. ThaiWordFilterFactory Factory for ThaiWordFilter . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ThaiWordFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiAnalyzer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiAnalyzer.html",
    "title": "Class ThaiAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ThaiAnalyzer Analyzer for Thai language. It uses ICU4N.Text.BreakIterator to break words. You must specify the required LuceneVersion compatibility when creating ThaiAnalyzer : As of 3.6, a set of Thai stopwords is used by default Inheritance System.Object Analyzer StopwordAnalyzerBase ThaiAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public sealed class ThaiAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ThaiAnalyzer(LuceneVersion) Builds an analyzer with the default stop words. Declaration public ThaiAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ThaiAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ThaiAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Thai stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , ThaiWordFilter , and StopFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizer.html",
    "title": "Class ThaiTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ThaiTokenizer Tokenizer that use ICU4N.Text.BreakIterator to tokenize Thai text. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase ThaiTokenizer Implements System.IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.Reset() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public class ThaiTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source ThaiTokenizer(AttributeSource.AttributeFactory, TextReader) Creates a new ThaiTokenizer , supplying the AttributeSource.AttributeFactory Declaration public ThaiTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader | Improve this Doc View Source ThaiTokenizer(TextReader) Creates a new ThaiTokenizer Declaration public ThaiTokenizer(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizerFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizerFactory.html",
    "title": "Class ThaiTokenizerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ThaiTokenizerFactory Factory for ThaiTokenizer . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ThaiTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ThaiTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public class ThaiTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ThaiTokenizerFactory(IDictionary<String, String>) Creates a new ThaiTokenizerFactory Declaration public ThaiTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilter.html",
    "title": "Class ThaiWordFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ThaiWordFilter TokenFilter that use ICU4N.Text.BreakIterator to break each Token that is Thai into separate Token(s) for each Thai word. Please note: Since matchVersion 3.1 on, this filter no longer lowercases non-thai text. ThaiAnalyzer will insert a LowerCaseFilter before this filter so the behaviour of the Analyzer does not change. With version 3.1, the filter handles position increments correctly. Inheritance System.Object AttributeSource TokenStream TokenFilter ThaiWordFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ThaiTokenizer instead.\")] public sealed class ThaiWordFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ThaiWordFilter(LuceneVersion, TokenStream) Creates a new ThaiWordFilter with the specified match version. Declaration public ThaiWordFilter(LuceneVersion matchVersion, TokenStream input) Parameters Type Name Description LuceneVersion matchVersion TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilterFactory.html",
    "title": "Class ThaiWordFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ThaiWordFilterFactory Factory for ThaiWordFilter . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ThaiWordFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ThaiWordFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ThaiTokenizerFactory instead\")] public class ThaiWordFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ThaiWordFilterFactory(IDictionary<String, String>) Creates a new ThaiWordFilterFactory Declaration public ThaiWordFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.CharArrayIterator.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.CharArrayIterator.html",
    "title": "Class CharArrayIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharArrayIterator A CharacterIterator used internally for use with ICU4N.Text.BreakIterator This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ICU4N.Support.Text.CharacterIterator CharArrayIterator Inherited Members ICU4N.Support.Text.CharacterIterator.Done 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.Analysis.Util Assembly : Lucene.Net.ICU.dll Syntax public abstract class CharArrayIterator : CharacterIterator Properties | Improve this Doc View Source BeginIndex Declaration public override int BeginIndex { get; } Property Value Type Description System.Int32 Overrides ICU4N.Support.Text.CharacterIterator.BeginIndex | Improve this Doc View Source Current Declaration public override char Current { get; } Property Value Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Current | Improve this Doc View Source EndIndex Declaration public override int EndIndex { get; } Property Value Type Description System.Int32 Overrides ICU4N.Support.Text.CharacterIterator.EndIndex | Improve this Doc View Source Index Declaration public override int Index { get; } Property Value Type Description System.Int32 Overrides ICU4N.Support.Text.CharacterIterator.Index | Improve this Doc View Source Length Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Declaration public virtual int Start { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public virtual char[] Text { get; } Property Value Type Description System.Char [] Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides ICU4N.Support.Text.CharacterIterator.Clone() | Improve this Doc View Source First() Declaration public override char First() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.First() | Improve this Doc View Source JreBugWorkaround(Char) Declaration protected abstract char JreBugWorkaround(char ch) Parameters Type Name Description System.Char ch Returns Type Description System.Char | Improve this Doc View Source Last() Declaration public override char Last() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Last() | Improve this Doc View Source NewSentenceInstance() Create a new CharArrayIterator that works around JRE bugs in a manner suitable for ICU4N.Text.BreakIterator.GetSentenceInstance() . Declaration public static CharArrayIterator NewSentenceInstance() Returns Type Description CharArrayIterator | Improve this Doc View Source NewWordInstance() Create a new CharArrayIterator that works around JRE bugs in a manner suitable for ICU4N.Text.BreakIterator.GetWordInstance() . Declaration public static CharArrayIterator NewWordInstance() Returns Type Description CharArrayIterator | Improve this Doc View Source Next() Declaration public override char Next() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Next() | Improve this Doc View Source Previous() Declaration public override char Previous() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Previous() | Improve this Doc View Source SetIndex(Int32) Declaration public override char SetIndex(int position) Parameters Type Name Description System.Int32 position Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.SetIndex(System.Int32) | Improve this Doc View Source SetText(Char[], Int32, Int32) Set a new region of text to be examined by this iterator Declaration public virtual void SetText(char[] array, int start, int length) Parameters Type Name Description System.Char [] array text buffer to examine System.Int32 start offset into buffer System.Int32 length maximum length to examine"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Util <!-- 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. --> Utility functions for text analysis. Classes CharArrayIterator A CharacterIterator used internally for use with ICU4N.Text.BreakIterator This is a Lucene.NET INTERNAL API, use at your own risk SegmentingTokenizerBase Breaks text into sentences with a ICU4N.Text.BreakIterator and allows subclasses to decompose these sentences into words. This can be used by subclasses that need sentence context for tokenization purposes, such as CJK segmenters. Additionally it can be used by subclasses that want to mark sentence boundaries (with a custom attribute, extra token, position increment, etc) for downstream processing. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.SegmentingTokenizerBase.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.SegmentingTokenizerBase.html",
    "title": "Class SegmentingTokenizerBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentingTokenizerBase Breaks text into sentences with a ICU4N.Text.BreakIterator and allows subclasses to decompose these sentences into words. This can be used by subclasses that need sentence context for tokenization purposes, such as CJK segmenters. Additionally it can be used by subclasses that want to mark sentence boundaries (with a custom attribute, extra token, position increment, etc) for downstream processing. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase HMMChineseTokenizer OpenNLPTokenizer ThaiTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.ICU.dll Syntax public abstract class SegmentingTokenizerBase : Tokenizer, IDisposable Constructors | Improve this Doc View Source SegmentingTokenizerBase(AttributeSource.AttributeFactory, TextReader, BreakIterator) Construct a new SegmenterBase, also supplying the AttributeSource.AttributeFactory Declaration public SegmentingTokenizerBase(AttributeSource.AttributeFactory factory, TextReader reader, BreakIterator iterator) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader ICU4N.Text.BreakIterator iterator | Improve this Doc View Source SegmentingTokenizerBase(TextReader, BreakIterator) Construct a new SegmenterBase, using the provided ICU4N.Text.BreakIterator for sentence segmentation. Note that you should never share ICU4N.Text.BreakIterator s across different TokenStream s, instead a newly created or cloned one should always be provided to this constructor. Declaration public SegmentingTokenizerBase(TextReader reader, BreakIterator iterator) Parameters Type Name Description System.IO.TextReader reader ICU4N.Text.BreakIterator iterator Fields | Improve this Doc View Source BUFFERMAX Declaration protected const int BUFFERMAX = 1024 Field Value Type Description System.Int32 | Improve this Doc View Source m_buffer Declaration protected readonly char[] m_buffer Field Value Type Description System.Char [] | Improve this Doc View Source m_offset accumulated offset of previous buffers for this reader, for offsetAtt Declaration protected int m_offset Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IncrementWord() Returns true if another word is available Declaration protected abstract bool IncrementWord() Returns Type Description System.Boolean | Improve this Doc View Source IsSafeEnd(Char) For sentence tokenization, these are the unambiguous break positions. Declaration protected virtual bool IsSafeEnd(char ch) Parameters Type Name Description System.Char ch Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Provides the next input sentence for analysis Declaration protected abstract void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.html",
    "title": "Namespace Lucene.Net.Collation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Collation <!-- 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. --> Unicode Collation support. Classes ICUCollationAttributeFactory Converts each token into its ICU4N.Text.CollationKey , and then encodes bytes as an index term. ICUCollationDocValuesField Indexes sort keys as a single-valued SortedDocValuesField . ICUCollationKeyAnalyzer Configures KeywordTokenizer with ICUCollationAttributeFactory . ICUCollationKeyFilter Converts each token into its ICU4N.Text.CollationKey , and then encodes the ICU4N.Text.CollationKey with IndexableBinaryStringTools , to allow it to be stored as an index term. ICUCollationKeyFilterFactory Factory for ICUCollationKeyFilter ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationAttributeFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationAttributeFactory.html",
    "title": "Class ICUCollationAttributeFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUCollationAttributeFactory Converts each token into its ICU4N.Text.CollationKey , and then encodes bytes as an index term. Inheritance System.Object AttributeSource.AttributeFactory ICUCollationAttributeFactory Inherited Members AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY 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.Collation Assembly : Lucene.Net.ICU.dll Syntax public class ICUCollationAttributeFactory : AttributeSource.AttributeFactory Remarks WARNING: Make sure you use exactly the same ICU4N.Text.Collator at index and query time -- ICU4N.Text.CollationKey s are only comparable when produced by the same ICU4N.Text.Collator . ICU4N.Text.RuleBasedCollator s are independently versioned, so it is safe to search against stored ICU4N.Text.CollationKey s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see ICU4N.Text.Collator Version The collation strength used - see ICU4N.Text.Collator.Strength ICU4N.Text.CollationKey s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationAttributeFactory to generate index terms, do not use CollationAttributeFactory on the query side, or vice versa. ICUCollationAttributeFactory is significantly faster and generates significantly shorter keys than CollationAttributeFactory. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. Constructors | Improve this Doc View Source ICUCollationAttributeFactory(Collator) Create an ICUCollationAttributeFactory , using DEFAULT_ATTRIBUTE_FACTORY as the factory for all other attributes. Declaration public ICUCollationAttributeFactory(Collator collator) Parameters Type Name Description ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator | Improve this Doc View Source ICUCollationAttributeFactory(AttributeSource.AttributeFactory, Collator) Create an ICUCollationAttributeFactory , using the supplied Attribute Factory as the factory for all other attributes. Declaration public ICUCollationAttributeFactory(AttributeSource.AttributeFactory delegate, Collator collator) Parameters Type Name Description AttributeSource.AttributeFactory delegate Attribute Factory ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Overrides AttributeSource.AttributeFactory.CreateAttributeInstance<T>()"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationDocValuesField.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationDocValuesField.html",
    "title": "Class ICUCollationDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUCollationDocValuesField Indexes sort keys as a single-valued SortedDocValuesField . Inheritance System.Object Field ICUCollationDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Collation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUCollationDocValuesField : Field, IIndexableField Remarks This is more efficient that ICUCollationKeyAnalyzer if the field only has one value: no uninversion is necessary to sort on the field, locale-sensitive range queries can still work via FieldCacheRangeFilter , and the underlying data structures built at index-time are likely more efficient and use less memory than FieldCache. Constructors | Improve this Doc View Source ICUCollationDocValuesField(String, Collator) Create a new ICUCollationDocValuesField . NOTE: you should not create a new one for each document, instead just make one and reuse it during your indexing process, setting the value via SetStringValue(String) . Declaration public ICUCollationDocValuesField(string name, Collator collator) Parameters Type Name Description System.String name Field name. ICU4N.Text.Collator collator Collator for generating collation keys. Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides Field.Name Methods | Improve this Doc View Source SetStringValue(String) Declaration public override void SetStringValue(string value) Parameters Type Name Description System.String value Overrides Field.SetStringValue(String) Implements IIndexableField"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyAnalyzer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyAnalyzer.html",
    "title": "Class ICUCollationKeyAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUCollationKeyAnalyzer Configures KeywordTokenizer with ICUCollationAttributeFactory . Inheritance System.Object Analyzer ICUCollationKeyAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Collation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUCollationKeyAnalyzer : Analyzer, IDisposable Remarks Converts the token into its ICU4N.Text.CollationKey , and then encodes the ICU4N.Text.CollationKey either directly or with IndexableBinaryStringTools (see below ), to allow it to be stored as an index term. WARNING: Make sure you use exactly the same ICU4N.Text.Collator at index and query time -- CollationKeys are only comparable when produced by the same ICU4N.Text.Collator . ICU4N.Text.RuleBasedCollator s are independently versioned, so it is safe to search against stored ICU4N.Text.CollationKey s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see ICU4N.Text.Collator Version The collation strength used - see ICU4N.Text.Collator.Strength ICU4N.Text.CollationKey s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationKeyAnalyzer to generate index terms, do not use CollationKeyAnalyzer on the query side, or vice versa. ICUCollationKeyAnalyzer is significantly faster and generates significantly shorter keys than CollationKeyAnalyzer. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. You must specify the required LuceneVersion compatibility when creating ICUCollationKeyAnalyzer : As of 4.0, ICU4N.Text.CollationKey s are directly encoded as bytes. Previous versions will encode the bytes with IndexableBinaryStringTools . Constructors | Improve this Doc View Source ICUCollationKeyAnalyzer(Collator) Declaration [Obsolete(\"Use ICUCollationKeyAnalyzer.ICUCollationKeyAnalyzer(LuceneVersion, Collator) and specify a version instead. This ctor will be removed in Lucene 5.0\")] public ICUCollationKeyAnalyzer(Collator collator) Parameters Type Name Description ICU4N.Text.Collator collator | Improve this Doc View Source ICUCollationKeyAnalyzer(LuceneVersion, Collator) Create a new ICUCollationKeyAnalyzer , using the specified collator . Declaration public ICUCollationKeyAnalyzer(LuceneVersion matchVersion, Collator collator) Parameters Type Name Description LuceneVersion matchVersion See ICUCollationKeyAnalyzer . ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilter.html",
    "title": "Class ICUCollationKeyFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUCollationKeyFilter Converts each token into its ICU4N.Text.CollationKey , and then encodes the ICU4N.Text.CollationKey with IndexableBinaryStringTools , to allow it to be stored as an index term. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUCollationKeyFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ICUCollationAttributeFactory instead, which encodes terms directly as bytes. This filter will be removed in Lucene 5.0\")] public sealed class ICUCollationKeyFilter : TokenFilter, IDisposable Remarks WARNING: Make sure you use exactly the same ICU4N.Text.Collator at index and query time -- CollationKeys are only comparable when produced by the same ICU4N.Text.Collator . ICU4N.Text.RuleBasedCollator s are independently versioned, so it is safe to search against stored ICU4N.Text.CollationKey s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see ICU4N.Text.Collator Version The collation strength used - see ICU4N.Text.Collator.Strength ICU4N.Text.CollationKey s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationKeyAnalyzer to generate index terms, do not use CollationKeyAnalyzer on the query side, or vice versa. ICUCollationKeyAnalyzer is significantly faster and generates significantly shorter keys than CollationKeyAnalyzer. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. Constructors | Improve this Doc View Source ICUCollationKeyFilter(TokenStream, Collator) Creates a new ICUCollationKeyFilter . Declaration public ICUCollationKeyFilter(TokenStream input, Collator collator) Parameters Type Name Description TokenStream input Source token stream. ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilterFactory.html",
    "title": "Class ICUCollationKeyFilterFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUCollationKeyFilterFactory Factory for ICUCollationKeyFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUCollationKeyFilterFactory Implements IMultiTermAwareComponent IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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.Collation Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ICUCollationKeyAnalyzer instead.\")] public class ICUCollationKeyFilterFactory : TokenFilterFactory, IMultiTermAwareComponent, IResourceLoaderAware Remarks This factory can be created in two ways: Based upon a system collator associated with a Locale. Based upon a tailored ruleset. Using a System collator: locale: RFC 3066 locale ID (mandatory) strength: 'primary','secondary','tertiary', 'quaternary', or 'identical' (optional) decomposition: 'no', or 'canonical' (optional) Using a Tailored ruleset: custom: UTF-8 text file containing rules supported by RuleBasedCollator (mandatory) strength: 'primary','secondary','tertiary', 'quaternary', or 'identical' (optional) decomposition: 'no' or 'canonical' (optional) Expert options: alternate: 'shifted' or 'non-ignorable'. Can be used to ignore punctuation/whitespace. caseLevel: 'true' or 'false'. Useful with strength=primary to ignore accents but not case. caseFirst: 'lower' or 'upper'. Useful to control which is sorted first when case is not ignored. numeric: 'true' or 'false'. Digits are sorted according to numeric value, e.g. foobar-9 sorts before foobar-10 Constructors | Improve this Doc View Source ICUCollationKeyFilterFactory(IDictionary<String, String>) Declaration public ICUCollationKeyFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IMultiTermAwareComponent IResourceLoaderAware See Also ICU4N.Text.Collator ICU4N.Text.RuleBasedCollator"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Collation.TokenAttributes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Collation.TokenAttributes <!-- 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. --> Custom <xref:Lucene.Net.Util.AttributeImpl> for indexing collation keys as index terms. Classes ICUCollatedTermAttribute Extension of CharTermAttribute that encodes the term text as a binary Unicode collation key instead of as UTF-8 bytes."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.ICUCollatedTermAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.ICUCollatedTermAttribute.html",
    "title": "Class ICUCollatedTermAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUCollatedTermAttribute Extension of CharTermAttribute that encodes the term text as a binary Unicode collation key instead of as UTF-8 bytes. Inheritance System.Object Attribute CharTermAttribute ICUCollatedTermAttribute Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute IAttribute J2N.Text.IAppendable Inherited Members CharTermAttribute.ICharSequence.HasValue CharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.Buffer CharTermAttribute.Buffer CharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.ICharTermAttribute.Length CharTermAttribute.ICharSequence.Length CharTermAttribute.Length CharTermAttribute.SetLength(Int32) CharTermAttribute.SetEmpty() CharTermAttribute.BytesRef CharTermAttribute.ICharSequence.Item[Int32] CharTermAttribute.ICharTermAttribute.Item[Int32] CharTermAttribute.Item[Int32] CharTermAttribute.Subsequence(Int32, Int32) CharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.Append(Char) CharTermAttribute.Append(Char[]) CharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.Append(String) CharTermAttribute.Append(StringBuilder) CharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.Append(ICharSequence) CharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.GetHashCode() CharTermAttribute.Clear() CharTermAttribute.Clone() CharTermAttribute.Equals(Object) CharTermAttribute.ToString() CharTermAttribute.ReflectWith(IAttributeReflector) CharTermAttribute.CopyTo(IAttribute) CharTermAttribute.ICharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.ICharTermAttribute.SetLength(Int32) CharTermAttribute.ICharTermAttribute.SetEmpty() CharTermAttribute.ICharTermAttribute.Append(ICharSequence) CharTermAttribute.ICharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(Char) CharTermAttribute.ICharTermAttribute.Append(Char[]) CharTermAttribute.ICharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(String) CharTermAttribute.ICharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(StringBuilder) CharTermAttribute.ICharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.IAppendable.Append(Char) CharTermAttribute.IAppendable.Append(String) CharTermAttribute.IAppendable.Append(String, Int32, Int32) CharTermAttribute.IAppendable.Append(StringBuilder) CharTermAttribute.IAppendable.Append(StringBuilder, Int32, Int32) CharTermAttribute.IAppendable.Append(Char[]) CharTermAttribute.IAppendable.Append(Char[], Int32, Int32) CharTermAttribute.IAppendable.Append(ICharSequence) CharTermAttribute.IAppendable.Append(ICharSequence, Int32, Int32) Attribute.ReflectAsString(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Collation.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public class ICUCollatedTermAttribute : CharTermAttribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAttribute, IAppendable Constructors | Improve this Doc View Source ICUCollatedTermAttribute(Collator) Create a new ICUCollatedTermAttribute Declaration public ICUCollatedTermAttribute(Collator collator) Parameters Type Name Description ICU4N.Text.Collator collator Collation key generator. Methods | Improve this Doc View Source FillBytesRef() Declaration public override void FillBytesRef() Overrides CharTermAttribute.FillBytesRef() Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute IAttribute J2N.Text.IAppendable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the 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.ICU.dll Syntax public static class DocumentExtensions Methods | Improve this Doc View Source AddICUCollationDocValuesField(Document, String, Collator) Adds a new ICUCollationDocValuesField . NOTE: you should not create a new one for each document, instead just make one and reuse it during your indexing process, setting the value via SetStringValue(String) . Declaration public static ICUCollationDocValuesField AddICUCollationDocValuesField(this Document document, string name, Collator collator) Parameters Type Name Description Document document This Document . System.String name Field name. ICU4N.Text.Collator collator Collator for generating collation keys. Returns Type Description ICUCollationDocValuesField The field that was added to this Document ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- 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. --> Misc extensions of the Document/Field API. Classes DocumentExtensions LUCENENET specific extensions to the Document class."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.DefaultPassageFormatter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.DefaultPassageFormatter.html",
    "title": "Class DefaultPassageFormatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultPassageFormatter Creates a formatted snippet from the top passages. The default implementation marks the query terms as bold, and places ellipses between unconnected passages. Inheritance System.Object PassageFormatter DefaultPassageFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class DefaultPassageFormatter : PassageFormatter Constructors | Improve this Doc View Source DefaultPassageFormatter() Creates a new DefaultPassageFormatter with the default tags. Declaration public DefaultPassageFormatter() | Improve this Doc View Source DefaultPassageFormatter(String, String, String, Boolean) Creates a new DefaultPassageFormatter with custom tags. Declaration public DefaultPassageFormatter(string preTag, string postTag, string ellipsis, bool escape) Parameters Type Name Description System.String preTag text which should appear before a highlighted term. System.String postTag text which should appear after a highlighted term. System.String ellipsis text which should be used to connect two unconnected passages. System.Boolean escape true if text should be html-escaped Fields | Improve this Doc View Source m_ellipsis text that will appear between two unconnected passages Declaration protected readonly string m_ellipsis Field Value Type Description System.String | Improve this Doc View Source m_escape true if we should escape for html Declaration protected readonly bool m_escape Field Value Type Description System.Boolean | Improve this Doc View Source m_postTag text that will appear after highlighted terms Declaration protected readonly string m_postTag Field Value Type Description System.String | Improve this Doc View Source m_preTag text that will appear before highlighted terms Declaration protected readonly string m_preTag Field Value Type Description System.String Methods | Improve this Doc View Source Append(StringBuilder, String, Int32, Int32) Appends original text to the response. Declaration protected virtual void Append(StringBuilder dest, string content, int start, int end) Parameters Type Name Description System.Text.StringBuilder dest resulting text, possibly transformed or encoded System.String content original text content System.Int32 start index of the first character in content System.Int32 end index of the character following the last character in content | Improve this Doc View Source Format(Passage[], String) Declaration public override object Format(Passage[] passages, string content) Parameters Type Name Description Passage [] passages System.String content Returns Type Description System.Object Overrides PassageFormatter.Format(Passage[], String)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.html",
    "title": "Namespace Lucene.Net.Search.PostingsHighlight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.PostingsHighlight <!-- 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. --> Highlighter implementation that uses offsets from postings lists. Classes DefaultPassageFormatter Creates a formatted snippet from the top passages. The default implementation marks the query terms as bold, and places ellipses between unconnected passages. ICUPostingsHighlighter Simple highlighter that does not analyze fields nor use term vectors. Instead it requires DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Passage Represents a passage (typically a sentence of the document). A passage contains NumMatches highlights from the query, and the offsets and query terms that correspond with each match. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PassageFormatter Creates a formatted snippet from the top passages. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PassageScorer Ranks passages found by ICUPostingsHighlighter . Each passage is scored as a miniature document within the document. The final score is computed as norm * ∑ ( weight * tf ). The default implementation is norm * BM25. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WholeBreakIterator Just produces one single fragment for the entire text"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.ICUPostingsHighlighter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.ICUPostingsHighlighter.html",
    "title": "Class ICUPostingsHighlighter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ICUPostingsHighlighter Simple highlighter that does not analyze fields nor use term vectors. Instead it requires DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Inheritance System.Object ICUPostingsHighlighter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class ICUPostingsHighlighter Remarks PostingsHighlighter treats the single original document as the whole corpus, and then scores individual passages as if they were documents in this corpus. It uses a ICU4N.Text.BreakIterator to find passages in the text; by default it breaks using ICU4N.Text.BreakIterator.GetSentenceInstance(System.Globalization.CultureInfo) (for sentence breaking). It then iterates in parallel (merge sorting by offset) through the positions of all terms from the query, coalescing those hits that occur in a single passage into a Passage , and then scores each Passage using a separate PassageScorer . Passages are finally formatted into highlighted snippets with a PassageFormatter . You can customize the behavior by subclassing this highlighter, some important hooks: GetBreakIterator(String) : Customize how the text is divided into passages. GetScorer(String) : Customize how passages are ranked. GetFormatter(String) : Customize how snippets are formatted. GetIndexAnalyzer(String) : Enable highlighting of MultiTermQuerys such as WildcardQuery . WARNING : The code is very new and probably still has some exciting bugs! Example usage: // configure field with offsets at index time IndexableFieldType offsetsType = new IndexableFieldType(TextField.TYPE_STORED); offsetsType.IndexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS; Field body = new Field(\"body\", \"foobar\", offsetsType); // retrieve highlights at query time ICUPostingsHighlighter highlighter = new ICUPostingsHighlighter(); Query query = new TermQuery(new Term(\"body\", \"highlighting\")); TopDocs topDocs = searcher.Search(query, n); string highlights[] = highlighter.Highlight(\"body\", query, searcher, topDocs); This is thread-safe, and can be used across different readers. Note that the .NET implementation differs from the PostingsHighlighter in Lucene in that it is backed by an ICU ICU4N.Text.RuleBasedBreakIterator , which differs slightly in default behavior than the one in the JDK. However, the ICU ICU4N.Text.RuleBasedBreakIterator behavior can be customized to meet a lot of scenarios that the one in the JDK cannot. See the ICU documentation at http://userguide.icu-project.org/boundaryanalysis/break-rules for more information how to pass custom rules to an ICU ICU4N.Text.RuleBasedBreakIterator . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ICUPostingsHighlighter() Creates a new highlighter with DEFAULT_MAX_LENGTH . Declaration public ICUPostingsHighlighter() | Improve this Doc View Source ICUPostingsHighlighter(Int32) Creates a new highlighter, specifying maximum content length. Declaration public ICUPostingsHighlighter(int maxLength) Parameters Type Name Description System.Int32 maxLength maximum content size to process. Exceptions Type Condition System.ArgumentException if maxLength is negative or int.MaxValue Fields | Improve this Doc View Source DEFAULT_MAX_LENGTH Default maximum content size to process. Typically snippets closer to the beginning of the document better summarize its content Declaration public static readonly int DEFAULT_MAX_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetBreakIterator(String) Returns the ICU4N.Text.BreakIterator to use for dividing text into passages. This instantiates an ICU4N.Text.BreakIterator.GetSentenceInstance(System.Globalization.CultureInfo) by default; subclasses can override to customize. Declaration protected virtual BreakIterator GetBreakIterator(string field) Parameters Type Name Description System.String field Returns Type Description ICU4N.Text.BreakIterator | Improve this Doc View Source GetEmptyHighlight(String, BreakIterator, Int32) Called to summarize a document when no hits were found. By default this just returns the first maxPassages sentences; subclasses can override to customize. Declaration protected virtual Passage[] GetEmptyHighlight(string fieldName, BreakIterator bi, int maxPassages) Parameters Type Name Description System.String fieldName ICU4N.Text.BreakIterator bi System.Int32 maxPassages Returns Type Description Passage [] | Improve this Doc View Source GetFormatter(String) Returns the PassageFormatter to use for formatting passages into highlighted snippets. This returns a new PassageFormatter by default; subclasses can override to customize. Declaration protected virtual PassageFormatter GetFormatter(string field) Parameters Type Name Description System.String field Returns Type Description PassageFormatter | Improve this Doc View Source GetIndexAnalyzer(String) Returns the analyzer originally used to index the content for field . This is used to highlight some MultiTermQuery s. Declaration protected virtual Analyzer GetIndexAnalyzer(string field) Parameters Type Name Description System.String field Returns Type Description Analyzer Analyzer or null (the default, meaning no special multi-term processing) | Improve this Doc View Source GetMultiValuedSeparator(String) Returns the logical separator between values for multi-valued fields. The default value is a space character, which means passages can span across values, but a subclass can override, for example with U+2029 PARAGRAPH SEPARATOR (PS) if each value holds a discrete passage for highlighting. Declaration protected virtual char GetMultiValuedSeparator(string field) Parameters Type Name Description System.String field Returns Type Description System.Char | Improve this Doc View Source GetScorer(String) Returns the PassageScorer to use for ranking passages. This returns a new PassageScorer by default; subclasses can override to customize. Declaration protected virtual PassageScorer GetScorer(string field) Parameters Type Name Description System.String field Returns Type Description PassageScorer | Improve this Doc View Source Highlight(String, Query, IndexSearcher, TopDocs) Highlights the top passages from a single field. Declaration public virtual string[] Highlight(string field, Query query, IndexSearcher searcher, TopDocs topDocs) Parameters Type Name Description System.String field field name to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. Returns Type Description System.String [] Array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first sentence for the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source Highlight(String, Query, IndexSearcher, TopDocs, Int32) Highlights the top-N passages from a single field. Declaration public virtual string[] Highlight(string field, Query query, IndexSearcher searcher, TopDocs topDocs, int maxPassages) Parameters Type Name Description System.String field field name to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. System.Int32 maxPassages The maximum number of top-N ranked passages used to form the highlighted snippets. Returns Type Description System.String [] Array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first maxPassages sentences from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException Illegal if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, TopDocs) Highlights the top passages from multiple fields. Conceptually, this behaves as a more efficient form of: IDictionary<string, string[]> m = new Dictionary<string, string[]>(); foreach (string field in fields) { m[field] = Highlight(field, query, searcher, topDocs); } return m; Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fields, Query query, IndexSearcher searcher, TopDocs topDocs) Parameters Type Name Description System.String [] fields field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first sentence from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, TopDocs, Int32[]) Highlights the top-N passages from multiple fields. Conceptually, this behaves as a more efficient form of: IDictionary<string, string[]> m = new Dictionary<string, string[]>(); foreach (string field in fields) { m[field] = Highlight(field, query, searcher, topDocs, maxPassages); } return m; Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fields, Query query, IndexSearcher searcher, TopDocs topDocs, int[] maxPassages) Parameters Type Name Description System.String [] fields field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. System.Int32 [] maxPassages The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first maxPassages sentences from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, Int32[], Int32[]) Highlights the top-N passages from multiple fields, for the provided int[] docids. Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fieldsIn, Query query, IndexSearcher searcher, int[] docidsIn, int[] maxPassagesIn) Parameters Type Name Description System.String [] fieldsIn field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. System.Int32 [] docidsIn containing the document IDs to highlight. System.Int32 [] maxPassagesIn The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in docidsIn . If no highlights were found for a document, the first maxPassages from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFieldsAsObjects(String[], Query, IndexSearcher, Int32[], Int32[]) Expert: highlights the top-N passages from multiple fields, for the provided int[] docids, to custom object as returned by the PassageFormatter . Use this API to render to something other than System.String . Declaration protected virtual IDictionary<string, object[]> HighlightFieldsAsObjects(string[] fieldsIn, Query query, IndexSearcher searcher, int[] docidsIn, int[] maxPassagesIn) Parameters Type Name Description System.String [] fieldsIn field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. System.Int32 [] docidsIn containing the document IDs to highlight. System.Int32 [] maxPassagesIn The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Object []> keyed on field name, containing the array of formatted snippets corresponding to the documents in docidsIn . If no highlights were found for a document, the first maxPassagesIn from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source LoadFieldValues(IndexSearcher, String[], Int32[], Int32) Loads the string values for each field X docID to be highlighted. By default this loads from stored fields, but a subclass can change the source. This method should allocate the string[fields.length][docids.length] and fill all values. The returned strings must be identical to what was indexed. Declaration protected virtual IList<string[]> LoadFieldValues(IndexSearcher searcher, string[] fields, int[] docids, int maxLength) Parameters Type Name Description IndexSearcher searcher System.String [] fields System.Int32 [] docids System.Int32 maxLength Returns Type Description System.Collections.Generic.IList < System.String []>"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.Passage.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.Passage.html",
    "title": "Class Passage | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Passage Represents a passage (typically a sentence of the document). A passage contains NumMatches highlights from the query, and the offsets and query terms that correspond with each match. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Passage Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public sealed class Passage Properties | Improve this Doc View Source EndOffset Gets the end index (exclusive) of the passage in the original content: always >= StartOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MatchEnds End offsets of the term matches, corresponding with MatchStarts . Only NumMatches are valid. Note that its possible that an end offset could exceed beyond the bounds of the passage EndOffset , if the Analyzer produced a term which spans a passage boundary. Declaration public IReadOnlyList<int> MatchEnds { get; } Property Value Type Description System.Collections.Generic.IReadOnlyList < System.Int32 > | Improve this Doc View Source MatchStarts Start offsets of the term matches, in increasing order. Only NumMatches are valid. Note that these offsets are absolute (not relative to StartOffset ). Declaration public IReadOnlyList<int> MatchStarts { get; } Property Value Type Description System.Collections.Generic.IReadOnlyList < System.Int32 > | Improve this Doc View Source MatchTerms BytesRef (term text) of the matches, corresponding with MatchStarts . Only NumMatches are valid. Declaration public IReadOnlyList<BytesRef> MatchTerms { get; } Property Value Type Description System.Collections.Generic.IReadOnlyList < BytesRef > | Improve this Doc View Source NumMatches Number of term matches available in MatchStarts , MatchEnds , MatchTerms Declaration public int NumMatches { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Score Passage's score. Declaration public float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source StartOffset Gets the start index (inclusive) of the passage in the original content: always >= 0. Declaration public int StartOffset { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageFormatter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageFormatter.html",
    "title": "Class PassageFormatter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PassageFormatter Creates a formatted snippet from the top passages. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PassageFormatter DefaultPassageFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public abstract class PassageFormatter Methods | Improve this Doc View Source Format(Passage[], String) Formats the top passages from content into a human-readable text snippet. Declaration public abstract object Format(Passage[] passages, string content) Parameters Type Name Description Passage [] passages top-N passages for the field. Note these are sorted in the order that they appear in the document for convenience. System.String content content for the field. Returns Type Description System.Object formatted highlight. Note that for the non-expert APIs in ICUPostingsHighlighter that return System.String , the System.Object.ToString() method on the System.Object returned by this method is used to compute the string."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageScorer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageScorer.html",
    "title": "Class PassageScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PassageScorer Ranks passages found by ICUPostingsHighlighter . Each passage is scored as a miniature document within the document. The final score is computed as norm * ∑ ( weight * tf ). The default implementation is norm * BM25. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PassageScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class PassageScorer Constructors | Improve this Doc View Source PassageScorer() Creates PassageScorer with these default values: k1 = 1.2 b = 0.75 pivot = 87 Declaration public PassageScorer() | Improve this Doc View Source PassageScorer(Single, Single, Single) Creates PassageScorer with specified scoring parameters Declaration public PassageScorer(float k1, float b, float pivot) Parameters Type Name Description System.Single k1 Controls non-linear term frequency normalization (saturation). System.Single b Controls to what degree passage length normalizes tf values. System.Single pivot Pivot value for length normalization (some rough idea of average sentence length in characters). Methods | Improve this Doc View Source Norm(Int32) Normalize a passage according to its position in the document. Typically passages towards the beginning of the document are more useful for summarizing the contents. The default implementation is 1 + 1/log(pivot + passageStart) Declaration public virtual float Norm(int passageStart) Parameters Type Name Description System.Int32 passageStart start offset of the passage Returns Type Description System.Single a boost value multiplied into the passage's core. | Improve this Doc View Source Tf(Int32, Int32) Computes term weight, given the frequency within the passage and the passage's length. Declaration public virtual float Tf(int freq, int passageLen) Parameters Type Name Description System.Int32 freq number of occurrences of within this passage System.Int32 passageLen length of the passage in characters. Returns Type Description System.Single term weight | Improve this Doc View Source Weight(Int32, Int32) Computes term importance, given its in-document statistics. Declaration public virtual float Weight(int contentLength, int totalTermFreq) Parameters Type Name Description System.Int32 contentLength length of document in characters System.Int32 totalTermFreq number of time term occurs in document Returns Type Description System.Single term importance"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.WholeBreakIterator.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.WholeBreakIterator.html",
    "title": "Class WholeBreakIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WholeBreakIterator Just produces one single fragment for the entire text Inheritance System.Object ICU4N.Text.BreakIterator WholeBreakIterator Inherited Members ICU4N.Text.BreakIterator.Done ICU4N.Text.BreakIterator.WordNone ICU4N.Text.BreakIterator.WordNoneLimit ICU4N.Text.BreakIterator.WordNumber ICU4N.Text.BreakIterator.WordNumberLimit ICU4N.Text.BreakIterator.WordLetter ICU4N.Text.BreakIterator.WordLetterLimit ICU4N.Text.BreakIterator.WordKana ICU4N.Text.BreakIterator.WordKanaLimit ICU4N.Text.BreakIterator.WordIdeo ICU4N.Text.BreakIterator.WordIdeoLimit ICU4N.Text.BreakIterator.Clone() ICU4N.Text.BreakIterator.GetRuleStatusVec(System.Int32[]) ICU4N.Text.BreakIterator.SetText(System.String) ICU4N.Text.BreakIterator.SetText(System.Text.StringBuilder) ICU4N.Text.BreakIterator.SetText(System.Char[]) ICU4N.Text.BreakIterator.SetText(J2N.Text.ICharSequence) ICU4N.Text.BreakIterator.GetWordInstance() ICU4N.Text.BreakIterator.GetWordInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetWordInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetLineInstance() ICU4N.Text.BreakIterator.GetLineInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetLineInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetCharacterInstance() ICU4N.Text.BreakIterator.GetCharacterInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetCharacterInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetSentenceInstance() ICU4N.Text.BreakIterator.GetSentenceInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetSentenceInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetTitleInstance() ICU4N.Text.BreakIterator.GetTitleInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetTitleInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.RegisterInstance(ICU4N.Text.BreakIterator, System.Globalization.CultureInfo, System.Int32) ICU4N.Text.BreakIterator.RegisterInstance(ICU4N.Text.BreakIterator, ICU4N.Util.ULocale, System.Int32) ICU4N.Text.BreakIterator.Unregister(System.Object) ICU4N.Text.BreakIterator.GetAvailableCultures() ICU4N.Text.BreakIterator.GetAvailableULocales() ICU4N.Text.BreakIterator.GetLocale(ICU4N.Util.ULocale.Type) ICU4N.Text.BreakIterator.RuleStatus System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public sealed class WholeBreakIterator : BreakIterator Properties | Improve this Doc View Source Current Declaration public override int Current { get; } Property Value Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Current | Improve this Doc View Source Text Declaration public override CharacterIterator Text { get; } Property Value Type Description ICU4N.Support.Text.CharacterIterator Overrides ICU4N.Text.BreakIterator.Text Methods | Improve this Doc View Source First() Declaration public override int First() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.First() | Improve this Doc View Source Following(Int32) Declaration public override int Following(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Following(System.Int32) | Improve this Doc View Source IsBoundary(Int32) Declaration public override bool IsBoundary(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Boolean Overrides ICU4N.Text.BreakIterator.IsBoundary(System.Int32) | Improve this Doc View Source Last() Declaration public override int Last() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Last() | Improve this Doc View Source Next() Declaration public override int Next() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Next() | Improve this Doc View Source Next(Int32) Declaration public override int Next(int n) Parameters Type Name Description System.Int32 n Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Next(System.Int32) | Improve this Doc View Source Preceding(Int32) Declaration public override int Preceding(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Preceding(System.Int32) | Improve this Doc View Source Previous() Declaration public override int Previous() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Previous() | Improve this Doc View Source SetText(CharacterIterator) Declaration public override void SetText(CharacterIterator newText) Parameters Type Name Description ICU4N.Support.Text.CharacterIterator newText Overrides ICU4N.Text.BreakIterator.SetText(ICU4N.Support.Text.CharacterIterator)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.BreakIteratorBoundaryScanner.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.BreakIteratorBoundaryScanner.html",
    "title": "Class BreakIteratorBoundaryScanner | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BreakIteratorBoundaryScanner A IBoundaryScanner implementation that uses ICU4N.Text.BreakIterator to find boundaries in the text. Inheritance System.Object BreakIteratorBoundaryScanner Implements IBoundaryScanner Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.ICU.dll Syntax public class BreakIteratorBoundaryScanner : IBoundaryScanner Constructors | Improve this Doc View Source BreakIteratorBoundaryScanner(BreakIterator) Declaration public BreakIteratorBoundaryScanner(BreakIterator bi) Parameters Type Name Description ICU4N.Text.BreakIterator bi Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Declaration public virtual int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Declaration public virtual int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 Implements IBoundaryScanner See Also ICU4N.Text.BreakIterator"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.html",
    "title": "Namespace Lucene.Net.Search.VectorHighlight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.VectorHighlight <!-- 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 is an another highlighter implementation. Features fast for large docs support N-gram fields support phrase-unit highlighting with slops support multi-term (includes wildcard, range, regexp, etc) queries need Java 1.5 highlight fields need to be stored with Positions and Offsets take into account query boost and/or IDF-weight to score fragments support colored highlight tags pluggable FragListBuilder / FieldFragList pluggable FragmentsBuilder Algorithm To explain the algorithm, let's use the following sample text (to be highlighted) and user query: Sample Text Lucene is a search engine library. User Query Lucene^2 OR \"search library\"~1 The user query is a BooleanQuery that consists of TermQuery(\"Lucene\") with boost of 2 and PhraseQuery(\"search library\") with slop of 1. For your convenience, here is the offsets and positions info of the sample text. +--------+-----------------------------------+ | | 1111111111222222222233333| | offset|01234567890123456789012345678901234| +--------+-----------------------------------+ |document|Lucene is a search engine library. | +--------*-----------------------------------+ |position|0 1 2 3 4 5 | +--------*-----------------------------------+ Step 1. In Step 1, Fast Vector Highlighter generates FieldQuery.QueryPhraseMap from the user query. QueryPhraseMap consists of the following members: public class QueryPhraseMap { boolean terminal; int slop; // valid if terminal == true and phraseHighlight == true float boost; // valid if terminal == true Map<String, QueryPhraseMap> subMap; } QueryPhraseMap has subMap. The key of the subMap is a term text in the user query and the value is a subsequent QueryPhraseMap . If the query is a term (not phrase), then the subsequent QueryPhraseMap is marked as terminal. If the query is a phrase, then the subsequent QueryPhraseMap is not a terminal and it has the next term text in the phrase. From the sample user query, the following QueryPhraseMap will be generated: QueryPhraseMap +--------+-+ +-------+-+ |\"Lucene\"|o+->|boost=2|*| * : terminal +--------+-+ +-------+-+ +--------+-+ +---------+-+ +-------+------+-+ |\"search\"|o+->|\"library\"|o+->|boost=1|slop=1|*| +--------+-+ +---------+-+ +-------+------+-+ Step 2. In Step 2, Fast Vector Highlighter generates FieldTermStack . Fast Vector Highlighter uses term vector data (must be stored #setStoreTermVectorOffsets(boolean) and #setStoreTermVectorPositions(boolean) ) to generate it. FieldTermStack keeps the terms in the user query. Therefore, in this sample case, Fast Vector Highlighter generates the following FieldTermStack : FieldTermStack +------------------+ |\"Lucene\"(0,6,0) | +------------------+ |\"search\"(12,18,3) | +------------------+ |\"library\"(26,33,5)| +------------------+ where : \"termText\"(startOffset,endOffset,position) Step 3. In Step 3, Fast Vector Highlighter generates FieldPhraseList by reference to QueryPhraseMap and FieldTermStack . FieldPhraseList +----------------+-----------------+---+ |\"Lucene\" |[(0,6)] |w=2| +----------------+-----------------+---+ |\"search library\"|[(12,18),(26,33)]|w=1| +----------------+-----------------+---+ The type of each entry is WeightedPhraseInfo that consists of an array of terms offsets and weight. Step 4. In Step 4, Fast Vector Highlighter creates FieldFragList by reference to FieldPhraseList . In this sample case, the following FieldFragList will be generated: FieldFragList +---------------------------------+ |\"Lucene\"[(0,6)] | |\"search library\"[(12,18),(26,33)]| |totalBoost=3 | +---------------------------------+ The calculation for each FieldFragList.WeightedFragInfo.totalBoost (weight) depends on the implementation of FieldFragList.add( ... ) : public void add( int startOffset, int endOffset, List<WeightedPhraseInfo> phraseInfoList ) { float totalBoost = 0; List<SubInfo> subInfos = new ArrayList<SubInfo>(); for( WeightedPhraseInfo phraseInfo : phraseInfoList ){ subInfos.add( new SubInfo( phraseInfo.getText(), phraseInfo.getTermsOffsets(), phraseInfo.getSeqnum() ) ); totalBoost += phraseInfo.getBoost(); } getFragInfos().add( new WeightedFragInfo( startOffset, endOffset, subInfos, totalBoost ) ); } The used implementation of FieldFragList is noted in BaseFragListBuilder.createFieldFragList( ... ) : public FieldFragList createFieldFragList( FieldPhraseList fieldPhraseList, int fragCharSize ){ return createFieldFragList( fieldPhraseList, new SimpleFieldFragList( fragCharSize ), fragCharSize ); } Currently there are basically to approaches available: SimpleFragListBuilder using SimpleFieldFragList : sum-of-boosts -approach. The totalBoost is calculated by summarizing the query-boosts per term. Per default a term is boosted by 1.0 WeightedFragListBuilder using WeightedFieldFragList : sum-of-distinct-weights -approach. The totalBoost is calculated by summarizing the IDF-weights of distinct terms. Comparison of the two approaches: query = das alte testament (The Old Testament) Terms in fragment sum-of-distinct-weights sum-of-boosts das alte testament 5.339621 3.0 das alte testament 5.339621 3.0 das testament alte 5.339621 3.0 das alte testament 5.339621 3.0 das testament 2.9455688 2.0 das alte 2.4759595 2.0 das das das das 1.5015357 4.0 das das das 1.3003681 3.0 das das 1.061746 2.0 alte 1.0 1.0 alte 1.0 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 Step 5. In Step 5, by using FieldFragList and the field stored data, Fast Vector Highlighter creates highlighted snippets! Classes BreakIteratorBoundaryScanner A IBoundaryScanner implementation that uses ICU4N.Text.BreakIterator to find boundaries in the text."
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.FixedBitSetCachingWrapperFilter.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.FixedBitSetCachingWrapperFilter.html",
    "title": "Class FixedBitSetCachingWrapperFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FixedBitSetCachingWrapperFilter A CachingWrapperFilter that caches sets using a FixedBitSet , as required for joins. Inheritance System.Object Filter CachingWrapperFilter FixedBitSetCachingWrapperFilter Inherited Members CachingWrapperFilter.Filter CachingWrapperFilter.CacheImpl(DocIdSetIterator, AtomicReader) CachingWrapperFilter.GetDocIdSet(AtomicReaderContext, IBits) CachingWrapperFilter.ToString() CachingWrapperFilter.Equals(Object) CachingWrapperFilter.GetHashCode() CachingWrapperFilter.EMPTY_DOCIDSET CachingWrapperFilter.GetSizeInBytes() Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class FixedBitSetCachingWrapperFilter : CachingWrapperFilter Constructors | Improve this Doc View Source FixedBitSetCachingWrapperFilter(Filter) Sole constructor, see CachingWrapperFilter(Filter) . Declaration public FixedBitSetCachingWrapperFilter(Filter filter) Parameters Type Name Description Filter filter Methods | Improve this Doc View Source DocIdSetToCache(DocIdSet, AtomicReader) Declaration protected override DocIdSet DocIdSetToCache(DocIdSet docIdSet, AtomicReader reader) Parameters Type Name Description DocIdSet docIdSet AtomicReader reader Returns Type Description DocIdSet Overrides CachingWrapperFilter.DocIdSetToCache(DocIdSet, AtomicReader)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.html",
    "title": "Namespace Lucene.Net.Join | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Join <!-- 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 modules support index-time and query-time joins. Index-time joins The index-time joining support joins while searching, where joined documents are indexed as a single document block using IndexWriter.addDocuments . This is useful for any normalized content (XML documents or database tables). In database terms, all rows for all joined tables matching a single row of the primary table must be indexed as a single document block, with the parent document being last in the group. When you index in this way, the documents in your index are divided into parent documents (the last document of each block) and child documents (all others). You provide a Filter that identifies the parent documents, as Lucene does not currently record any information about doc blocks. At search time, use ToParentBlockJoinQuery to remap/join matches from any child Query (ie, a query that matches only child documents) up to the parent document space. The resulting query can then be used as a clause in any query that matches parent. If you only care about the parent documents matching the query, you can use any collector to collect the parent hits, but if you'd also like to see which child documents match for each parent document, use the ToParentBlockJoinCollector to collect the hits. Once the search is done, you retrieve a <xref:Lucene.Net.Grouping.TopGroups> instance from the ToParentBlockJoinCollector.getTopGroups method. To map/join in the opposite direction, use ToChildBlockJoinQuery . This wraps any query matching parent documents, creating the joined query matching only child documents. Query-time joins The query time joining is index term based and implemented as two pass search. The first pass collects all the terms from a fromField that match the fromQuery. The second pass returns all documents that have matching terms in a toField to the terms collected in the first pass. Query time joining has the following input: fromField : The from field to join from. fromQuery : The query executed to collect the from terms. This is usually the user specified query. multipleValuesPerDocument : Whether the fromField contains more than one value per document scoreMode : Defines how scores are translated to the other join side. If you don't care about scoring use #None mode. This will disable scoring and is therefore more efficient (requires less memory and is faster). toField : The to field to join to Basically the query-time joining is accessible from one static method. The user of this method supplies the method with the described input and a IndexSearcher where the from terms need to be collected from. The returned query can be executed with the same IndexSearcher , but also with another IndexSearcher . Example usage of the JoinUtil.createJoinQuery : String fromField = \"from\"; // Name of the from field boolean multipleValuesPerDocument = false; // Set only yo true in the case when your fromField has multiple values per document in your index String toField = \"to\"; // Name of the to field ScoreMode scoreMode = ScoreMode.Max // Defines how the scores are translated into the other side of the join. Query fromQuery = new TermQuery(new Term(\"content\", searchTerm)); // Query executed to collect from values to join to the to values Query joinQuery = JoinUtil.createJoinQuery(fromField, multipleValuesPerDocument, toField, fromQuery, fromSearcher, scoreMode); TopDocs topDocs = toSearcher.search(joinQuery, 10); // Note: toSearcher can be the same as the fromSearcher // Render topDocs... Classes FixedBitSetCachingWrapperFilter A CachingWrapperFilter that caches sets using a FixedBitSet , as required for joins. JoinUtil Utility for query time joining using Lucene.Net.Join.TermsQuery and Lucene.Net.Join.TermsCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToChildBlockJoinQuery Just like ToParentBlockJoinQuery , except this query joins in reverse: you provide a Query matching parent documents and it joins down to child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinCollector Collects parent document hits for a Query containing one more more BlockJoinQuery clauses, sorted by the specified parent Sort . Note that this cannot perform arbitrary joins; rather, it requires that all joined documents are indexed as a doc block (using AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) . Ie, the join is computed at index time. The parent Sort must only use fields from the parent documents; sorting by field in the child documents is not supported. You should only use this collector if one or more of the clauses in the query is a ToParentBlockJoinQuery . This collector will find those query clauses and record the matching child documents for the top scoring parent documents. Multiple joins (star join) and nested joins and a mix of the two are allowed, as long as in all cases the documents corresponding to a single row of each joined parent table were indexed as a doc block. For the simple star join you can retrieve the ITopGroups<TGroupValue> instance containing each ToParentBlockJoinQuery 's matching child documents for the top parent groups, using GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) . Ie, a single query, which will contain two or more ToParentBlockJoinQuery 's as clauses representing the star join, can then retrieve two or more ITopGroups<TGroupValue> instances. For nested joins, the query will run correctly (ie, match the right parent and child documents), however, because TopGroups<TGroupValue> is currently unable to support nesting (each group is not able to hold another TopGroups<TGroupValue> ), you are only able to retrieve the TopGroups<TGroupValue> of the first join. The TopGroups<TGroupValue> of the nested joins will not be correct. See http://lucene.apache.org/core/4_8_0/join/ for a code sample. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinFieldComparer A field comparer that allows parent documents to be sorted by fields from the nested / child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinFieldComparer.Highest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the highest values in the child / nested docs first. ToParentBlockJoinFieldComparer.Lowest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the lowest values in the child / nested docs first. ToParentBlockJoinQuery This query requires that you index children and parent docs as a single block, using the AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. In each block, the child documents must appear first, ending with the parent document. At search time you provide a Filter identifying the parents, however this Filter must provide an FixedBitSet per sub-reader. Once the block index is built, use this query to wrap any sub-query matching only child docs and join matches in that child document space up to the parent document space. You can then use this Query as a clause with other queries in the parent document space. See ToChildBlockJoinQuery if you need to join in the reverse order. The child documents must be orthogonal to the parent documents: the wrapped child query must never return a parent document. If you'd like to retrieve ITopGroups<TGroupValue> for the resulting query, use the ToParentBlockJoinCollector . Note that this is not necessary, ie, if you simply want to collect the parent documents and don't need to see which child documents matched under that parent, then you can use any collector. NOTE : If the overall query contains parent-only matches, for example you OR a parent-only query with a joined child-only query, then the resulting collected documents will be correct, however the ITopGroups<TGroupValue> you get from ToParentBlockJoinCollector will not contain every child for parents that had matched. See http://lucene.apache.org/core/4_8_0/join/ for an overview. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinSortField A special sort field that allows sorting parent docs based on nested / child level fields. Based on the sort order it either takes the document with the lowest or highest field value into account. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums ScoreMode How to aggregate multiple child hit scores into a single parent score."
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.JoinUtil.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.JoinUtil.html",
    "title": "Class JoinUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JoinUtil Utility for query time joining using Lucene.Net.Join.TermsQuery and Lucene.Net.Join.TermsCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object JoinUtil 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.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class JoinUtil Methods | Improve this Doc View Source CreateJoinQuery(String, Boolean, String, Query, IndexSearcher, ScoreMode) Method for query time joining. Execute the returned query with a IndexSearcher to retrieve all documents that have the same terms in the to field that match with documents matching the specified fromQuery and have the same terms in the from field. In the case a single document relates to more than one document the multipleValuesPerDocument option should be set to true. When the multipleValuesPerDocument is set to true only the the score from the first encountered join value originating from the 'from' side is mapped into the 'to' side. Even in the case when a second join value related to a specific document yields a higher score. Obviously this doesn't apply in the case that None is used, since no scores are computed at all. Memory considerations: During joining all unique join values are kept in memory. On top of that when the scoreMode isn't set to None a float value per unique join value is kept in memory for computing scores. When scoreMode is set to Avg also an additional integer value is kept in memory per unique join value. Declaration public static Query CreateJoinQuery(string fromField, bool multipleValuesPerDocument, string toField, Query fromQuery, IndexSearcher fromSearcher, ScoreMode scoreMode) Parameters Type Name Description System.String fromField The from field to join from System.Boolean multipleValuesPerDocument Whether the from field has multiple terms per document System.String toField The to field to join to Query fromQuery The query to match documents on the from side IndexSearcher fromSearcher The searcher that executed the specified fromQuery ScoreMode scoreMode Instructs how scores from the fromQuery are mapped to the returned query Returns Type Description Query A Query instance that can be used to join documents based on the terms in the from and to field Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ScoreMode.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ScoreMode.html",
    "title": "Enum ScoreMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum ScoreMode How to aggregate multiple child hit scores into a single parent score. Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public enum ScoreMode Fields Name Description Avg Parent hit's score is the average of all child scores. Max Parent hit's score is the max of all child scores. None Do no scoring. Total Parent hit's score is the sum of all child scores."
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToChildBlockJoinQuery.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToChildBlockJoinQuery.html",
    "title": "Class ToChildBlockJoinQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToChildBlockJoinQuery Just like ToParentBlockJoinQuery , except this query joins in reverse: you provide a Query matching parent documents and it joins down to child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query ToChildBlockJoinQuery Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToChildBlockJoinQuery : Query Constructors | Improve this Doc View Source ToChildBlockJoinQuery(Query, Filter, Boolean) Create a ToChildBlockJoinQuery . Declaration public ToChildBlockJoinQuery(Query parentQuery, Filter parentsFilter, bool doScores) Parameters Type Name Description Query parentQuery Query that matches parent documents Filter parentsFilter Filter (must produce FixedBitSet per-segment, like FixedBitSetCachingWrapperFilter ) identifying the parent documents. System.Boolean doScores True if parent scores should be calculated. Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | 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 ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinCollector.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinCollector.html",
    "title": "Class ToParentBlockJoinCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToParentBlockJoinCollector Collects parent document hits for a Query containing one more more BlockJoinQuery clauses, sorted by the specified parent Sort . Note that this cannot perform arbitrary joins; rather, it requires that all joined documents are indexed as a doc block (using AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) . Ie, the join is computed at index time. The parent Sort must only use fields from the parent documents; sorting by field in the child documents is not supported. You should only use this collector if one or more of the clauses in the query is a ToParentBlockJoinQuery . This collector will find those query clauses and record the matching child documents for the top scoring parent documents. Multiple joins (star join) and nested joins and a mix of the two are allowed, as long as in all cases the documents corresponding to a single row of each joined parent table were indexed as a doc block. For the simple star join you can retrieve the ITopGroups<TGroupValue> instance containing each ToParentBlockJoinQuery 's matching child documents for the top parent groups, using GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) . Ie, a single query, which will contain two or more ToParentBlockJoinQuery 's as clauses representing the star join, can then retrieve two or more ITopGroups<TGroupValue> instances. For nested joins, the query will run correctly (ie, match the right parent and child documents), however, because TopGroups<TGroupValue> is currently unable to support nesting (each group is not able to hold another TopGroups<TGroupValue> ), you are only able to retrieve the TopGroups<TGroupValue> of the first join. The TopGroups<TGroupValue> of the nested joins will not be correct. See http://lucene.apache.org/core/4_8_0/join/ for a code sample. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ToParentBlockJoinCollector Implements 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.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinCollector : ICollector Constructors | Improve this Doc View Source ToParentBlockJoinCollector(Sort, Int32, Boolean, Boolean) Creates a ToParentBlockJoinCollector . The provided sort must not be null. If you pass true trackScores , all ToParentBlockQuery instances must not use None . Declaration public ToParentBlockJoinCollector(Sort sort, int numParentHits, bool trackScores, bool trackMaxScore) Parameters Type Name Description Sort sort System.Int32 numParentHits System.Boolean trackScores System.Boolean trackMaxScore Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxScore Returns the highest score across all collected parent hits, as long as trackMaxScores=true was passed ToParentBlockJoinCollector(Sort, Int32, Boolean, Boolean) on construction. Else, this returns System.Single.NaN . Declaration public virtual float MaxScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int parentDoc) Parameters Type Name Description System.Int32 parentDoc | Improve this Doc View Source GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) Returns the ITopGroups<TGroupValue> for the specified BlockJoinQuery. The groupValue of each GroupDocs will be the parent docID for that group. The number of documents within each group is calculated as minimum of maxDocsPerGroup and number of matched child documents for that group. Returns null if no groups matched. Declaration public virtual ITopGroups<int> GetTopGroups(ToParentBlockJoinQuery query, Sort withinGroupSort, int offset, int maxDocsPerGroup, int withinGroupOffset, bool fillSortFields) Parameters Type Name Description ToParentBlockJoinQuery query Search query Sort withinGroupSort Sort criteria within groups System.Int32 offset Parent docs offset System.Int32 maxDocsPerGroup Upper bound of documents per group number System.Int32 withinGroupOffset Offset within each group of child docs System.Boolean fillSortFields Specifies whether to add sort fields or not Returns Type Description ITopGroups < System.Int32 > ITopGroups<TGroupValue> for specified query Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetTopGroupsWithAllChildDocs(ToParentBlockJoinQuery, Sort, Int32, Int32, Boolean) Returns the TopGroups<TGroupValue> for the specified BlockJoinQuery. The groupValue of each GroupDocs will be the parent docID for that group. The number of documents within each group equals to the total number of matched child documents for that group. Returns null if no groups matched. Declaration public virtual ITopGroups<int> GetTopGroupsWithAllChildDocs(ToParentBlockJoinQuery query, Sort withinGroupSort, int offset, int withinGroupOffset, bool fillSortFields) Parameters Type Name Description ToParentBlockJoinQuery query Search query Sort withinGroupSort Sort criteria within groups System.Int32 offset Parent docs offset System.Int32 withinGroupOffset Offset within each group of child docs System.Boolean fillSortFields Specifies whether to add sort fields or not Returns Type Description ITopGroups < System.Int32 > ITopGroups<TGroupValue> for specified query Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Highest.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Highest.html",
    "title": "Class ToParentBlockJoinFieldComparer.Highest | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer.Highest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the highest values in the child / nested docs first. Inheritance System.Object FieldComparer FieldComparer < System.Object > ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Highest Inherited Members ToParentBlockJoinFieldComparer.Compare(Int32, Int32) ToParentBlockJoinFieldComparer.SetBottom(Int32) ToParentBlockJoinFieldComparer.SetTopValue(Object) ToParentBlockJoinFieldComparer.SetNextReader(AtomicReaderContext) ToParentBlockJoinFieldComparer.Item[Int32] FieldComparer<Object>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class Highest : ToParentBlockJoinFieldComparer Constructors | Improve this Doc View Source Highest(FieldComparer, Filter, Filter, Int32) Create ToParentBlockJoinFieldComparer.Highest Declaration public Highest(FieldComparer wrappedComparer, Filter parentFilter, Filter childFilter, int spareSlot) Parameters Type Name Description FieldComparer wrappedComparer The FieldComparer on the child / nested level. Filter parentFilter Filter (must produce FixedBitSet per-segment) that identifies the parent documents. Filter childFilter Filter that defines which child / nested documents participates in sorting. System.Int32 spareSlot The extra slot inside the wrapped comparer that is used to compare which nested document inside the parent document scope is most competitive. Methods | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int parentDoc) Parameters Type Name Description System.Int32 slot System.Int32 parentDoc Overrides Lucene.Net.Search.FieldComparer<System.Object>.Copy(System.Int32, System.Int32)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.html",
    "title": "Class ToParentBlockJoinFieldComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer A field comparer that allows parent documents to be sorted by fields from the nested / child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparer FieldComparer < System.Object > ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Highest ToParentBlockJoinFieldComparer.Lowest Inherited Members FieldComparer<Object>.CompareBottom(Int32) FieldComparer<Object>.CompareTop(Int32) FieldComparer<Object>.Copy(Int32, Int32) FieldComparer<Object>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public abstract class ToParentBlockJoinFieldComparer : FieldComparer<object> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.Compare(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Object>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Object>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Object>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Lowest.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Lowest.html",
    "title": "Class ToParentBlockJoinFieldComparer.Lowest | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer.Lowest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the lowest values in the child / nested docs first. Inheritance System.Object FieldComparer FieldComparer < System.Object > ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Lowest Inherited Members ToParentBlockJoinFieldComparer.Compare(Int32, Int32) ToParentBlockJoinFieldComparer.SetBottom(Int32) ToParentBlockJoinFieldComparer.SetTopValue(Object) ToParentBlockJoinFieldComparer.SetNextReader(AtomicReaderContext) ToParentBlockJoinFieldComparer.Item[Int32] FieldComparer<Object>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class Lowest : ToParentBlockJoinFieldComparer Constructors | Improve this Doc View Source Lowest(FieldComparer, Filter, Filter, Int32) Create ToParentBlockJoinFieldComparer.Lowest Declaration public Lowest(FieldComparer wrappedComparer, Filter parentFilter, Filter childFilter, int spareSlot) Parameters Type Name Description FieldComparer wrappedComparer The FieldComparer on the child / nested level. Filter parentFilter Filter (must produce FixedBitSet per-segment) that identifies the parent documents. Filter childFilter Filter that defines which child / nested documents participates in sorting. System.Int32 spareSlot The extra slot inside the wrapped comparer that is used to compare which nested document inside the parent document scope is most competitive. Methods | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int parentDoc) Parameters Type Name Description System.Int32 slot System.Int32 parentDoc Overrides Lucene.Net.Search.FieldComparer<System.Object>.Copy(System.Int32, System.Int32)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinQuery.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinQuery.html",
    "title": "Class ToParentBlockJoinQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToParentBlockJoinQuery This query requires that you index children and parent docs as a single block, using the AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. In each block, the child documents must appear first, ending with the parent document. At search time you provide a Filter identifying the parents, however this Filter must provide an FixedBitSet per sub-reader. Once the block index is built, use this query to wrap any sub-query matching only child docs and join matches in that child document space up to the parent document space. You can then use this Query as a clause with other queries in the parent document space. See ToChildBlockJoinQuery if you need to join in the reverse order. The child documents must be orthogonal to the parent documents: the wrapped child query must never return a parent document. If you'd like to retrieve ITopGroups<TGroupValue> for the resulting query, use the ToParentBlockJoinCollector . Note that this is not necessary, ie, if you simply want to collect the parent documents and don't need to see which child documents matched under that parent, then you can use any collector. NOTE : If the overall query contains parent-only matches, for example you OR a parent-only query with a joined child-only query, then the resulting collected documents will be correct, however the ITopGroups<TGroupValue> you get from ToParentBlockJoinCollector will not contain every child for parents that had matched. See http://lucene.apache.org/core/4_8_0/join/ for an overview. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query ToParentBlockJoinQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinQuery : Query Constructors | Improve this Doc View Source ToParentBlockJoinQuery(Query, Filter, ScoreMode) Create a ToParentBlockJoinQuery . Declaration public ToParentBlockJoinQuery(Query childQuery, Filter parentsFilter, ScoreMode scoreMode) Parameters Type Name Description Query childQuery Query matching child documents. Filter parentsFilter Filter (must produce FixedBitSet per-segment, like FixedBitSetCachingWrapperFilter ) identifying the parent documents. ScoreMode scoreMode How to aggregate multiple child scores into a single parent score. Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | 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 ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinSortField.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinSortField.html",
    "title": "Class ToParentBlockJoinSortField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToParentBlockJoinSortField A special sort field that allows sorting parent docs based on nested / child level fields. Based on the sort order it either takes the document with the lowest or highest field value into account. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortField ToParentBlockJoinSortField Inherited Members SortField.FIELD_SCORE SortField.FIELD_DOC SortField.MissingValue SortField.m_missingValue SortField.STRING_FIRST SortField.STRING_LAST SortField.Field SortField.Type SortField.Parser SortField.IsReverse SortField.ComparerSource SortField.ToString() SortField.Equals(Object) SortField.GetHashCode() SortField.BytesComparer SortField.Rewrite(IndexSearcher) SortField.NeedsScores System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinSortField : SortField Constructors | Improve this Doc View Source ToParentBlockJoinSortField(String, SortFieldType, Boolean, Filter, Filter) Create ToParentBlockJoinSortField . The parent document ordering is based on child document ordering (reverse). Declaration public ToParentBlockJoinSortField(string field, SortFieldType type, bool reverse, Filter parentFilter, Filter childFilter) Parameters Type Name Description System.String field The sort field on the nested / child level. SortFieldType type The sort type on the nested / child level. System.Boolean reverse Whether natural order should be reversed on the nested / child level. Filter parentFilter Filter that identifies the parent documents. Filter childFilter Filter that defines which child documents participates in sorting. | Improve this Doc View Source ToParentBlockJoinSortField(String, SortFieldType, Boolean, Boolean, Filter, Filter) Create ToParentBlockJoinSortField . Declaration public ToParentBlockJoinSortField(string field, SortFieldType type, bool reverse, bool order, Filter parentFilter, Filter childFilter) Parameters Type Name Description System.String field The sort field on the nested / child level. SortFieldType type The sort type on the nested / child level. System.Boolean reverse Whether natural order should be reversed on the nested / child document level. System.Boolean order Whether natural order should be reversed on the parent level. Filter parentFilter Filter that identifies the parent documents. Filter childFilter Filter that defines which child documents participates in sorting. Methods | Improve this Doc View Source GetComparer(Int32, Int32) Declaration public override FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits System.Int32 sortPos Returns Type Description FieldComparer Overrides SortField.GetComparer(Int32, Int32)"
  },
  "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.html": {
    "href": "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.html",
    "title": "Namespace Lucene.Net.Index.Memory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Memory <!-- 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. --> High-performance single-document main memory Apache Lucene fulltext search index. Classes MemoryIndex High-performance single-document main memory Apache Lucene fulltext search index. Overview This class is a replacement/substitute for a large subset of RAMDirectory functionality. It is designed to enable maximum efficiency for on-the-fly matchmaking combining structured and fuzzy fulltext search in realtime streaming applications such as Nux XQuery based XML message queues, publish-subscribe systems for Blogs/newsfeeds, text chat, data acquisition and distribution systems, application level routers, firewalls, classifiers, etc. Rather than targeting fulltext search of infrequent queries over huge persistent data archives (historic search), this class targets fulltext search of huge numbers of queries over comparatively small transient realtime data (prospective search). For example as in float score = Search(string text, Query query) Each instance can hold at most one Lucene \"document\", with a document containing zero or more \"fields\", each field having a name and a fulltext value. The fulltext value is tokenized (split and transformed) into zero or more index terms (aka words) on AddField() , according to the policy implemented by an Analyzer. For example, Lucene analyzers can split on whitespace, normalize to lower case for case insensitivity, ignore common terms with little discriminatory value such as \"he\", \"in\", \"and\" (stop words), reduce the terms to their natural linguistic root form such as \"fishing\" being reduced to \"fish\" (stemming), resolve synonyms/inflexions/thesauri (upon indexing and/or querying), etc. For details, see Lucene Analyzer Intro . Arbitrary Lucene queries can be run against this class - see Lucene Query Syntax as well as Query Parser Rules . Note that a Lucene query selects on the field names and associated (indexed) tokenized terms, not on the original fulltext(s) - the latter are not stored but rather thrown away immediately after tokenization. For some interesting background information on search technology, see Bob Wyman's Prospective Search , Jim Gray's A Call to Arms - Custom subscriptions , and Tim Bray's On Search, the Series . Example Usage Analyzer analyzer = new SimpleAnalyzer(version); MemoryIndex index = new MemoryIndex(); index.AddField(\"content\", \"Readings about Salmons and other select Alaska fishing Manuals\", analyzer); index.AddField(\"author\", \"Tales of James\", analyzer); QueryParser parser = new QueryParser(version, \"content\", analyzer); float score = index.Search(parser.Parse(\"+author:james +salmon~ +fish* manual~\")); if (score > 0.0f) { Console.WriteLine(\"it's a match\"); } else { Console.WriteLine(\"no match found\"); } Console.WriteLine(\"indexData=\" + index.toString()); Example XQuery Usage (: An XQuery that finds all books authored by James that have something to do with \"salmon fishing manuals\", sorted by relevance :) declare namespace lucene = \"java:nux.xom.pool.FullTextUtil\"; declare variable $query := \"+salmon~ +fish* manual~\"; (: any arbitrary Lucene query can go here :) for $book in /books/book[author=\"James\" and lucene:match(abstract, $query) > 0.0] let $score := lucene:match($book/abstract, $query) order by $score descending return $book No thread safety guarantees An instance can be queried multiple times with the same or different queries, but an instance is not thread-safe. If desired use idioms such as: MemoryIndex index = ... lock (index) { // read and/or write index (i.e. add fields and/or query) } Performance Notes Internally there's a new data structure geared towards efficient indexing and searching, plus the necessary support code to seamlessly plug into the Lucene framework. This class performs very well for very small texts (e.g. 10 chars) as well as for large texts (e.g. 10 MB) and everything in between. Typically, it is about 10-100 times faster than RAMDirectory . Note that RAMDirectory has particularly large efficiency overheads for small to medium sized texts, both in time and space. Indexing a field with N tokens takes O(N) in the best case, and O(N logN) in the worst case. Memory consumption is probably larger than for RAMDirectory . Example throughput of many simple term queries over a single MemoryIndex: ~500000 queries/sec on a MacBook Pro, jdk 1.5.0_06, server VM. As always, your mileage may vary. If you're curious about the whereabouts of bottlenecks, run java 1.5 with the non-perturbing '-server -agentlib:hprof=cpu=samples,depth=10' flags, then study the trace log and correlate its hotspot trailer with its call stack headers (see hprof tracing )."
  },
  "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.MemoryIndex.html": {
    "href": "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.MemoryIndex.html",
    "title": "Class MemoryIndex | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MemoryIndex High-performance single-document main memory Apache Lucene fulltext search index. Overview This class is a replacement/substitute for a large subset of RAMDirectory functionality. It is designed to enable maximum efficiency for on-the-fly matchmaking combining structured and fuzzy fulltext search in realtime streaming applications such as Nux XQuery based XML message queues, publish-subscribe systems for Blogs/newsfeeds, text chat, data acquisition and distribution systems, application level routers, firewalls, classifiers, etc. Rather than targeting fulltext search of infrequent queries over huge persistent data archives (historic search), this class targets fulltext search of huge numbers of queries over comparatively small transient realtime data (prospective search). For example as in float score = Search(string text, Query query) Each instance can hold at most one Lucene \"document\", with a document containing zero or more \"fields\", each field having a name and a fulltext value. The fulltext value is tokenized (split and transformed) into zero or more index terms (aka words) on AddField() , according to the policy implemented by an Analyzer. For example, Lucene analyzers can split on whitespace, normalize to lower case for case insensitivity, ignore common terms with little discriminatory value such as \"he\", \"in\", \"and\" (stop words), reduce the terms to their natural linguistic root form such as \"fishing\" being reduced to \"fish\" (stemming), resolve synonyms/inflexions/thesauri (upon indexing and/or querying), etc. For details, see Lucene Analyzer Intro . Arbitrary Lucene queries can be run against this class - see Lucene Query Syntax as well as Query Parser Rules . Note that a Lucene query selects on the field names and associated (indexed) tokenized terms, not on the original fulltext(s) - the latter are not stored but rather thrown away immediately after tokenization. For some interesting background information on search technology, see Bob Wyman's Prospective Search , Jim Gray's A Call to Arms - Custom subscriptions , and Tim Bray's On Search, the Series . Example Usage Analyzer analyzer = new SimpleAnalyzer(version); MemoryIndex index = new MemoryIndex(); index.AddField(\"content\", \"Readings about Salmons and other select Alaska fishing Manuals\", analyzer); index.AddField(\"author\", \"Tales of James\", analyzer); QueryParser parser = new QueryParser(version, \"content\", analyzer); float score = index.Search(parser.Parse(\"+author:james +salmon~ +fish* manual~\")); if (score > 0.0f) { Console.WriteLine(\"it's a match\"); } else { Console.WriteLine(\"no match found\"); } Console.WriteLine(\"indexData=\" + index.toString()); Example XQuery Usage (: An XQuery that finds all books authored by James that have something to do with \"salmon fishing manuals\", sorted by relevance :) declare namespace lucene = \"java:nux.xom.pool.FullTextUtil\"; declare variable $query := \"+salmon~ +fish* manual~\"; (: any arbitrary Lucene query can go here :) for $book in /books/book[author=\"James\" and lucene:match(abstract, $query) > 0.0] let $score := lucene:match($book/abstract, $query) order by $score descending return $book No thread safety guarantees An instance can be queried multiple times with the same or different queries, but an instance is not thread-safe. If desired use idioms such as: MemoryIndex index = ... lock (index) { // read and/or write index (i.e. add fields and/or query) } Performance Notes Internally there's a new data structure geared towards efficient indexing and searching, plus the necessary support code to seamlessly plug into the Lucene framework. This class performs very well for very small texts (e.g. 10 chars) as well as for large texts (e.g. 10 MB) and everything in between. Typically, it is about 10-100 times faster than RAMDirectory . Note that RAMDirectory has particularly large efficiency overheads for small to medium sized texts, both in time and space. Indexing a field with N tokens takes O(N) in the best case, and O(N logN) in the worst case. Memory consumption is probably larger than for RAMDirectory . Example throughput of many simple term queries over a single MemoryIndex: ~500000 queries/sec on a MacBook Pro, jdk 1.5.0_06, server VM. As always, your mileage may vary. If you're curious about the whereabouts of bottlenecks, run java 1.5 with the non-perturbing '-server -agentlib:hprof=cpu=samples,depth=10' flags, then study the trace log and correlate its hotspot trailer with its call stack headers (see hprof tracing ). Inheritance System.Object MemoryIndex 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) Namespace : Lucene.Net.Index.Memory Assembly : Lucene.Net.Memory.dll Syntax [Serializable] public class MemoryIndex Constructors | Improve this Doc View Source MemoryIndex() Constructs an empty instance. Declaration public MemoryIndex() | Improve this Doc View Source MemoryIndex(Boolean) Constructs an empty instance that can optionally store the start and end character offset of each token term in the text. This can be useful for highlighting of hit locations with the Lucene highlighter package. Protected until the highlighter package matures, so that this can actually be meaningfully integrated. Declaration public MemoryIndex(bool storeOffsets) Parameters Type Name Description System.Boolean storeOffsets whether or not to store the start and end character offset of each token term in the text Methods | Improve this Doc View Source AddField(String, TokenStream) Equivalent to AddField(fieldName, stream, 1.0f) . Declaration public virtual void AddField(string fieldName, TokenStream stream) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from | Improve this Doc View Source AddField(String, TokenStream, Single) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field See Also Boost | Improve this Doc View Source AddField(String, TokenStream, Single, Int32) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost, int positionIncrementGap) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field System.Int32 positionIncrementGap the position increment gap if fields with the same name are added more than once See Also Boost | Improve this Doc View Source AddField(String, TokenStream, Single, Int32, Int32) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost, int positionIncrementGap, int offsetGap) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field System.Int32 positionIncrementGap the position increment gap if fields with the same name are added more than once System.Int32 offsetGap the offset gap if fields with the same name are added more than once See Also Boost | Improve this Doc View Source AddField(String, String, Analyzer) Convenience method; Tokenizes the given field text and adds the resulting terms to the index; Equivalent to adding an indexed non-keyword Lucene Field that is tokenized, not stored, termVectorStored with positions (or termVectorStored with positions and offsets), Declaration public virtual void AddField(string fieldName, string text, Analyzer analyzer) Parameters Type Name Description System.String fieldName a name to be associated with the text System.String text the text to tokenize and index. Analyzer analyzer the analyzer to use for tokenization | Improve this Doc View Source CreateSearcher() Creates and returns a searcher that can be used to execute arbitrary Lucene queries and to collect the resulting query results as hits. Declaration public virtual IndexSearcher CreateSearcher() Returns Type Description IndexSearcher a searcher | Improve this Doc View Source GetMemorySize() Returns a reasonable approximation of the main memory [bytes] consumed by this instance. Useful for smart memory sensititive caches/pools. Declaration public virtual long GetMemorySize() Returns Type Description System.Int64 the main memory consumption | Improve this Doc View Source KeywordTokenStream<T>(ICollection<T>) Convenience method; Creates and returns a token stream that generates a token for each keyword in the given collection, \"as is\", without any transforming text analysis. The resulting token stream can be fed into AddField(String, TokenStream) , perhaps wrapped into another TokenFilter , as desired. Declaration public virtual TokenStream KeywordTokenStream<T>(ICollection<T> keywords) Parameters Type Name Description System.Collections.Generic.ICollection <T> keywords the keywords to generate tokens for Returns Type Description TokenStream the corresponding token stream Type Parameters Name Description T | Improve this Doc View Source Reset() Resets the MemoryIndex to its initial state and recycles all internal buffers. Declaration public virtual void Reset() | Improve this Doc View Source Search(Query) Convenience method that efficiently returns the relevance score by matching this index against the given Lucene query expression. Declaration public virtual float Search(Query query) Parameters Type Name Description Query query an arbitrary Lucene query to run against this index Returns Type Description System.Single the relevance score of the matchmaking; A number in the range [0.0 .. 1.0], with 0.0 indicating no match. The higher the number the better the match. | Improve this Doc View Source ToString() Returns a String representation of the index data for debugging purposes. Declaration public override string ToString() Returns Type Description System.String the string representation Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- 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. --> Misc extensions of the Document/Field API. Classes LazyDocument Defers actually loading a field's value until you ask for it. You must not use the returned Field instances after the provided reader has been closed. LazyDocument.LazyField This is a Lucene.NET INTERNAL API, use at your own risk"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.html",
    "title": "Class LazyDocument | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LazyDocument Defers actually loading a field's value until you ask for it. You must not use the returned Field instances after the provided reader has been closed. Inheritance System.Object LazyDocument 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.Misc.dll Syntax public class LazyDocument Constructors | Improve this Doc View Source LazyDocument(IndexReader, Int32) Declaration public LazyDocument(IndexReader reader, int docID) Parameters Type Name Description IndexReader reader System.Int32 docID Methods | Improve this Doc View Source GetField(FieldInfo) Creates an IndexableField whose value will be lazy loaded if and when it is used. NOTE: This method must be called once for each value of the field name specified in sequence that the values exist. This method may not be used to generate multiple, lazy, IndexableField instances refering to the same underlying IndexableField instance. The lazy loading of field values from all instances of IndexableField objects returned by this method are all backed by a single Document per LazyDocument instance. Declaration public virtual IIndexableField GetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description IIndexableField See Also GetField(FieldInfo)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.LazyField.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.LazyField.html",
    "title": "Class LazyDocument.LazyField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LazyDocument.LazyField This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object LazyDocument.LazyField Implements IIndexableField 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.Misc.dll Syntax public class LazyField : IIndexableField Properties | Improve this Doc View Source Boost Gets the boost factor on this field. Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source FieldType Returns the FieldType for this field as type FieldType . Declaration public virtual FieldType FieldType { get; } Property Value Type Description FieldType | Improve this Doc View Source HasBeenLoaded non-private for test only access This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual bool HasBeenLoaded { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexableFieldType Returns the FieldType for this field as type IIndexableFieldType . Declaration public virtual IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name The field's name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration public virtual NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration public virtual BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as System.Byte or null if the type is non-numeric. Declaration public virtual byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as System.Double or null if the type is non-numeric. Declaration public virtual double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as System.Int16 or null if the type is non-numeric. Declaration public virtual short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as System.Int32 or null if the type is non-numeric. Declaration public virtual int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as System.Int64 or null if the type is non-numeric. Declaration public virtual long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Declaration [Obsolete(\"In .NET, use of this method will cause boxing/unboxing. Instead, use the NumericType property to check the underlying type and call the appropriate GetXXXValue() method to retrieve the value.\")] public virtual object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() The value of the field as a System.IO.TextReader , or null . If null , the System.String value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual TextReader GetReaderValue() Returns Type Description System.IO.TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as System.Single or null if the type is non-numeric. Declaration public virtual float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Declaration public virtual TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description TokenStream Implements IIndexableField"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.CompoundFileExtractor.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.CompoundFileExtractor.html",
    "title": "Class CompoundFileExtractor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompoundFileExtractor Command-line tool for extracting sub-files out of a compound file. Inheritance System.Object CompoundFileExtractor 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.Index Assembly : Lucene.Net.Misc.dll Syntax public class CompoundFileExtractor Methods | Improve this Doc View Source Main(String[]) Prints the filename and size of each file within a given compound file. Add the -extract flag to extract files to the current working directory. In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.html",
    "title": "Namespace Lucene.Net.Index | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Index <!-- 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. --> Misc index tools and index support. Classes CompoundFileExtractor Command-line tool for extracting sub-files out of a compound file. IndexSplitter Command-line tool that enables listing segments in an index, copying specific segments to another index, and deleting segments from an index. This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple Stream) so it will not work with non FSDirectory Directory impls. This is a Lucene.NET EXPERIMENTAL API, use at your own risk You can easily accidentally remove segments from your index so be careful! MultiPassIndexSplitter This tool splits input index into multiple equal parts. The method employed here uses AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document id-s that fall outside the selected partition. Note 1: Deletes are only applied to a buffered list of deleted docs and don't affect the source index - this tool works also with read-only indexes. Note 2: the disadvantage of this tool is that source index needs to be read as many times as there are parts to be created, hence the name of this tool. NOTE : this tool is unaware of documents added atomically via AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) , which means it can easily break up such document groups. PKIndexSplitter Split an index based on a Filter ."
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.IndexSplitter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.IndexSplitter.html",
    "title": "Class IndexSplitter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexSplitter Command-line tool that enables listing segments in an index, copying specific segments to another index, and deleting segments from an index. This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple Stream) so it will not work with non FSDirectory Directory impls. This is a Lucene.NET EXPERIMENTAL API, use at your own risk You can easily accidentally remove segments from your index so be careful! Inheritance System.Object IndexSplitter 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.Index Assembly : Lucene.Net.Misc.dll Syntax public class IndexSplitter Constructors | Improve this Doc View Source IndexSplitter(DirectoryInfo) Declaration public IndexSplitter(DirectoryInfo dir) Parameters Type Name Description System.IO.DirectoryInfo dir Properties | Improve this Doc View Source Infos Declaration public SegmentInfos Infos { get; set; } Property Value Type Description SegmentInfos Methods | Improve this Doc View Source ListSegments() Declaration public virtual void ListSegments() | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Remove(String[]) Declaration public virtual void Remove(string[] segs) Parameters Type Name Description System.String [] segs | Improve this Doc View Source Split(DirectoryInfo, String[]) Declaration public virtual void Split(DirectoryInfo destDir, string[] segs) Parameters Type Name Description System.IO.DirectoryInfo destDir System.String [] segs"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.MultiPassIndexSplitter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.MultiPassIndexSplitter.html",
    "title": "Class MultiPassIndexSplitter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiPassIndexSplitter This tool splits input index into multiple equal parts. The method employed here uses AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document id-s that fall outside the selected partition. Note 1: Deletes are only applied to a buffered list of deleted docs and don't affect the source index - this tool works also with read-only indexes. Note 2: the disadvantage of this tool is that source index needs to be read as many times as there are parts to be created, hence the name of this tool. NOTE : this tool is unaware of documents added atomically via AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) , which means it can easily break up such document groups. Inheritance System.Object MultiPassIndexSplitter 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.Index Assembly : Lucene.Net.Misc.dll Syntax public class MultiPassIndexSplitter Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Split(LuceneVersion, IndexReader, Directory[], Boolean) Split source index into multiple parts. Declaration public virtual void Split(LuceneVersion version, IndexReader in, Directory[] outputs, bool seq) Parameters Type Name Description LuceneVersion version lucene compatibility version IndexReader in source index, can have deletions, can have multiple segments (or multiple readers). Directory [] outputs list of directories where the output parts will be stored. System.Boolean seq if true, then the source index will be split into equal increasing ranges of document id-s. If false, source document id-s will be assigned in a deterministic round-robin fashion to one of the output splits. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.PKIndexSplitter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.PKIndexSplitter.html",
    "title": "Class PKIndexSplitter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PKIndexSplitter Split an index based on a Filter . Inheritance System.Object PKIndexSplitter 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.Index Assembly : Lucene.Net.Misc.dll Syntax public class PKIndexSplitter Constructors | Improve this Doc View Source PKIndexSplitter(Directory, Directory, Directory, Term, IndexWriterConfig, IndexWriterConfig) Declaration public PKIndexSplitter(Directory input, Directory dir1, Directory dir2, Term midTerm, IndexWriterConfig config1, IndexWriterConfig config2) Parameters Type Name Description Directory input Directory dir1 Directory dir2 Term midTerm IndexWriterConfig config1 IndexWriterConfig config2 | Improve this Doc View Source PKIndexSplitter(Directory, Directory, Directory, Filter, IndexWriterConfig, IndexWriterConfig) Declaration public PKIndexSplitter(Directory input, Directory dir1, Directory dir2, Filter docsInFirstIndex, IndexWriterConfig config1, IndexWriterConfig config2) Parameters Type Name Description Directory input Directory dir1 Directory dir2 Filter docsInFirstIndex IndexWriterConfig config1 IndexWriterConfig config2 | Improve this Doc View Source PKIndexSplitter(LuceneVersion, Directory, Directory, Directory, Term) Split an index based on a given primary key term and a 'middle' term. If the middle term is present, it's sent to dir2. Declaration public PKIndexSplitter(LuceneVersion version, Directory input, Directory dir1, Directory dir2, Term midTerm) Parameters Type Name Description LuceneVersion version Directory input Directory dir1 Directory dir2 Term midTerm | Improve this Doc View Source PKIndexSplitter(LuceneVersion, Directory, Directory, Directory, Filter) Split an index based on a Filter . All documents that match the filter are sent to dir1, remaining ones to dir2. Declaration public PKIndexSplitter(LuceneVersion version, Directory input, Directory dir1, Directory dir2, Filter docsInFirstIndex) Parameters Type Name Description LuceneVersion version Directory input Directory dir1 Directory dir2 Filter docsInFirstIndex Methods | Improve this Doc View Source Split() Declaration public virtual void Split()"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.BlockJoinComparerSource.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.BlockJoinComparerSource.html",
    "title": "Class BlockJoinComparerSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockJoinComparerSource Helper class to sort readers that contain blocks of documents. Note that this class is intended to used with SortingMergePolicy , and for other purposes has some limitations: Cannot yet be used with SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) Filling sort field values is not yet supported. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparerSource BlockJoinComparerSource 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) Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class BlockJoinComparerSource : FieldComparerSource Constructors | Improve this Doc View Source BlockJoinComparerSource(Filter, Sort) Create a new BlockJoinComparerSource, sorting only blocks of documents with parentSort and not reordering children with a block. Declaration public BlockJoinComparerSource(Filter parentsFilter, Sort parentSort) Parameters Type Name Description Filter parentsFilter Filter identifying parent documents Sort parentSort Sort for parent documents | Improve this Doc View Source BlockJoinComparerSource(Filter, Sort, Sort) Create a new BlockJoinComparerSource, specifying the sort order for both blocks of documents and children within a block. Declaration public BlockJoinComparerSource(Filter parentsFilter, Sort parentSort, Sort childSort) Parameters Type Name Description Filter parentsFilter Filter identifying parent documents Sort parentSort Sort for parent documents Sort childSort Sort for child documents in the same block Methods | Improve this Doc View Source NewComparer(String, Int32, Int32, Boolean) Declaration public override FieldComparer NewComparer(string fieldname, int numHits, int sortPos, bool reversed) Parameters Type Name Description System.String fieldname System.Int32 numHits System.Int32 sortPos System.Boolean reversed Returns Type Description FieldComparer Overrides FieldComparerSource.NewComparer(String, Int32, Int32, Boolean) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.EarlyTerminatingSortingCollector.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.EarlyTerminatingSortingCollector.html",
    "title": "Class EarlyTerminatingSortingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EarlyTerminatingSortingCollector A ICollector that early terminates collection of documents on a per-segment basis, if the segment was sorted according to the given Sort . NOTE: the ICollector detects sorted segments according to SortingMergePolicy , so it's best used in conjunction with it. Also, it collects up to a specified m_numDocsToCollect from each segment, and therefore is mostly suitable for use in conjunction with collectors such as TopDocsCollector<T> , and not e.g. TotalHitCountCollector . NOTE : If you wrap a TopDocsCollector<T> that sorts in the same order as the index order, the returned GetTopDocs() will be correct. However the total of TotalHits hit count will be underestimated since not all matching documents will have been collected. NOTE : This ICollector uses ToString() to detect whether a segment was sorted with the same Sort . This has two implications: if a custom comparer is not implemented correctly and returns different identifiers for equivalent instances, this collector will not detect sorted segments, if you suddenly change the IndexWriter 's SortingMergePolicy to sort according to another criterion and if both the old and the new Sort s have the same identifier, this ICollector will incorrectly detect sorted segments. @lucene.experimental Inheritance System.Object EarlyTerminatingSortingCollector Implements 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.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class EarlyTerminatingSortingCollector : ICollector Constructors | Improve this Doc View Source EarlyTerminatingSortingCollector(ICollector, Sort, Int32) Create a new EarlyTerminatingSortingCollector instance. Declaration public EarlyTerminatingSortingCollector(ICollector in, Sort sort, int numDocsToCollect) Parameters Type Name Description ICollector in the collector to wrap Sort sort the sort you are sorting the search results on System.Int32 numDocsToCollect the number of documents to collect on each segment. When wrapping a TopDocsCollector<T> , this number should be the number of hits. Fields | Improve this Doc View Source m_in The wrapped Collector Declaration protected readonly ICollector m_in Field Value Type Description ICollector | Improve this Doc View Source m_numDocsToCollect Number of documents to collect in each segment Declaration protected readonly int m_numDocsToCollect Field Value Type Description System.Int32 | Improve this Doc View Source m_segmentSorted True if the current segment being processed is sorted by Sort() Declaration protected bool m_segmentSorted Field Value Type Description System.Boolean | Improve this Doc View Source m_segmentTotalCollect Number of documents to collect in the current segment being processed Declaration protected int m_segmentTotalCollect Field Value Type Description System.Int32 | Improve this Doc View Source m_sort Sort used to sort the search results Declaration protected readonly Sort m_sort Field Value Type Description Sort Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.html",
    "title": "Namespace Lucene.Net.Index.Sorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Sorter <!-- 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 index sorting capablities. The application can use any Sort specification, e.g. to sort by fields using DocValues or FieldCache, or to reverse the order of the documents (by using SortField.Type.DOC in reverse). Multi-level sorts can be specified the same way you would when searching, by building Sort from multiple SortFields. SortingMergePolicy can be used to make Lucene sort segments before merging them. This will ensure that every segment resulting from a merge will be sorted according to the provided Sort . This however makes merging and thus indexing slower. Sorted segments allow for early query termination when the sort order matches index order. This makes query execution faster since not all documents need to be visited. Please note that this is an expert feature and should not be used without a deep understanding of Lucene merging and document collection. Classes BlockJoinComparerSource Helper class to sort readers that contain blocks of documents. Note that this class is intended to used with SortingMergePolicy , and for other purposes has some limitations: Cannot yet be used with SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) Filling sort field values is not yet supported. This is a Lucene.NET EXPERIMENTAL API, use at your own risk EarlyTerminatingSortingCollector A ICollector that early terminates collection of documents on a per-segment basis, if the segment was sorted according to the given Sort . NOTE: the ICollector detects sorted segments according to SortingMergePolicy , so it's best used in conjunction with it. Also, it collects up to a specified m_numDocsToCollect from each segment, and therefore is mostly suitable for use in conjunction with collectors such as TopDocsCollector<T> , and not e.g. TotalHitCountCollector . NOTE : If you wrap a TopDocsCollector<T> that sorts in the same order as the index order, the returned GetTopDocs() will be correct. However the total of TotalHits hit count will be underestimated since not all matching documents will have been collected. NOTE : This ICollector uses ToString() to detect whether a segment was sorted with the same Sort . This has two implications: if a custom comparer is not implemented correctly and returns different identifiers for equivalent instances, this collector will not detect sorted segments, if you suddenly change the IndexWriter 's SortingMergePolicy to sort according to another criterion and if both the old and the new Sort s have the same identifier, this ICollector will incorrectly detect sorted segments. @lucene.experimental SortingAtomicReader An AtomicReader which supports sorting documents by a given Sort . You can use this class to sort an index as follows: IndexWriter writer; // writer to which the sorted index will be added DirectoryReader reader; // reader on the input index Sort sort; // determines how the documents are sorted AtomicReader sortingReader = SortingAtomicReader.Wrap(SlowCompositeReaderWrapper.Wrap(reader), sort); writer.AddIndexes(reader); reader.Dispose(); // alternatively, you can use a using block writer.Dispose(); // alternatively, you can use a using block This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortingMergePolicy A MergePolicy that reorders documents according to a Sort before merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added. NOTE : Never use this policy if you rely on AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) to have sequentially-assigned doc IDs, this policy will scatter doc IDs. NOTE : This policy should only be used with idempotent Sort s so that the order of segments is predictable. For example, using INDEXORDER in reverse (which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingAtomicReader.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingAtomicReader.html",
    "title": "Class SortingAtomicReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortingAtomicReader An AtomicReader which supports sorting documents by a given Sort . You can use this class to sort an index as follows: IndexWriter writer; // writer to which the sorted index will be added DirectoryReader reader; // reader on the input index Sort sort; // determines how the documents are sorted AtomicReader sortingReader = SortingAtomicReader.Wrap(SlowCompositeReaderWrapper.Wrap(reader), sort); writer.AddIndexes(reader); reader.Dispose(); // alternatively, you can use a using block writer.Dispose(); // alternatively, you can use a using block This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexReader AtomicReader FilterAtomicReader SortingAtomicReader Implements System.IDisposable Inherited Members FilterAtomicReader.Unwrap(AtomicReader) FilterAtomicReader.m_input FilterAtomicReader.FieldInfos FilterAtomicReader.NumDocs FilterAtomicReader.MaxDoc FilterAtomicReader.DoClose() FilterAtomicReader.ToString() FilterAtomicReader.CheckIntegrity() AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class SortingAtomicReader : FilterAtomicReader, IDisposable Properties | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides FilterAtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides FilterAtomicReader.LiveDocs Methods | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides FilterAtomicReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides FilterAtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides FilterAtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides FilterAtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides FilterAtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides FilterAtomicReader.GetTermVectors(Int32) | Improve this Doc View Source Wrap(AtomicReader, Sort) Return a sorted view of reader according to the order defined by sort . If the reader is already sorted, this method might return the reader as-is. Declaration public static AtomicReader Wrap(AtomicReader reader, Sort sort) Parameters Type Name Description AtomicReader reader Sort sort Returns Type Description AtomicReader Implements System.IDisposable"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingMergePolicy.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingMergePolicy.html",
    "title": "Class SortingMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortingMergePolicy A MergePolicy that reorders documents according to a Sort before merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added. NOTE : Never use this policy if you rely on AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) to have sequentially-assigned doc IDs, this policy will scatter doc IDs. NOTE : This policy should only be used with idempotent Sort s so that the order of segments is predictable. For example, using INDEXORDER in reverse (which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy SortingMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Dispose() MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public sealed class SortingMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source SortingMergePolicy(MergePolicy, Sort) Create a new MergePolicy that sorts documents with the given sort . Declaration public SortingMergePolicy(MergePolicy in, Sort sort) Parameters Type Name Description MergePolicy in Sort sort Fields | Improve this Doc View Source SORTER_ID_PROP Put in the Diagnostics to denote that this segment is sorted. Declaration public static readonly string SORTER_ID_PROP Field Value Type Description System.String Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergePolicy.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source IsSorted(AtomicReader, Sort) Returns true if the given reader is sorted by the specified sort . Declaration public static bool IsSorted(AtomicReader reader, Sort sort) Parameters Type Name Description AtomicReader reader Sort sort Returns Type Description System.Boolean | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) Implements System.IDisposable"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.GetTermInfo.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.GetTermInfo.html",
    "title": "Class GetTermInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GetTermInfo Utility to get document frequency and total number of occurrences (sum of the tf for each doc) of a term. Inheritance System.Object GetTermInfo 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.Misc Assembly : Lucene.Net.Misc.dll Syntax public class GetTermInfo Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source TermInfo(Directory, Term) Declaration public static void TermInfo(Directory dir, Term term) Parameters Type Name Description Directory dir Term term"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.DocFreqComparer.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.DocFreqComparer.html",
    "title": "Class HighFreqTerms.DocFreqComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HighFreqTerms.DocFreqComparer Compares terms by DocFreq Inheritance System.Object HighFreqTerms.DocFreqComparer Implements System.Collections.Generic.IComparer < TermStats > 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.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class DocFreqComparer : IComparer<TermStats> Methods | Improve this Doc View Source Compare(TermStats, TermStats) Declaration public int Compare(TermStats a, TermStats b) Parameters Type Name Description TermStats a TermStats b Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.html",
    "title": "Class HighFreqTerms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HighFreqTerms HighFreqTerms class extracts the top n most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. If the -t flag is given, both document frequency and total tf (total number of occurrences) are reported, ordered by descending total tf. Inheritance System.Object HighFreqTerms 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.Misc Assembly : Lucene.Net.Misc.dll Syntax public class HighFreqTerms Fields | Improve this Doc View Source DEFAULT_NUMTERMS Declaration public const int DEFAULT_NUMTERMS = 100 Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetHighFreqTerms(IndexReader, Int32, String, IComparer<TermStats>) Returns TermStats[] ordered by the specified comparer Declaration public static TermStats[] GetHighFreqTerms(IndexReader reader, int numTerms, string field, IComparer<TermStats> comparer) Parameters Type Name Description IndexReader reader System.Int32 numTerms System.String field System.Collections.Generic.IComparer < TermStats > comparer Returns Type Description TermStats [] | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.TotalTermFreqComparer.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.TotalTermFreqComparer.html",
    "title": "Class HighFreqTerms.TotalTermFreqComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HighFreqTerms.TotalTermFreqComparer Compares terms by TotalTermFreq Inheritance System.Object HighFreqTerms.TotalTermFreqComparer Implements System.Collections.Generic.IComparer < TermStats > 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.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class TotalTermFreqComparer : IComparer<TermStats> Methods | Improve this Doc View Source Compare(TermStats, TermStats) Declaration public int Compare(TermStats a, TermStats b) Parameters Type Name Description TermStats a TermStats b Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.html",
    "title": "Namespace Lucene.Net.Misc | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Misc <!-- 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. --> Miscellaneous index tools. Classes GetTermInfo Utility to get document frequency and total number of occurrences (sum of the tf for each doc) of a term. HighFreqTerms HighFreqTerms class extracts the top n most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. If the -t flag is given, both document frequency and total tf (total number of occurrences) are reported, ordered by descending total tf. HighFreqTerms.DocFreqComparer Compares terms by DocFreq HighFreqTerms.TotalTermFreqComparer Compares terms by TotalTermFreq IndexMergeTool Merges indices specified on the command line into the index specified as the first command line argument. SweetSpotSimilarity A similarity with a lengthNorm that provides for a \"plateau\" of equally good lengths, and tf helper functions. For lengthNorm, A min/max can be specified to define the plateau of lengths that should all have a norm of 1.0. Below the min, and above the max the lengthNorm drops off in a sqrt function. For tf, baselineTf and hyperbolicTf functions are provided, which subclasses can choose between. TermStats Holder for a term along with its statistics ( DocFreq and TotalTermFreq )."
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.IndexMergeTool.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.IndexMergeTool.html",
    "title": "Class IndexMergeTool | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexMergeTool Merges indices specified on the command line into the index specified as the first command line argument. Inheritance System.Object IndexMergeTool 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.Misc Assembly : Lucene.Net.Misc.dll Syntax public class IndexMergeTool Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.SweetSpotSimilarity.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.SweetSpotSimilarity.html",
    "title": "Class SweetSpotSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SweetSpotSimilarity A similarity with a lengthNorm that provides for a \"plateau\" of equally good lengths, and tf helper functions. For lengthNorm, A min/max can be specified to define the plateau of lengths that should all have a norm of 1.0. Below the min, and above the max the lengthNorm drops off in a sqrt function. For tf, baselineTf and hyperbolicTf functions are provided, which subclasses can choose between. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity SweetSpotSimilarity Inherited Members DefaultSimilarity.Coord(Int32, Int32) DefaultSimilarity.QueryNorm(Single) DefaultSimilarity.EncodeNormValue(Single) DefaultSimilarity.DecodeNormValue(Int64) DefaultSimilarity.SloppyFreq(Int32) DefaultSimilarity.ScorePayload(Int32, Int32, Int32, BytesRef) DefaultSimilarity.Idf(Int64, Int64) DefaultSimilarity.m_discountOverlaps DefaultSimilarity.DiscountOverlaps DefaultSimilarity.ToString() TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics) TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics[]) TFIDFSimilarity.ComputeNorm(FieldInvertState) TFIDFSimilarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) TFIDFSimilarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class SweetSpotSimilarity : DefaultSimilarity Constructors | Improve this Doc View Source SweetSpotSimilarity() Declaration public SweetSpotSimilarity() Methods | Improve this Doc View Source BaselineTf(Single) Implemented as: (x <= min) ? base : Math.Sqrt(x+(base**2)-min) ...but with a special case check for 0. This degrates to Math.Sqrt(x) when min and base are both 0 Declaration public virtual float BaselineTf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single See Also SetBaselineTfFactors(Single, Single) | Improve this Doc View Source ComputeLengthNorm(Int32) Implemented as: 1/sqrt( steepness * (Math.Abs(x-min) + Math.Abs(x-max) - (max-min)) + 1 ) . This degrades to 1/Math.Sqrt(x) when min and max are both 1 and steepness is 0.5 :TODO: potential optimization is to just flat out return 1.0f if numTerms is between min and max. Declaration public virtual float ComputeLengthNorm(int numTerms) Parameters Type Name Description System.Int32 numTerms Returns Type Description System.Single See Also SetLengthNormFactors(Int32, Int32, Single, Boolean) | Improve this Doc View Source HyperbolicTf(Single) Uses a hyperbolic tangent function that allows for a hard max... tf(x)=min+(max-min)/2*(((base**(x-xoffset)-base**-(x-xoffset))/(base**(x-xoffset)+base**-(x-xoffset)))+1) This code is provided as a convenience for subclasses that want to use a hyperbolic tf function. Declaration public virtual float HyperbolicTf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single See Also SetHyperbolicTfFactors(Single, Single, Double, Single) | Improve this Doc View Source LengthNorm(FieldInvertState) Implemented as state.Boost * ComputeLengthNorm(numTokens) where numTokens does not count overlap tokens if discountOverlaps is true by default or true for this specific field. Declaration public override float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Single Overrides DefaultSimilarity.LengthNorm(FieldInvertState) | Improve this Doc View Source SetBaselineTfFactors(Single, Single) Sets the baseline and minimum function variables for baselineTf Declaration public virtual void SetBaselineTfFactors(float base, float min) Parameters Type Name Description System.Single base System.Single min See Also BaselineTf(Single) | Improve this Doc View Source SetHyperbolicTfFactors(Single, Single, Double, Single) Sets the function variables for the hyperbolicTf functions Declaration public virtual void SetHyperbolicTfFactors(float min, float max, double base, float xoffset) Parameters Type Name Description System.Single min the minimum tf value to ever be returned (default: 0.0) System.Single max the maximum tf value to ever be returned (default: 2.0) System.Double base the base value to be used in the exponential for the hyperbolic function (default: 1.3) System.Single xoffset the midpoint of the hyperbolic function (default: 10.0) See Also HyperbolicTf(Single) | Improve this Doc View Source SetLengthNormFactors(Int32, Int32, Single, Boolean) Sets the default function variables used by lengthNorm when no field specific variables have been set. Declaration public virtual void SetLengthNormFactors(int min, int max, float steepness, bool discountOverlaps) Parameters Type Name Description System.Int32 min System.Int32 max System.Single steepness System.Boolean discountOverlaps See Also ComputeLengthNorm(Int32) | Improve this Doc View Source Tf(Single) Delegates to baselineTf Declaration public override float Tf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single Overrides DefaultSimilarity.Tf(Single) See Also BaselineTf(Single)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.TermStats.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.TermStats.html",
    "title": "Class TermStats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermStats Holder for a term along with its statistics ( DocFreq and TotalTermFreq ). Inheritance System.Object TermStats 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) Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class TermStats Properties | Improve this Doc View Source DocFreq Declaration public int DocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Declaration public string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source TotalTermFreq Declaration public long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.html",
    "title": "Namespace Lucene.Net.Util.Fst | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Fst <!-- 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. --> Misc FST classes. Classes ListOfOutputs<T> Wraps another Outputs implementation and encodes one or more of its output values. You can use this when a single input may need to map to more than one output, maintaining order: pass the same input with a different output by calling Add(Int32sRef, T) multiple times. The builder will then combine the outputs using the Merge(T, T) method. The resulting FST may not be minimal when an input has more than one output, as this requires pushing all multi-output values to a final state. NOTE: the only way to create multiple outputs is to add the same input to the FST multiple times in a row. This is how the FST maps a single input to multiple outputs (e.g. you cannot pass a List<Object> to Add(Int32sRef, T) ). If your outputs are longs, and you need at most 2, then use UpToTwoPositiveInt64Outputs instead since it stores the outputs more compactly (by stealing a bit from each long value). NOTE: this cannot wrap itself (ie you cannot make an FST with List<List<Object>> outputs using this). @lucene.experimental UpToTwoPositiveInt64Outputs An FST Outputs<T> implementation where each output is one or two non-negative long values. If it's a System.Single output, System.Nullable<T> is returned; else, TwoLongs. Order is preserved in the TwoLongs case, ie .first is the first input/output added to Builder<T> , and .second is the second. You cannot store 0 output with this (that's reserved to mean \"no output\")! NOTE: the only way to create a TwoLongs output is to add the same input to the FST twice in a row. This is how the FST maps a single input to two outputs (e.g. you cannot pass a UpToTwoPositiveInt64Outputs.TwoInt64s to Add(Int32sRef, T) . If you need more than two then use ListOfOutputs<T> , but if you only have at most 2 then this implementation will require fewer bytes as it steals one bit from each long value. NOTE: the resulting FST is not guaranteed to be minimal! See Builder<T> . NOTE: This was UpToTwoPositiveIntOutputs in Lucene - the data type (int) was wrong there - it should have been long This is a Lucene.NET EXPERIMENTAL API, use at your own risk UpToTwoPositiveInt64Outputs.TwoInt64s Holds two long outputs. NOTE: This was TwoLongs in Lucene"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.ListOfOutputs-1.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.ListOfOutputs-1.html",
    "title": "Class ListOfOutputs<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ListOfOutputs<T> Wraps another Outputs implementation and encodes one or more of its output values. You can use this when a single input may need to map to more than one output, maintaining order: pass the same input with a different output by calling Add(Int32sRef, T) multiple times. The builder will then combine the outputs using the Merge(T, T) method. The resulting FST may not be minimal when an input has more than one output, as this requires pushing all multi-output values to a final state. NOTE: the only way to create multiple outputs is to add the same input to the FST multiple times in a row. This is how the FST maps a single input to multiple outputs (e.g. you cannot pass a List<Object> to Add(Int32sRef, T) ). If your outputs are longs, and you need at most 2, then use UpToTwoPositiveInt64Outputs instead since it stores the outputs more compactly (by stealing a bit from each long value). NOTE: this cannot wrap itself (ie you cannot make an FST with List<List<Object>> outputs using this). @lucene.experimental Inheritance System.Object Outputs < System.Object > ListOfOutputs<T> 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) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class ListOfOutputs<T> : Outputs<object> Type Parameters Name Description T Constructors | Improve this Doc View Source ListOfOutputs(Outputs<T>) Declaration public ListOfOutputs(Outputs<T> outputs) Parameters Type Name Description Outputs <T> outputs Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source AsList(Object) Declaration public IList<T> AsList(object output) Parameters Type Name Description System.Object output Returns Type Description System.Collections.Generic.IList <T> | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source ReadFinalOutput(DataInput) Declaration public override object ReadFinalOutput(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.ReadFinalOutput(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object object, object inc) Parameters Type Name Description System.Object object System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput) | Improve this Doc View Source WriteFinalOutput(Object, DataOutput) Declaration public override void WriteFinalOutput(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.WriteFinalOutput(System.Object, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.html",
    "title": "Class UpToTwoPositiveInt64Outputs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UpToTwoPositiveInt64Outputs An FST Outputs<T> implementation where each output is one or two non-negative long values. If it's a System.Single output, System.Nullable<T> is returned; else, TwoLongs. Order is preserved in the TwoLongs case, ie .first is the first input/output added to Builder<T> , and .second is the second. You cannot store 0 output with this (that's reserved to mean \"no output\")! NOTE: the only way to create a TwoLongs output is to add the same input to the FST twice in a row. This is how the FST maps a single input to two outputs (e.g. you cannot pass a UpToTwoPositiveInt64Outputs.TwoInt64s to Add(Int32sRef, T) . If you need more than two then use ListOfOutputs<T> , but if you only have at most 2 then this implementation will require fewer bytes as it steals one bit from each long value. NOTE: the resulting FST is not guaranteed to be minimal! See Builder<T> . NOTE: This was UpToTwoPositiveIntOutputs in Lucene - the data type (int) was wrong there - it should have been long This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Object > UpToTwoPositiveInt64Outputs Inherited Members Outputs<Object>.WriteFinalOutput(Object, DataOutput) Outputs<Object>.ReadFinalOutput(DataInput) 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.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class UpToTwoPositiveInt64Outputs : Outputs<object> Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Get(Int64) Declaration public long? Get(long v) Parameters Type Name Description System.Int64 v Returns Type Description System.Nullable < System.Int64 > | Improve this Doc View Source Get(Int64, Int64) Declaration public UpToTwoPositiveInt64Outputs.TwoInt64s Get(long first, long second) Parameters Type Name Description System.Int64 first System.Int64 second Returns Type Description UpToTwoPositiveInt64Outputs.TwoInt64s | Improve this Doc View Source GetSingleton(Boolean) Declaration public static UpToTwoPositiveInt64Outputs GetSingleton(bool doShare) Parameters Type Name Description System.Boolean doShare Returns Type Description UpToTwoPositiveInt64Outputs | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object output, object inc) Parameters Type Name Description System.Object output System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.TwoInt64s.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.TwoInt64s.html",
    "title": "Class UpToTwoPositiveInt64Outputs.TwoInt64s | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UpToTwoPositiveInt64Outputs.TwoInt64s Holds two long outputs. NOTE: This was TwoLongs in Lucene Inheritance System.Object UpToTwoPositiveInt64Outputs.TwoInt64s 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.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class TwoInt64s Constructors | Improve this Doc View Source TwoInt64s(Int64, Int64) Declaration public TwoInt64s(long first, long second) Parameters Type Name Description System.Int64 first System.Int64 second Properties | Improve this Doc View Source First Declaration public long First { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Second Declaration public long Second { get; } Property Value Type Description System.Int64 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()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.BooleanFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.BooleanFilter.html",
    "title": "Class BooleanFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanFilter A container Filter that allows Boolean composition of Filter s. Filter s are allocated into one of three logical constructs; SHOULD, MUST NOT, MUST The results Filter BitSet is constructed as follows: SHOULD Filters are OR'd together The resulting Filter is NOT'd with the NOT Filter s The resulting Filter is AND'd with the MUST Filter s Inheritance System.Object Filter BooleanFilter Implements System.Collections.Generic.IEnumerable < FilterClause > System.Collections.IEnumerable Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class BooleanFilter : Filter, IEnumerable<FilterClause>, IEnumerable Properties | Improve this Doc View Source Clauses Gets the list of clauses Declaration public virtual IList<FilterClause> Clauses { get; } Property Value Type Description System.Collections.Generic.IList < FilterClause > Methods | Improve this Doc View Source Add(FilterClause) Adds a new FilterClause to the Boolean Filter container Declaration public virtual void Add(FilterClause filterClause) Parameters Type Name Description FilterClause filterClause A FilterClause object containing a Filter and an Occur parameter | Improve this Doc View Source Add(Filter, Occur) Declaration public void Add(Filter filter, Occur occur) Parameters Type Name Description Filter filter Occur occur | 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 GetDocIdSet(AtomicReaderContext, IBits) Returns the a DocIdSetIterator representing the Boolean composition of the filters that have been added. Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetEnumerator() Returns an iterator on the clauses in this query. It implements the System.Collections.Generic.IEnumerable<T> interface to make it possible to do: for (FilterClause clause : booleanFilter) {} Declaration public IEnumerator<FilterClause> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < FilterClause > | 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() Prints a user-readable version of this Filter . Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.BoostingQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.BoostingQuery.html",
    "title": "Class BoostingQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostingQuery The BoostingQuery class can be used to effectively demote results that match a given query. Unlike the \"NOT\" clause, this still selects documents that contain undesirable terms, but reduces their overall score: Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f); In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to select all matching documents, and the negativeQuery contains the undesirable elements which are simply used to lessen the scores. Documents that match the negativeQuery have their score multiplied by the supplied \"boost\" parameter, so this should be less than 1 to achieve a demoting effect This code was originally made available here: [WWW] http://marc.theaimsgroup.com/?l=lucene-user&m=108058407130459&w=2 and is documented here: http://wiki.apache.org/lucene-java/CommunityContributions Inheritance System.Object Query BoostingQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class BoostingQuery : Query Constructors | Improve this Doc View Source BoostingQuery(Query, Query, Single) Declaration public BoostingQuery(Query match, Query context, float boost) Parameters Type Name Description Query match Query context System.Single boost Methods | 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 Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.ChainedFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.ChainedFilter.html",
    "title": "Class ChainedFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ChainedFilter Allows multiple Filter s to be chained. Logical operations such as NOT and XOR are applied between filters. One operation can be used for all filters, or a specific operation can be declared for each filter. Order in which filters are called depends on the position of the filter in the chain. It's probably more efficient to place the most restrictive filters/least computationally-intensive filters first. Inheritance System.Object Filter ChainedFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Queries Assembly : Lucene.Net.Queries.dll Syntax public class ChainedFilter : Filter Constructors | Improve this Doc View Source ChainedFilter(Filter[]) Ctor. Declaration public ChainedFilter(Filter[] chain) Parameters Type Name Description Filter [] chain The chain of filters | Improve this Doc View Source ChainedFilter(Filter[], Int32) Ctor. Declaration public ChainedFilter(Filter[] chain, int logic) Parameters Type Name Description Filter [] chain The chain of filters System.Int32 logic Logical operation to apply to ALL filters | Improve this Doc View Source ChainedFilter(Filter[], Int32[]) Ctor. Declaration public ChainedFilter(Filter[] chain, int[] logicArray) Parameters Type Name Description Filter [] chain The chain of filters System.Int32 [] logicArray Logical operations to apply between filters Fields | Improve this Doc View Source AND Declaration public const int AND = 1 Field Value Type Description System.Int32 | Improve this Doc View Source ANDNOT Declaration public const int ANDNOT = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Logical operation when none is declared. Defaults to OR. Declaration public const int DEFAULT = 0 Field Value Type Description System.Int32 | Improve this Doc View Source OR Declaration public const int OR = 0 Field Value Type Description System.Int32 | Improve this Doc View Source XOR Declaration public const int XOR = 3 Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) GetDocIdSet(AtomicReaderContext, IBits) . Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CommonTermsQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CommonTermsQuery.html",
    "title": "Class CommonTermsQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommonTermsQuery A query that executes high-frequency terms in a optional sub-query to prevent slow queries due to \"common\" terms like stopwords. This query builds 2 queries off the Add(Term) added terms: low-frequency terms are added to a required boolean clause and high-frequency terms are added to an optional boolean clause. The optional clause is only executed if the required \"low-frequency\" clause matches. Scores produced by this query will be slightly different than plain BooleanQuery scorer mainly due to differences in the Coord(Int32, Int32) number of leaf queries in the required boolean clause. In most cases, high-frequency terms are unlikely to significantly contribute to the document score unless at least one of the low-frequency terms are matched. This query can improve query execution times significantly if applicable. CommonTermsQuery has several advantages over stopword filtering at index or query time since a term can be \"classified\" based on the actual document frequency in the index and can prevent slow queries even across domains without specialized stopword files. Note: if the query only contains high-frequency terms the query is rewritten into a plain conjunction query ie. all high-frequency terms need to match in order to match a document. Collection initializer note: To create and populate a CommonTermsQuery in a single statement, you can use the following example as a guide: var query = new CommonTermsQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Inheritance System.Object Query CommonTermsQuery Implements System.Collections.Generic.IEnumerable < Term > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CommonTermsQuery : Query, IEnumerable<Term>, IEnumerable Constructors | Improve this Doc View Source CommonTermsQuery(Occur, Occur, Single) Creates a new CommonTermsQuery Declaration public CommonTermsQuery(Occur highFreqOccur, Occur lowFreqOccur, float maxTermFrequency) Parameters Type Name Description Occur highFreqOccur Occur used for high frequency terms Occur lowFreqOccur Occur used for low frequency terms System.Single maxTermFrequency a value in [0..1) (or absolute number >=1) representing the maximum threshold of a terms document frequency to be considered a low frequency term. Exceptions Type Condition System.ArgumentException if MUST_NOT is pass as lowFreqOccur or highFreqOccur | Improve this Doc View Source CommonTermsQuery(Occur, Occur, Single, Boolean) Creates a new CommonTermsQuery Declaration public CommonTermsQuery(Occur highFreqOccur, Occur lowFreqOccur, float maxTermFrequency, bool disableCoord) Parameters Type Name Description Occur highFreqOccur Occur used for high frequency terms Occur lowFreqOccur Occur used for low frequency terms System.Single maxTermFrequency a value in [0..1) (or absolute number >=1) representing the maximum threshold of a terms document frequency to be considered a low frequency term. System.Boolean disableCoord disables Coord(Int32, Int32) in scoring for the low / high frequency sub-queries Exceptions Type Condition System.ArgumentException if MUST_NOT is pass as lowFreqOccur or highFreqOccur Fields | Improve this Doc View Source m_disableCoord Declaration protected readonly bool m_disableCoord Field Value Type Description System.Boolean | Improve this Doc View Source m_highFreqBoost Declaration protected float m_highFreqBoost Field Value Type Description System.Single | Improve this Doc View Source m_highFreqMinNrShouldMatch Declaration protected float m_highFreqMinNrShouldMatch Field Value Type Description System.Single | Improve this Doc View Source m_highFreqOccur Declaration protected readonly Occur m_highFreqOccur Field Value Type Description Occur | Improve this Doc View Source m_lowFreqBoost Declaration protected float m_lowFreqBoost Field Value Type Description System.Single | Improve this Doc View Source m_lowFreqMinNrShouldMatch Declaration protected float m_lowFreqMinNrShouldMatch Field Value Type Description System.Single | Improve this Doc View Source m_lowFreqOccur Declaration protected readonly Occur m_lowFreqOccur Field Value Type Description Occur | Improve this Doc View Source m_maxTermFrequency Declaration protected readonly float m_maxTermFrequency Field Value Type Description System.Single | Improve this Doc View Source m_terms Declaration protected readonly IList<Term> m_terms Field Value Type Description System.Collections.Generic.IList < Term > Properties | Improve this Doc View Source HighFreqMinimumNumberShouldMatch Gets or Sets a minimum number of the high frequent optional BooleanClauses which must be satisfied in order to produce a match on the low frequency terms query part. This method accepts a float value in the range [0..1) as a fraction of the actual query terms in the low frequent clause or a number >=1 as an absolut number of clauses that need to match. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Declaration public virtual float HighFreqMinimumNumberShouldMatch { get; set; } Property Value Type Description System.Single | Improve this Doc View Source IsCoordDisabled Returns true iff Coord(Int32, Int32) is disabled in scoring for the high and low frequency query instance. The top level query will always disable coords. Declaration public virtual bool IsCoordDisabled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowFreqMinimumNumberShouldMatch Gets or Sets a minimum number of the low frequent optional BooleanClauses which must be satisfied in order to produce a match on the low frequency terms query part. This method accepts a float value in the range [0..1) as a fraction of the actual query terms in the low frequent clause or a number >=1 as an absolut number of clauses that need to match. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Declaration public virtual float LowFreqMinimumNumberShouldMatch { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Add(Term) Adds a term to the CommonTermsQuery Declaration public virtual void Add(Term term) Parameters Type Name Description Term term the term to add | Improve this Doc View Source BuildQuery(Int32, TermContext[], Term[]) Declaration protected virtual Query BuildQuery(int maxDoc, TermContext[] contextArray, Term[] queryTerms) Parameters Type Name Description System.Int32 maxDoc TermContext [] contextArray Term [] queryTerms Returns Type Description Query | Improve this Doc View Source CalcHighFreqMinimumNumberShouldMatch(Int32) Declaration protected virtual int CalcHighFreqMinimumNumberShouldMatch(int numOptional) Parameters Type Name Description System.Int32 numOptional Returns Type Description System.Int32 | Improve this Doc View Source CalcLowFreqMinimumNumberShouldMatch(Int32) Declaration protected virtual int CalcLowFreqMinimumNumberShouldMatch(int numOptional) Parameters Type Name Description System.Int32 numOptional Returns Type Description System.Int32 | Improve this Doc View Source CollectTermContext(IndexReader, IList<AtomicReaderContext>, TermContext[], Term[]) Declaration public virtual void CollectTermContext(IndexReader reader, IList<AtomicReaderContext> leaves, TermContext[] contextArray, Term[] queryTerms) Parameters Type Name Description IndexReader reader System.Collections.Generic.IList < AtomicReaderContext > leaves TermContext [] contextArray Term [] queryTerms | 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 ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the m_terms collection. Declaration public IEnumerator<Term> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Term > An enumerator that can be used to iterate through the m_terms collection. | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source NewTermQuery(Term, TermContext) Builds a new TermQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual Query NewTermQuery(Term term, TermContext context) Parameters Type Name Description Term term term TermContext context the TermContext to be used to create the low level term query. Can be null . Returns Type Description Query new TermQuery instance | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the m_terms collection. Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator An enumerator that can be used to iterate through the m_terms collection. Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreProvider.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreProvider.html",
    "title": "Class CustomScoreProvider | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CustomScoreProvider An instance of this subclass should be returned by GetCustomScoreProvider(AtomicReaderContext) , if you want to modify the custom score calculation of a CustomScoreQuery . Since Lucene 2.9, queries operate on each segment of an index separately, so the protected m_context field can be used to resolve doc IDs, as the supplied doc ID is per-segment and without knowledge of the IndexReader you cannot access the document or IFieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 2.9.2 Inheritance System.Object CustomScoreProvider 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.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CustomScoreProvider Constructors | Improve this Doc View Source CustomScoreProvider(AtomicReaderContext) Creates a new instance of the provider class for the given IndexReader . Declaration public CustomScoreProvider(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Fields | Improve this Doc View Source m_context Declaration protected readonly AtomicReaderContext m_context Field Value Type Description AtomicReaderContext Methods | Improve this Doc View Source CustomExplain(Int32, Explanation, Explanation) Explain the custom score. Whenever overriding CustomScore(Int32, Single, Single) , this method should also be overridden to provide the correct explanation for the part of the custom scoring. Declaration public virtual Explanation CustomExplain(int doc, Explanation subQueryExpl, Explanation valSrcExpl) Parameters Type Name Description System.Int32 doc doc being explained. Explanation subQueryExpl explanation for the sub-query part. Explanation valSrcExpl explanation for the value source part. Returns Type Description Explanation an explanation for the custom score | Improve this Doc View Source CustomExplain(Int32, Explanation, Explanation[]) Explain the custom score. Whenever overriding CustomScore(Int32, Single, Single[]) , this method should also be overridden to provide the correct explanation for the part of the custom scoring. Declaration public virtual Explanation CustomExplain(int doc, Explanation subQueryExpl, Explanation[] valSrcExpls) Parameters Type Name Description System.Int32 doc doc being explained. Explanation subQueryExpl explanation for the sub-query part. Explanation [] valSrcExpls explanation for the value source part. Returns Type Description Explanation an explanation for the custom score | Improve this Doc View Source CustomScore(Int32, Single, Single) Compute a custom score by the subQueryScore and the FunctionQuery score. Subclasses can override this method to modify the custom score. If your custom scoring is different than the default herein you should override at least one of the two CustomScore(Int32, Single, Single) methods. If the number of FunctionQuery s is always < 2 it is sufficient to override this CustomScore(Int32, Single, Single) method, which is simpler. The default computation herein is a multiplication of the two scores: ModifiedScore = subQueryScore * valSrcScore Declaration public virtual float CustomScore(int doc, float subQueryScore, float valSrcScore) Parameters Type Name Description System.Int32 doc id of scored doc. System.Single subQueryScore score of that doc by the subQuery. System.Single valSrcScore score of that doc by the FunctionQuery . Returns Type Description System.Single custom score. | Improve this Doc View Source CustomScore(Int32, Single, Single[]) Compute a custom score by the subQuery score and a number of FunctionQuery scores. Subclasses can override this method to modify the custom score. If your custom scoring is different than the default herein you should override at least one of the two CustomScore(Int32, Single, Single) methods. If the number of FunctionQuery s is always < 2 it is sufficient to override the other CustomScore(Int32, Single, Single) method, which is simpler. The default computation herein is a multiplication of given scores: ModifiedScore = valSrcScore * valSrcScores[0] * valSrcScores[1] * ... Declaration public virtual float CustomScore(int doc, float subQueryScore, float[] valSrcScores) Parameters Type Name Description System.Int32 doc id of scored doc. System.Single subQueryScore score of that doc by the subQuery. System.Single [] valSrcScores scores of that doc by the FunctionQuery . Returns Type Description System.Single custom score."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreQuery.html",
    "title": "Class CustomScoreQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CustomScoreQuery Query that sets document score as a programmatic function of several (sub) scores: the score of its subQuery (any query) (optional) the score of its FunctionQuery (or queries). Subclasses can modify the computation by overriding GetCustomScoreProvider(AtomicReaderContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query CustomScoreQuery Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CustomScoreQuery : Query Constructors | Improve this Doc View Source CustomScoreQuery(Query) Create a CustomScoreQuery over input subQuery . Declaration public CustomScoreQuery(Query subQuery) Parameters Type Name Description Query subQuery the sub query whose scored is being customized. Must not be null . | Improve this Doc View Source CustomScoreQuery(Query, FunctionQuery) Create a CustomScoreQuery over input subQuery and a FunctionQuery . Declaration public CustomScoreQuery(Query subQuery, FunctionQuery scoringQuery) Parameters Type Name Description Query subQuery the sub query whose score is being customized. Must not be null . FunctionQuery scoringQuery a value source query whose scores are used in the custom score computation. This parameter is optional - it can be null. | Improve this Doc View Source CustomScoreQuery(Query, FunctionQuery[]) Create a CustomScoreQuery over input subQuery and a FunctionQuery . Declaration public CustomScoreQuery(Query subQuery, params FunctionQuery[] scoringQueries) Parameters Type Name Description Query subQuery the sub query whose score is being customized. Must not be null . FunctionQuery [] scoringQueries value source queries whose scores are used in the custom score computation. This parameter is optional - it can be null or even an empty array. Properties | Improve this Doc View Source IsStrict Checks if this is strict custom scoring. In strict custom scoring, the ValueSource part does not participate in weight normalization. This may be useful when one wants full control over how scores are modified, and does not care about normalizing by the ValueSource part. One particular case where this is useful if for testing this query. Note: only has effect when the ValueSource part is not null . Declaration public virtual bool IsStrict { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Name A short name of this query, used in ToString(String) . Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source ScoringQueries The scoring queries that only affect the score of CustomScoreQuery . Declaration public virtual Query[] ScoringQueries { get; } Property Value Type Description Query [] | Improve this Doc View Source SubQuery The sub-query that CustomScoreQuery wraps, affecting both the score and which documents match. Declaration public virtual Query SubQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source Clone() Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetCustomScoreProvider(AtomicReaderContext) Returns a CustomScoreProvider that calculates the custom scores for the given IndexReader . The default implementation returns a default implementation as specified in the docs of CustomScoreProvider . @since 2.9.2 Declaration protected virtual CustomScoreProvider GetCustomScoreProvider(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description CustomScoreProvider | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) 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)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.FilterClause.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.FilterClause.html",
    "title": "Class FilterClause | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterClause A Filter that wrapped with an indication of how that filter is used when composed with another filter. (Follows the boolean logic in BooleanClause for composition of queries.) Inheritance System.Object FilterClause 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.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class FilterClause Constructors | Improve this Doc View Source FilterClause(Filter, Occur) Create a new FilterClause Declaration public FilterClause(Filter filter, Occur occur) Parameters Type Name Description Filter filter A Filter object containing a BitSet Occur occur A parameter implementation indicating SHOULD, MUST or MUST NOT Properties | Improve this Doc View Source Filter Returns this FilterClause 's filter Declaration public Filter Filter { get; } Property Value Type Description Filter A Filter object | Improve this Doc View Source Occur Returns this FilterClause 's occur parameter Declaration public Occur Occur { get; } Property Value Type Description Occur An Occur object Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.BoostedQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.BoostedQuery.html",
    "title": "Class BoostedQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostedQuery Query that is boosted by a ValueSource Inheritance System.Object Query BoostedQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class BoostedQuery : Query Constructors | Improve this Doc View Source BoostedQuery(Query, ValueSource) Declaration public BoostedQuery(Query subQuery, ValueSource boostVal) Parameters Type Name Description Query subQuery ValueSource boostVal Properties | Improve this Doc View Source Query Declaration public virtual Query Query { get; } Property Value Type Description Query | Improve this Doc View Source ValueSource Declaration public virtual ValueSource ValueSource { get; } Property Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | 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 Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.BoolDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.BoolDocValues.html",
    "title": "Class BoolDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoolDocValues Abstract FunctionValues implementation which supports retrieving System.Boolean values. Implementations can control how the System.Boolean values are loaded through BoolVal(Int32) Inheritance System.Object FunctionValues BoolDocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) 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.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class BoolDocValues : FunctionValues Constructors | Improve this Doc View Source BoolDocValues(ValueSource) Declaration public BoolDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public abstract override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.DocTermsIndexException.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.DocTermsIndexException.html",
    "title": "Class DocTermsIndexDocValues.DocTermsIndexException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocTermsIndexDocValues.DocTermsIndexException Custom System.Exception to be thrown when the DocTermsIndex for a field cannot be generated Inheritance System.Object System.Exception DocTermsIndexDocValues.DocTermsIndexException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public sealed class DocTermsIndexException : Exception, ISerializable Constructors | Improve this Doc View Source DocTermsIndexException(String, Exception) Declaration public DocTermsIndexException(string fieldName, Exception cause) Parameters Type Name Description System.String fieldName System.Exception cause Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.html",
    "title": "Class DocTermsIndexDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocTermsIndexDocValues Serves as base class for FunctionValues based on DocTermsIndex. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object FunctionValues DocTermsIndexDocValues Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) 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.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class DocTermsIndexDocValues : FunctionValues Constructors | Improve this Doc View Source DocTermsIndexDocValues(ValueSource, AtomicReaderContext, String) Declaration public DocTermsIndexDocValues(ValueSource vs, AtomicReaderContext context, string field) Parameters Type Name Description ValueSource vs AtomicReaderContext context System.String field Fields | Improve this Doc View Source m_spare Declaration protected readonly BytesRef m_spare Field Value Type Description BytesRef | Improve this Doc View Source m_spareChars Declaration protected readonly CharsRef m_spareChars Field Value Type Description CharsRef | Improve this Doc View Source m_termsIndex Declaration protected readonly SortedDocValues m_termsIndex Field Value Type Description SortedDocValues | Improve this Doc View Source m_val Declaration protected readonly MutableValueStr m_val Field Value Type Description MutableValueStr | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Properties | Improve this Doc View Source NumOrd Declaration public override int NumOrd { get; } Property Value Type Description System.Int32 Overrides FunctionValues.NumOrd Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source BytesVal(Int32, BytesRef) Declaration public override bool BytesVal(int doc, BytesRef target) Parameters Type Name Description System.Int32 doc BytesRef target Returns Type Description System.Boolean Overrides FunctionValues.BytesVal(Int32, BytesRef) | Improve this Doc View Source Exists(Int32) Declaration public override bool Exists(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.Exists(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source ObjectVal(Int32) Declaration public abstract override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source OrdVal(Int32) Declaration public override int OrdVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.OrdVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32) | Improve this Doc View Source ToTerm(String) Declaration protected abstract string ToTerm(string readableValue) Parameters Type Name Description System.String readableValue Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DoubleDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DoubleDocValues.html",
    "title": "Class DoubleDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleDocValues Abstract FunctionValues implementation which supports retrieving System.Double values. Implementations can control how the System.Double values are loaded through DoubleVal(Int32) Inheritance System.Object FunctionValues DoubleDocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) 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.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class DoubleDocValues : FunctionValues Constructors | Improve this Doc View Source DoubleDocValues(ValueSource) Declaration public DoubleDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public abstract override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.html",
    "title": "Namespace Lucene.Net.Queries.Function.DocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function.DocValues <!-- 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. --> FunctionValues for different data types. Classes BoolDocValues Abstract FunctionValues implementation which supports retrieving System.Boolean values. Implementations can control how the System.Boolean values are loaded through BoolVal(Int32) DocTermsIndexDocValues Serves as base class for FunctionValues based on DocTermsIndex. This is a Lucene.NET INTERNAL API, use at your own risk DocTermsIndexDocValues.DocTermsIndexException Custom System.Exception to be thrown when the DocTermsIndex for a field cannot be generated DoubleDocValues Abstract FunctionValues implementation which supports retrieving System.Double values. Implementations can control how the System.Double values are loaded through DoubleVal(Int32) Int32DocValues Abstract FunctionValues implementation which supports retrieving System.Int32 values. Implementations can control how the System.Int32 values are loaded through Int32Val(Int32) NOTE: This was IntDocValues in Lucene Int64DocValues Abstract FunctionValues implementation which supports retrieving System.Int64 values. Implementations can control how the System.Int64 values are loaded through Int64Val(Int32) NOTE: This was LongDocValues in Lucene SingleDocValues Abstract FunctionValues implementation which supports retrieving System.Single values. Implementations can control how the System.Single values are loaded through SingleVal(Int32) NOTE: This was FloatDocValues in Lucene StrDocValues Abstract FunctionValues implementation which supports retrieving System.String values. Implementations can control how the System.String values are loaded through StrVal(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int32DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int32DocValues.html",
    "title": "Class Int32DocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32DocValues Abstract FunctionValues implementation which supports retrieving System.Int32 values. Implementations can control how the System.Int32 values are loaded through Int32Val(Int32) NOTE: This was IntDocValues in Lucene Inheritance System.Object FunctionValues Int32DocValues Inherited Members FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) 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.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class Int32DocValues : FunctionValues Constructors | Improve this Doc View Source Int32DocValues(ValueSource) Declaration public Int32DocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public abstract override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int64DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int64DocValues.html",
    "title": "Class Int64DocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64DocValues Abstract FunctionValues implementation which supports retrieving System.Int64 values. Implementations can control how the System.Int64 values are loaded through Int64Val(Int32) NOTE: This was LongDocValues in Lucene Inheritance System.Object FunctionValues Int64DocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) 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.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class Int64DocValues : FunctionValues Constructors | Improve this Doc View Source Int64DocValues(ValueSource) Declaration public Int64DocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source ExternalToInt64(String) NOTE: This was externalToLong() in Lucene Declaration protected virtual long ExternalToInt64(string extVal) Parameters Type Name Description System.String extVal Returns Type Description System.Int64 | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) Declaration public abstract override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.SingleDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.SingleDocValues.html",
    "title": "Class SingleDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleDocValues Abstract FunctionValues implementation which supports retrieving System.Single values. Implementations can control how the System.Single values are loaded through SingleVal(Int32) NOTE: This was FloatDocValues in Lucene Inheritance System.Object FunctionValues SingleDocValues Inherited Members FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) 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.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class SingleDocValues : FunctionValues Constructors | Improve this Doc View Source SingleDocValues(ValueSource) Declaration public SingleDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public abstract override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.StrDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.StrDocValues.html",
    "title": "Class StrDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StrDocValues Abstract FunctionValues implementation which supports retrieving System.String values. Implementations can control how the System.String values are loaded through StrVal(Int32) Inheritance System.Object FunctionValues StrDocValues Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) 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.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class StrDocValues : FunctionValues Constructors | Improve this Doc View Source StrDocValues(ValueSource) Declaration public StrDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public abstract override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.AllScorer.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.AllScorer.html",
    "title": "Class FunctionQuery.AllScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionQuery.AllScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer FunctionQuery.AllScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax protected class AllScorer : Scorer Constructors | Improve this Doc View Source AllScorer(FunctionQuery, AtomicReaderContext, IBits, FunctionQuery.FunctionWeight, Single) Declaration public AllScorer(FunctionQuery outerInstance, AtomicReaderContext context, IBits acceptDocs, FunctionQuery.FunctionWeight w, float qWeight) Parameters Type Name Description FunctionQuery outerInstance AtomicReaderContext context IBits acceptDocs FunctionQuery.FunctionWeight w System.Single qWeight Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source Explain(Int32) Declaration public virtual Explanation Explain(int d) Parameters Type Name Description System.Int32 d Returns Type Description Explanation | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.FunctionWeight.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.FunctionWeight.html",
    "title": "Class FunctionQuery.FunctionWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionQuery.FunctionWeight Inheritance System.Object Weight FunctionQuery.FunctionWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder 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.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax protected class FunctionWeight : Weight Constructors | Improve this Doc View Source FunctionWeight(FunctionQuery, IndexSearcher) Declaration public FunctionWeight(FunctionQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description FunctionQuery outerInstance IndexSearcher searcher Fields | Improve this Doc View Source m_context Declaration protected readonly IDictionary m_context Field Value Type Description System.Collections.IDictionary | Improve this Doc View Source m_queryNorm Declaration protected float m_queryNorm Field Value Type Description System.Single | Improve this Doc View Source m_queryWeight Declaration protected float m_queryWeight Field Value Type Description System.Single | Improve this Doc View Source m_searcher Declaration protected readonly IndexSearcher m_searcher Field Value Type Description IndexSearcher Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext ctx, int doc) Parameters Type Name Description AtomicReaderContext ctx System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext ctx, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext ctx IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.html",
    "title": "Class FunctionQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionQuery Returns a score for each document based on a ValueSource , often some function of the value of a field. Note: This API is experimental and may change in non backward-compatible ways in the future Inheritance System.Object Query FunctionQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class FunctionQuery : Query Constructors | Improve this Doc View Source FunctionQuery(ValueSource) Declaration public FunctionQuery(ValueSource func) Parameters Type Name Description ValueSource func defines the function to be used for scoring Properties | Improve this Doc View Source ValueSource Declaration public virtual ValueSource ValueSource { get; } Property Value Type Description ValueSource The associated ValueSource Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.html",
    "title": "Class FunctionValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionValues Represents field values as different types. Normally created via a ValueSource for a particular field and reader. Inheritance System.Object FunctionValues BoolDocValues DocTermsIndexDocValues DoubleDocValues Int32DocValues Int64DocValues SingleDocValues StrDocValues MultiFunction.Values 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.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class FunctionValues Properties | Improve this Doc View Source NumOrd Declaration public virtual int NumOrd { get; } Property Value Type Description System.Int32 the number of unique sort ordinals this instance has Methods | Improve this Doc View Source BoolVal(Int32) Declaration public virtual bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source BytesVal(Int32, BytesRef) returns the bytes representation of the str val - TODO: should this return the indexed raw bytes not? Declaration public virtual bool BytesVal(int doc, BytesRef target) Parameters Type Name Description System.Int32 doc BytesRef target Returns Type Description System.Boolean | Improve this Doc View Source ByteVal(Int32) Declaration public virtual byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte | Improve this Doc View Source ByteVal(Int32, Byte[]) Declaration public virtual void ByteVal(int doc, byte[] vals) Parameters Type Name Description System.Int32 doc System.Byte [] vals | Improve this Doc View Source DoubleVal(Int32) Declaration public virtual double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double | Improve this Doc View Source DoubleVal(Int32, Double[]) Declaration public virtual void DoubleVal(int doc, double[] vals) Parameters Type Name Description System.Int32 doc System.Double [] vals | Improve this Doc View Source Exists(Int32) Returns true if there is a value for this document Declaration public virtual bool Exists(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source Explain(Int32) Declaration public virtual Explanation Explain(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Explanation | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public virtual ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer | Improve this Doc View Source GetScorer(IndexReader) Declaration public virtual ValueSourceScorer GetScorer(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description ValueSourceScorer | Improve this Doc View Source GetValueFiller() This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public virtual short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 | Improve this Doc View Source Int16Val(Int32, Int16[]) NOTE: This was shortVal() in Lucene Declaration public virtual void Int16Val(int doc, short[] vals) Parameters Type Name Description System.Int32 doc System.Int16 [] vals | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public virtual int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 | Improve this Doc View Source Int32Val(Int32, Int32[]) NOTE: This was intVal() in Lucene Declaration public virtual void Int32Val(int doc, int[] vals) Parameters Type Name Description System.Int32 doc System.Int32 [] vals | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public virtual long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 | Improve this Doc View Source Int64Val(Int32, Int64[]) NOTE: This was longVal() in Lucene Declaration public virtual void Int64Val(int doc, long[] vals) Parameters Type Name Description System.Int32 doc System.Int64 [] vals | Improve this Doc View Source ObjectVal(Int32) Native System.Object representation of the value Declaration public virtual object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object | Improve this Doc View Source OrdVal(Int32) Declaration public virtual int OrdVal(int doc) Parameters Type Name Description System.Int32 doc The doc to retrieve to sort ordinal for Returns Type Description System.Int32 the sort ordinal for the specified doc TODO: Maybe we can just use intVal for this... | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public virtual float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single | Improve this Doc View Source SingleVal(Int32, Single[]) NOTE: This was floatVal() in Lucene Declaration public virtual void SingleVal(int doc, float[] vals) Parameters Type Name Description System.Int32 doc System.Single [] vals | Improve this Doc View Source StrVal(Int32) Declaration public virtual string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String | Improve this Doc View Source StrVal(Int32, String[]) Declaration public virtual void StrVal(int doc, string[] vals) Parameters Type Name Description System.Int32 doc System.String [] vals | Improve this Doc View Source ToString(Int32) Declaration public abstract string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.ValueFiller.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.ValueFiller.html",
    "title": "Class FunctionValues.ValueFiller | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FunctionValues.ValueFiller Abstraction of the logic required to fill the value of a specified doc into a reusable MutableValue . Implementations of FunctionValues are encouraged to define their own implementations of FunctionValues.ValueFiller if their value is not a System.Single . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FunctionValues.ValueFiller 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.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class ValueFiller Properties | Improve this Doc View Source Value MutableValue will be reused across calls Declaration public abstract MutableValue Value { get; } Property Value Type Description MutableValue Methods | Improve this Doc View Source FillValue(Int32) MutableValue will be reused across calls. Returns true if the value exists. Declaration public abstract void FillValue(int doc) Parameters Type Name Description System.Int32 doc"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.html",
    "title": "Namespace Lucene.Net.Queries.Function | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Queries that compute score based upon a function Classes BoostedQuery Query that is boosted by a ValueSource FunctionQuery Returns a score for each document based on a ValueSource , often some function of the value of a field. Note: This API is experimental and may change in non backward-compatible ways in the future FunctionQuery.AllScorer FunctionQuery.FunctionWeight FunctionValues Represents field values as different types. Normally created via a ValueSource for a particular field and reader. FunctionValues.ValueFiller Abstraction of the logic required to fill the value of a specified doc into a reusable MutableValue . Implementations of FunctionValues are encouraged to define their own implementations of FunctionValues.ValueFiller if their value is not a System.Single . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ValueSource Instantiates FunctionValues for a particular reader. Often used when creating a FunctionQuery . ValueSourceScorer Scorer which returns the result of SingleVal(Int32) as the score for a document."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSource.html",
    "title": "Class ValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ValueSource Instantiates FunctionValues for a particular reader. Often used when creating a FunctionQuery . Inheritance System.Object ValueSource TaxonomyFacetSumValueSource.ScoreValueSource BoolFunction ConstNumberSource DocFreqValueSource DualSingleFunction FieldCacheSource LinearSingleFunction LiteralValueSource MaxDocValueSource MultiFunction MultiSingleFunction MultiValueSource NormValueSource NumDocsValueSource OrdFieldSource QueryValueSource RangeMapSingleFunction ReciprocalSingleFunction ReverseOrdFieldSource ScaleSingleFunction SingularFunction SumTotalTermFreqValueSource TotalTermFreqValueSource 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.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Implementations should propagate CreateWeight to sub-ValueSources which can optionally store weight info in the context. The context object will be passed to GetValues() where this info can be retrieved. Declaration public virtual void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher | Improve this Doc View Source Equals(Object) Declaration public abstract override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDescription() description of field, used in Explain() Declaration public abstract string GetDescription() Returns Type Description System.String | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSortField(Boolean) EXPERIMENTAL: This method is subject to change. Get the SortField for this ValueSource . Uses the GetValues(IDictionary, AtomicReaderContext) to populate the SortField . Declaration public virtual SortField GetSortField(bool reverse) Parameters Type Name Description System.Boolean reverse true if this is a reverse sort. Returns Type Description SortField The SortField for the ValueSource | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Gets the values for this reader and the context that was previously passed to CreateWeight(IDictionary, IndexSearcher) Declaration public abstract FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues | Improve this Doc View Source NewContext(IndexSearcher) Returns a new non-threadsafe context map. Declaration public static IDictionary NewContext(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description System.Collections.IDictionary | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BoolFunction.html",
    "title": "Class BoolFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoolFunction Abstract parent class for those ValueSource implementations which apply boolean logic to their values Inheritance System.Object ValueSource BoolFunction IfFunction MultiBoolFunction SimpleBoolFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class BoolFunction : ValueSource"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ByteFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ByteFieldSource.html",
    "title": "Class ByteFieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteFieldSource Obtains System.Int32 field values from the FieldCache using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. * Inheritance System.Object ValueSource FieldCacheSource ByteFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax [Obsolete] public class ByteFieldSource : FieldCacheSource Constructors | Improve this Doc View Source ByteFieldSource(String) Declaration public ByteFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source ByteFieldSource(String, FieldCache.IByteParser) Declaration public ByteFieldSource(string field, FieldCache.IByteParser parser) Parameters Type Name Description System.String field FieldCache.IByteParser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BytesRefFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BytesRefFieldSource.html",
    "title": "Class BytesRefFieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefFieldSource An implementation for retrieving FunctionValues instances for System.String based fields. Inheritance System.Object ValueSource FieldCacheSource BytesRefFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field FieldCacheSource.GetDescription() FieldCacheSource.Equals(Object) FieldCacheSource.GetHashCode() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class BytesRefFieldSource : FieldCacheSource Constructors | Improve this Doc View Source BytesRefFieldSource(String) Declaration public BytesRefFieldSource(string field) Parameters Type Name Description System.String field Methods | 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstNumberSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstNumberSource.html",
    "title": "Class ConstNumberSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstNumberSource ConstNumberSource is the base class for all constant numbers Inheritance System.Object ValueSource ConstNumberSource ConstValueSource DoubleConstValueSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class ConstNumberSource : ValueSource Properties | Improve this Doc View Source Bool Declaration public abstract bool Bool { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Double Declaration public abstract double Double { get; } Property Value Type Description System.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public abstract int Int32 { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public abstract long Int64 { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public abstract float Single { get; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstValueSource.html",
    "title": "Class ConstValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstValueSource ConstValueSource returns a constant for all documents Inheritance System.Object ValueSource ConstNumberSource ConstValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ConstValueSource : ConstNumberSource Constructors | Improve this Doc View Source ConstValueSource(Single) Declaration public ConstValueSource(float constant) Parameters Type Name Description System.Single constant Properties | Improve this Doc View Source Bool Declaration public override bool Bool { get; } Property Value Type Description System.Boolean Overrides ConstNumberSource.Bool | Improve this Doc View Source Double Declaration public override double Double { get; } Property Value Type Description System.Double Overrides ConstNumberSource.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public override int Int32 { get; } Property Value Type Description System.Int32 Overrides ConstNumberSource.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public override long Int64 { get; } Property Value Type Description System.Int64 Overrides ConstNumberSource.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public override float Single { get; } Property Value Type Description System.Single Overrides ConstNumberSource.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DefFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DefFunction.html",
    "title": "Class DefFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefFunction ValueSource implementation which only returns the values from the provided ValueSource s which are available for a particular docId. Consequently, when combined with a ConstValueSource , this function serves as a way to return a default value when the values for a field are unavailable. Inheritance System.Object ValueSource MultiFunction DefFunction Inherited Members MultiFunction.m_sources MultiFunction.GetDescription() MultiFunction.GetDescription(String, IList<ValueSource>) MultiFunction.ValsArr(IList<ValueSource>, IDictionary, AtomicReaderContext) MultiFunction.ToString(String, FunctionValues[], Int32) MultiFunction.CreateWeight(IDictionary, IndexSearcher) MultiFunction.GetHashCode() MultiFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DefFunction : MultiFunction Constructors | Improve this Doc View Source DefFunction(IList<ValueSource>) Declaration public DefFunction(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiFunction.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DivSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DivSingleFunction.html",
    "title": "Class DivSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DivSingleFunction Function to divide \"a\" by \"b\" NOTE: This was DivFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction DivSingleFunction Inherited Members DualSingleFunction.m_a DualSingleFunction.m_b DualSingleFunction.GetDescription() DualSingleFunction.GetValues(IDictionary, AtomicReaderContext) DualSingleFunction.CreateWeight(IDictionary, IndexSearcher) DualSingleFunction.GetHashCode() DualSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DivSingleFunction : DualSingleFunction Constructors | Improve this Doc View Source DivSingleFunction(ValueSource, ValueSource) Declaration public DivSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the numerator. ValueSource b the denominator. Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides DualSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single Overrides DualSingleFunction.Func(Int32, FunctionValues, FunctionValues)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DocFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DocFreqValueSource.html",
    "title": "Class DocFreqValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocFreqValueSource DocFreqValueSource returns the number of documents containing the term. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DocFreqValueSource IDFValueSource TermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DocFreqValueSource : ValueSource Constructors | Improve this Doc View Source DocFreqValueSource(String, String, String, BytesRef) Declaration public DocFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_indexedBytes Declaration protected readonly BytesRef m_indexedBytes Field Value Type Description BytesRef | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String | Improve this Doc View Source m_val Declaration protected readonly string m_val Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleConstValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleConstValueSource.html",
    "title": "Class DoubleConstValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleConstValueSource Function that returns a constant double value for every document. Inheritance System.Object ValueSource ConstNumberSource DoubleConstValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DoubleConstValueSource : ConstNumberSource Constructors | Improve this Doc View Source DoubleConstValueSource(Double) Declaration public DoubleConstValueSource(double constant) Parameters Type Name Description System.Double constant Properties | Improve this Doc View Source Bool Declaration public override bool Bool { get; } Property Value Type Description System.Boolean Overrides ConstNumberSource.Bool | Improve this Doc View Source Double Declaration public override double Double { get; } Property Value Type Description System.Double Overrides ConstNumberSource.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public override int Int32 { get; } Property Value Type Description System.Int32 Overrides ConstNumberSource.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public override long Int64 { get; } Property Value Type Description System.Int64 Overrides ConstNumberSource.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public override float Single { get; } Property Value Type Description System.Single Overrides ConstNumberSource.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource.html",
    "title": "Class DoubleFieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleFieldSource Obtains System.Double field values from GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and makes those values available as other numeric types, casting as needed. Inheritance System.Object ValueSource FieldCacheSource DoubleFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DoubleFieldSource : FieldCacheSource Constructors | Improve this Doc View Source DoubleFieldSource(String) Declaration public DoubleFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source DoubleFieldSource(String, FieldCache.IDoubleParser) Declaration public DoubleFieldSource(string field, FieldCache.IDoubleParser parser) Parameters Type Name Description System.String field FieldCache.IDoubleParser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.IDoubleParser m_parser Field Value Type Description FieldCache.IDoubleParser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DualSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DualSingleFunction.html",
    "title": "Class DualSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DualSingleFunction Abstract ValueSource implementation which wraps two ValueSource s and applies an extendible System.Single function to their values. NOTE: This was DualFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction DivSingleFunction PowSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class DualSingleFunction : ValueSource Constructors | Improve this Doc View Source DualSingleFunction(ValueSource, ValueSource) Declaration public DualSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the base. ValueSource b the exponent. Fields | Improve this Doc View Source m_a Declaration protected readonly ValueSource m_a Field Value Type Description ValueSource | Improve this Doc View Source m_b Declaration protected readonly ValueSource m_b Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected abstract float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.EnumFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.EnumFieldSource.html",
    "title": "Class EnumFieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EnumFieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. StrVal of the value is not the System.Int32 value, but its System.String (displayed) value Inheritance System.Object ValueSource FieldCacheSource EnumFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class EnumFieldSource : FieldCacheSource Constructors | Improve this Doc View Source EnumFieldSource(String, FieldCache.IInt32Parser, IDictionary<Nullable<Int32>, String>, IDictionary<String, Nullable<Int32>>) Declaration public EnumFieldSource(string field, FieldCache.IInt32Parser parser, IDictionary<int?, string> enumIntToStringMap, IDictionary<string, int?> enumStringToIntMap) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser System.Collections.Generic.IDictionary < System.Nullable < System.Int32 >, System.String > enumIntToStringMap System.Collections.Generic.IDictionary < System.String , System.Nullable < System.Int32 >> enumStringToIntMap Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.FieldCacheSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.FieldCacheSource.html",
    "title": "Class FieldCacheSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheSource A base class for ValueSource implementations that retrieve values for a single field from the FieldCache . Inheritance System.Object ValueSource FieldCacheSource ByteFieldSource BytesRefFieldSource DoubleFieldSource EnumFieldSource Int16FieldSource Int32FieldSource Int64FieldSource JoinDocFreqValueSource SingleFieldSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class FieldCacheSource : ValueSource Constructors | Improve this Doc View Source FieldCacheSource(String) Declaration public FieldCacheSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_cache Declaration protected readonly IFieldCache m_cache Field Value Type Description IFieldCache | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FieldCache Declaration public virtual IFieldCache FieldCache { get; } Property Value Type Description IFieldCache Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.html",
    "title": "Namespace Lucene.Net.Queries.Function.ValueSources | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function.ValueSources <!-- 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. --> A variety of functions to use with FunctionQuery. Classes BoolFunction Abstract parent class for those ValueSource implementations which apply boolean logic to their values ByteFieldSource Obtains System.Int32 field values from the FieldCache using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. * BytesRefFieldSource An implementation for retrieving FunctionValues instances for System.String based fields. ConstNumberSource ConstNumberSource is the base class for all constant numbers ConstValueSource ConstValueSource returns a constant for all documents DefFunction ValueSource implementation which only returns the values from the provided ValueSource s which are available for a particular docId. Consequently, when combined with a ConstValueSource , this function serves as a way to return a default value when the values for a field are unavailable. DivSingleFunction Function to divide \"a\" by \"b\" NOTE: This was DivFloatFunction in Lucene DocFreqValueSource DocFreqValueSource returns the number of documents containing the term. This is a Lucene.NET INTERNAL API, use at your own risk DoubleConstValueSource Function that returns a constant double value for every document. DoubleFieldSource Obtains System.Double field values from GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and makes those values available as other numeric types, casting as needed. DualSingleFunction Abstract ValueSource implementation which wraps two ValueSource s and applies an extendible System.Single function to their values. NOTE: This was DualFloatFunction in Lucene EnumFieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. StrVal of the value is not the System.Int32 value, but its System.String (displayed) value FieldCacheSource A base class for ValueSource implementations that retrieve values for a single field from the FieldCache . IDFValueSource Function that returns Idf(Int64, Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity This is a Lucene.NET INTERNAL API, use at your own risk IfFunction Depending on the System.Boolean value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.ifSource function, returns the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.trueSource or Lucene.Net.Queries.Function.ValueSources.IfFunction.falseSource function. Int16FieldSource Obtains System.Int16 field values from the FieldCache using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was ShortFieldSource in Lucene Int32FieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was IntFieldSource in Lucene Int64FieldSource Obtains System.Int64 field values from GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was LongFieldSource in Lucene JoinDocFreqValueSource Use a field value and find the Document Frequency within another field. @since solr 4.0 LinearSingleFunction LinearSingleFunction implements a linear function over another ValueSource . Normally Used as an argument to a FunctionQuery NOTE: This was LinearFloatFunction in Lucene LiteralValueSource Pass a the field value through as a System.String , no matter the type // Q: doesn't this mean it's a \"str\"? MaxDocValueSource Returns the value of MaxDoc for every document. This is the number of documents including deletions. MaxSingleFunction MaxSingleFunction returns the max of it's components. NOTE: This was MaxFloatFunction in Lucene MinSingleFunction MinSingleFunction returns the min of it's components. NOTE: This was MinFloatFunction in Lucene MultiBoolFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Boolean function to their values. MultiFunction Abstract parent class for ValueSource implementations that wrap multiple ValueSource s and apply their own logic. MultiFunction.Values MultiSingleFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Single function to their values. NOTE: This was MultiFloatFunction in Lucene MultiValueSource A ValueSource that abstractly represents ValueSource s for poly fields, and other things. NormValueSource Function that returns DecodeNormValue(Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity This is a Lucene.NET INTERNAL API, use at your own risk NumDocsValueSource Returns the value of NumDocs for every document. This is the number of documents excluding deletions. OrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using StringIndex. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example: If there were only three field values: \"apple\",\"banana\",\"pear\" then ord(\"apple\")=1, ord(\"banana\")=2, ord(\"pear\")=3 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. PowSingleFunction Function to raise the base \"a\" to the power \"b\" NOTE: This was PowFloatFunction in Lucene ProductSingleFunction ProductSingleFunction returns the product of it's components. NOTE: This was ProductFloatFunction in Lucene QueryValueSource QueryValueSource returns the relevance score of the query RangeMapSingleFunction RangeMapSingleFunction implements a map function over another ValueSource whose values fall within min and max inclusive to target . Normally used as an argument to a FunctionQuery NOTE: This was RangeMapFloatFunction in Lucene ReciprocalSingleFunction ReciprocalSingleFunction implements a reciprocal function f(x) = a/(mx+b) , based on the System.Single value of a field or function as exported by ValueSource . When a and b are equal, and x>=0 , this function has a maximum value of 1 that drops as x increases. Increasing the value of a and b together results in a movement of the entire function to a flatter part of the curve. These properties make this an idea function for boosting more recent documents. Example: recip(ms(NOW,mydatefield),3.16e-11,1,1) A multiplier of 3.16e-11 changes the units from milliseconds to years (since there are about 3.16e10 milliseconds per year). Thus, a very recent date will yield a value close to 1/(0+1) or 1, a date a year in the past will get a multiplier of about 1/(1+1) or 1/2, and date two years old will yield 1/(2+1) or 1/3. NOTE: This was ReciprocalFloatFunction in Lucene ReverseOrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using GetTermsIndex(AtomicReader, String, Single) and reverses the order. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example of reverse ordinal (rord): If there were only three field values: \"apple\",\"banana\",\"pear\" then rord(\"apple\")=3, rord(\"banana\")=2, ord(\"pear\")=1 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. ScaleSingleFunction Scales values to be between min and max . This implementation currently traverses all of the source values to obtain their min and max. This implementation currently cannot distinguish when documents have been deleted or documents that have no value, and 0.0 values will be used for these cases. This means that if values are normally all greater than 0.0, one can still end up with 0.0 as the min value to map from. In these cases, an appropriate map() function could be used as a workaround to change 0.0 to a value in the real range. NOTE: This was ScaleFloatFunction in Lucene SimpleBoolFunction BoolFunction implementation which applies an extendible System.Boolean function to the values of a single wrapped ValueSource . Functions this can be used for include whether a field has a value or not, or inverting the System.Boolean value of the wrapped ValueSource . SimpleSingleFunction A simple System.Single function with a single argument NOTE: This was SimpleFloatFunction in Lucene SingleFieldSource Obtains System.Single field values from GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was FloatFieldSource in Lucene SingularFunction A function with a single (one) argument. NOTE: This was SingleFunction in Lucene, changed to avoid conusion with operations on the datatype System.Single . SumSingleFunction SumSingleFunction returns the sum of its components. NOTE: This was SumFloatFunction in Lucene SumTotalTermFreqValueSource SumTotalTermFreqValueSource returns the number of tokens. (sum of term freqs across all documents, across all terms). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk TermFreqValueSource Function that returns Freq for the supplied term in every document. If the term does not exist in the document, returns 0. If frequencies are omitted, returns 1. TFValueSource Function that returns Tf(Single) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity This is a Lucene.NET INTERNAL API, use at your own risk TotalTermFreqValueSource TotalTermFreqValueSource returns the total term freq (sum of term freqs across all documents). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk VectorValueSource Converts individual ValueSource instances to leverage the FunctionValues *Val functions that work with multiple values, i.e. DoubleVal(Int32, Double[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IDFValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IDFValueSource.html",
    "title": "Class IDFValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IDFValueSource Function that returns Idf(Int64, Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DocFreqValueSource IDFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class IDFValueSource : DocFreqValueSource Constructors | Improve this Doc View Source IDFValueSource(String, String, String, BytesRef) Declaration public IDFValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides DocFreqValueSource.Name Methods | 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides DocFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IfFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IfFunction.html",
    "title": "Class IfFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IfFunction Depending on the System.Boolean value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.ifSource function, returns the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.trueSource or Lucene.Net.Queries.Function.ValueSources.IfFunction.falseSource function. Inheritance System.Object ValueSource BoolFunction IfFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class IfFunction : BoolFunction Constructors | Improve this Doc View Source IfFunction(ValueSource, ValueSource, ValueSource) Declaration public IfFunction(ValueSource ifSource, ValueSource trueSource, ValueSource falseSource) Parameters Type Name Description ValueSource ifSource ValueSource trueSource ValueSource falseSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int16FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int16FieldSource.html",
    "title": "Class Int16FieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int16FieldSource Obtains System.Int16 field values from the FieldCache using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was ShortFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int16FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax [Obsolete] public class Int16FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int16FieldSource(String) Declaration public Int16FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int16FieldSource(String, FieldCache.IInt16Parser) Declaration public Int16FieldSource(string field, FieldCache.IInt16Parser parser) Parameters Type Name Description System.String field FieldCache.IInt16Parser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int32FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int32FieldSource.html",
    "title": "Class Int32FieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32FieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was IntFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int32FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Int32FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int32FieldSource(String) Declaration public Int32FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int32FieldSource(String, FieldCache.IInt32Parser) Declaration public Int32FieldSource(string field, FieldCache.IInt32Parser parser) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int64FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int64FieldSource.html",
    "title": "Class Int64FieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64FieldSource Obtains System.Int64 field values from GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was LongFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int64FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Int64FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int64FieldSource(String) Declaration public Int64FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int64FieldSource(String, FieldCache.IInt64Parser) Declaration public Int64FieldSource(string field, FieldCache.IInt64Parser parser) Parameters Type Name Description System.String field FieldCache.IInt64Parser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.IInt64Parser m_parser Field Value Type Description FieldCache.IInt64Parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source ExternalToInt64(String) NOTE: This was externalToLong() in Lucene Declaration public virtual long ExternalToInt64(string extVal) Parameters Type Name Description System.String extVal Returns Type Description System.Int64 | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext) | Improve this Doc View Source Int64ToObject(Int64) NOTE: This was longToObject() in Lucene Declaration public virtual object Int64ToObject(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.Object | Improve this Doc View Source Int64ToString(Int64) NOTE: This was longToString() in Lucene Declaration public virtual string Int64ToString(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.String | Improve this Doc View Source NewMutableValueInt64() NOTE: This was longToString() in Lucene Declaration protected virtual MutableValueInt64 NewMutableValueInt64() Returns Type Description MutableValueInt64"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.JoinDocFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.JoinDocFreqValueSource.html",
    "title": "Class JoinDocFreqValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JoinDocFreqValueSource Use a field value and find the Document Frequency within another field. @since solr 4.0 Inheritance System.Object ValueSource FieldCacheSource JoinDocFreqValueSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class JoinDocFreqValueSource : FieldCacheSource Constructors | Improve this Doc View Source JoinDocFreqValueSource(String, String) Declaration public JoinDocFreqValueSource(string field, string qfield) Parameters Type Name Description System.String field System.String qfield Fields | Improve this Doc View Source m_qfield Declaration protected readonly string m_qfield Field Value Type Description System.String | Improve this Doc View Source NAME Declaration public const string NAME = \"joindf\" Field Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LinearSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LinearSingleFunction.html",
    "title": "Class LinearSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LinearSingleFunction LinearSingleFunction implements a linear function over another ValueSource . Normally Used as an argument to a FunctionQuery NOTE: This was LinearFloatFunction in Lucene Inheritance System.Object ValueSource LinearSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class LinearSingleFunction : ValueSource Constructors | Improve this Doc View Source LinearSingleFunction(ValueSource, Single, Single) Declaration public LinearSingleFunction(ValueSource source, float slope, float intercept) Parameters Type Name Description ValueSource source System.Single slope System.Single intercept Fields | Improve this Doc View Source m_intercept Declaration protected readonly float m_intercept Field Value Type Description System.Single | Improve this Doc View Source m_slope Declaration protected readonly float m_slope Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LiteralValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LiteralValueSource.html",
    "title": "Class LiteralValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LiteralValueSource Pass a the field value through as a System.String , no matter the type // Q: doesn't this mean it's a \"str\"? Inheritance System.Object ValueSource LiteralValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class LiteralValueSource : ValueSource Constructors | Improve this Doc View Source LiteralValueSource(String) Declaration public LiteralValueSource(string str) Parameters Type Name Description System.String str Fields | Improve this Doc View Source hash Declaration public static readonly int hash Field Value Type Description System.Int32 | Improve this Doc View Source m_bytesRef Declaration protected readonly BytesRef m_bytesRef Field Value Type Description BytesRef | Improve this Doc View Source m_str Declaration protected readonly string m_str Field Value Type Description System.String Properties | Improve this Doc View Source Value returns the literal value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxDocValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxDocValueSource.html",
    "title": "Class MaxDocValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MaxDocValueSource Returns the value of MaxDoc for every document. This is the number of documents including deletions. Inheritance System.Object ValueSource MaxDocValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MaxDocValueSource : ValueSource Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxSingleFunction.html",
    "title": "Class MaxSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MaxSingleFunction MaxSingleFunction returns the max of it's components. NOTE: This was MaxFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MaxSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MaxSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source MaxSingleFunction(ValueSource[]) Declaration public MaxSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MinSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MinSingleFunction.html",
    "title": "Class MinSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MinSingleFunction MinSingleFunction returns the min of it's components. NOTE: This was MinFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MinSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MinSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source MinSingleFunction(ValueSource[]) Declaration public MinSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiBoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiBoolFunction.html",
    "title": "Class MultiBoolFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiBoolFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Boolean function to their values. Inheritance System.Object ValueSource BoolFunction MultiBoolFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiBoolFunction : BoolFunction Constructors | Improve this Doc View Source MultiBoolFunction(IList<ValueSource>) Declaration public MultiBoolFunction(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description System.Collections.Generic.IList < ValueSource > Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected abstract bool Func(int doc, FunctionValues[] vals) Parameters Type Name Description System.Int32 doc FunctionValues [] vals Returns Type Description System.Boolean | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.html",
    "title": "Class MultiFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiFunction Abstract parent class for ValueSource implementations that wrap multiple ValueSource s and apply their own logic. Inheritance System.Object ValueSource MultiFunction DefFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiFunction : ValueSource Constructors | Improve this Doc View Source MultiFunction(IList<ValueSource>) Declaration protected MultiFunction(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description System.Collections.Generic.IList < ValueSource > Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetDescription(String, IList<ValueSource>) Declaration public static string GetDescription(string name, IList<ValueSource> sources) Parameters Type Name Description System.String name System.Collections.Generic.IList < ValueSource > sources Returns Type Description System.String | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source ToString(String, FunctionValues[], Int32) Declaration public static string ToString(string name, FunctionValues[] valsArr, int doc) Parameters Type Name Description System.String name FunctionValues [] valsArr System.Int32 doc Returns Type Description System.String | Improve this Doc View Source ValsArr(IList<ValueSource>, IDictionary, AtomicReaderContext) Declaration public static FunctionValues[] ValsArr(IList<ValueSource> sources, IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources System.Collections.IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues []"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.Values.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.Values.html",
    "title": "Class MultiFunction.Values | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiFunction.Values Inheritance System.Object FunctionValues MultiFunction.Values Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.StrVal(Int32) FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.ObjectVal(Int32) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.GetValueFiller() FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) 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.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Values : FunctionValues Constructors | Improve this Doc View Source Values(MultiFunction, FunctionValues[]) Declaration public Values(MultiFunction outerInstance, FunctionValues[] valsArr) Parameters Type Name Description MultiFunction outerInstance FunctionValues [] valsArr Methods | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiSingleFunction.html",
    "title": "Class MultiSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiSingleFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Single function to their values. NOTE: This was MultiFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MaxSingleFunction MinSingleFunction ProductSingleFunction SumSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiSingleFunction : ValueSource Constructors | Improve this Doc View Source MultiSingleFunction(ValueSource[]) Declaration public MultiSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Fields | Improve this Doc View Source m_sources Declaration protected readonly ValueSource[] m_sources Field Value Type Description ValueSource [] Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected abstract float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiValueSource.html",
    "title": "Class MultiValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiValueSource A ValueSource that abstractly represents ValueSource s for poly fields, and other things. Inheritance System.Object ValueSource MultiValueSource VectorValueSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiValueSource : ValueSource Properties | Improve this Doc View Source Dimension Declaration public abstract int Dimension { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NormValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NormValueSource.html",
    "title": "Class NormValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormValueSource Function that returns DecodeNormValue(Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource NormValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class NormValueSource : ValueSource Constructors | Improve this Doc View Source NormValueSource(String) Declaration public NormValueSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NumDocsValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NumDocsValueSource.html",
    "title": "Class NumDocsValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumDocsValueSource Returns the value of NumDocs for every document. This is the number of documents excluding deletions. Inheritance System.Object ValueSource NumDocsValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class NumDocsValueSource : ValueSource Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.OrdFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.OrdFieldSource.html",
    "title": "Class OrdFieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using StringIndex. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example: If there were only three field values: \"apple\",\"banana\",\"pear\" then ord(\"apple\")=1, ord(\"banana\")=2, ord(\"pear\")=3 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. Inheritance System.Object ValueSource OrdFieldSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class OrdFieldSource : ValueSource Constructors | Improve this Doc View Source OrdFieldSource(String) Declaration public OrdFieldSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.PowSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.PowSingleFunction.html",
    "title": "Class PowSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PowSingleFunction Function to raise the base \"a\" to the power \"b\" NOTE: This was PowFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction PowSingleFunction Inherited Members DualSingleFunction.m_a DualSingleFunction.m_b DualSingleFunction.GetDescription() DualSingleFunction.GetValues(IDictionary, AtomicReaderContext) DualSingleFunction.CreateWeight(IDictionary, IndexSearcher) DualSingleFunction.GetHashCode() DualSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class PowSingleFunction : DualSingleFunction Constructors | Improve this Doc View Source PowSingleFunction(ValueSource, ValueSource) Declaration public PowSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the base. ValueSource b the exponent. Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides DualSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single Overrides DualSingleFunction.Func(Int32, FunctionValues, FunctionValues)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ProductSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ProductSingleFunction.html",
    "title": "Class ProductSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ProductSingleFunction ProductSingleFunction returns the product of it's components. NOTE: This was ProductFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction ProductSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ProductSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source ProductSingleFunction(ValueSource[]) Declaration public ProductSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.QueryValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.QueryValueSource.html",
    "title": "Class QueryValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryValueSource QueryValueSource returns the relevance score of the query Inheritance System.Object ValueSource QueryValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class QueryValueSource : ValueSource Constructors | Improve this Doc View Source QueryValueSource(Query, Single) Declaration public QueryValueSource(Query q, float defVal) Parameters Type Name Description Query q System.Single defVal Properties | Improve this Doc View Source DefaultValue Declaration public virtual float DefaultValue { get; } Property Value Type Description System.Single | Improve this Doc View Source Query Declaration public virtual Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.RangeMapSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.RangeMapSingleFunction.html",
    "title": "Class RangeMapSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RangeMapSingleFunction RangeMapSingleFunction implements a map function over another ValueSource whose values fall within min and max inclusive to target . Normally used as an argument to a FunctionQuery NOTE: This was RangeMapFloatFunction in Lucene Inheritance System.Object ValueSource RangeMapSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class RangeMapSingleFunction : ValueSource Constructors | Improve this Doc View Source RangeMapSingleFunction(ValueSource, Single, Single, ValueSource, ValueSource) Declaration public RangeMapSingleFunction(ValueSource source, float min, float max, ValueSource target, ValueSource def) Parameters Type Name Description ValueSource source System.Single min System.Single max ValueSource target ValueSource def | Improve this Doc View Source RangeMapSingleFunction(ValueSource, Single, Single, Single, Nullable<Single>) Declaration public RangeMapSingleFunction(ValueSource source, float min, float max, float target, float? def) Parameters Type Name Description ValueSource source System.Single min System.Single max System.Single target System.Nullable < System.Single > def Fields | Improve this Doc View Source m_defaultVal Declaration protected readonly ValueSource m_defaultVal Field Value Type Description ValueSource | Improve this Doc View Source m_max Declaration protected readonly float m_max Field Value Type Description System.Single | Improve this Doc View Source m_min Declaration protected readonly float m_min Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource | Improve this Doc View Source m_target Declaration protected readonly ValueSource m_target Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReciprocalSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReciprocalSingleFunction.html",
    "title": "Class ReciprocalSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReciprocalSingleFunction ReciprocalSingleFunction implements a reciprocal function f(x) = a/(mx+b) , based on the System.Single value of a field or function as exported by ValueSource . When a and b are equal, and x>=0 , this function has a maximum value of 1 that drops as x increases. Increasing the value of a and b together results in a movement of the entire function to a flatter part of the curve. These properties make this an idea function for boosting more recent documents. Example: recip(ms(NOW,mydatefield),3.16e-11,1,1) A multiplier of 3.16e-11 changes the units from milliseconds to years (since there are about 3.16e10 milliseconds per year). Thus, a very recent date will yield a value close to 1/(0+1) or 1, a date a year in the past will get a multiplier of about 1/(1+1) or 1/2, and date two years old will yield 1/(2+1) or 1/3. NOTE: This was ReciprocalFloatFunction in Lucene Inheritance System.Object ValueSource ReciprocalSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ReciprocalSingleFunction : ValueSource Constructors | Improve this Doc View Source ReciprocalSingleFunction(ValueSource, Single, Single, Single) f(source) = a/(m*float(source)+b) Declaration public ReciprocalSingleFunction(ValueSource source, float m, float a, float b) Parameters Type Name Description ValueSource source System.Single m System.Single a System.Single b Fields | Improve this Doc View Source m_a Declaration protected readonly float m_a Field Value Type Description System.Single | Improve this Doc View Source m_b Declaration protected readonly float m_b Field Value Type Description System.Single | Improve this Doc View Source m_m Declaration protected readonly float m_m Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext) See Also FunctionQuery"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReverseOrdFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReverseOrdFieldSource.html",
    "title": "Class ReverseOrdFieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReverseOrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using GetTermsIndex(AtomicReader, String, Single) and reverses the order. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example of reverse ordinal (rord): If there were only three field values: \"apple\",\"banana\",\"pear\" then rord(\"apple\")=3, rord(\"banana\")=2, ord(\"pear\")=1 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. Inheritance System.Object ValueSource ReverseOrdFieldSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ReverseOrdFieldSource : ValueSource Constructors | Improve this Doc View Source ReverseOrdFieldSource(String) Declaration public ReverseOrdFieldSource(string field) Parameters Type Name Description System.String field Properties | Improve this Doc View Source Field Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ScaleSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ScaleSingleFunction.html",
    "title": "Class ScaleSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScaleSingleFunction Scales values to be between min and max . This implementation currently traverses all of the source values to obtain their min and max. This implementation currently cannot distinguish when documents have been deleted or documents that have no value, and 0.0 values will be used for these cases. This means that if values are normally all greater than 0.0, one can still end up with 0.0 as the min value to map from. In these cases, an appropriate map() function could be used as a workaround to change 0.0 to a value in the real range. NOTE: This was ScaleFloatFunction in Lucene Inheritance System.Object ValueSource ScaleSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ScaleSingleFunction : ValueSource Constructors | Improve this Doc View Source ScaleSingleFunction(ValueSource, Single, Single) Declaration public ScaleSingleFunction(ValueSource source, float min, float max) Parameters Type Name Description ValueSource source System.Single min System.Single max Fields | Improve this Doc View Source m_max Declaration protected readonly float m_max Field Value Type Description System.Single | Improve this Doc View Source m_min Declaration protected readonly float m_min Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleBoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleBoolFunction.html",
    "title": "Class SimpleBoolFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleBoolFunction BoolFunction implementation which applies an extendible System.Boolean function to the values of a single wrapped ValueSource . Functions this can be used for include whether a field has a value or not, or inverting the System.Boolean value of the wrapped ValueSource . Inheritance System.Object ValueSource BoolFunction SimpleBoolFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SimpleBoolFunction : BoolFunction Constructors | Improve this Doc View Source SimpleBoolFunction(ValueSource) Declaration public SimpleBoolFunction(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues) Declaration protected abstract bool Func(int doc, FunctionValues vals) Parameters Type Name Description System.Int32 doc FunctionValues vals Returns Type Description System.Boolean | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleSingleFunction.html",
    "title": "Class SimpleSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleSingleFunction A simple System.Single function with a single argument NOTE: This was SimpleFloatFunction in Lucene Inheritance System.Object ValueSource SingularFunction SimpleSingleFunction Inherited Members SingularFunction.m_source SingularFunction.Name SingularFunction.GetDescription() SingularFunction.GetHashCode() SingularFunction.Equals(Object) SingularFunction.CreateWeight(IDictionary, IndexSearcher) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SimpleSingleFunction : SingularFunction Constructors | Improve this Doc View Source SimpleSingleFunction(ValueSource) Declaration public SimpleSingleFunction(ValueSource source) Parameters Type Name Description ValueSource source Methods | Improve this Doc View Source Func(Int32, FunctionValues) Declaration protected abstract float Func(int doc, FunctionValues vals) Parameters Type Name Description System.Int32 doc FunctionValues vals Returns Type Description System.Single | 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingleFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingleFieldSource.html",
    "title": "Class SingleFieldSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleFieldSource Obtains System.Single field values from GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was FloatFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource SingleFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SingleFieldSource : FieldCacheSource Constructors | Improve this Doc View Source SingleFieldSource(String) Declaration public SingleFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source SingleFieldSource(String, FieldCache.ISingleParser) Declaration public SingleFieldSource(string field, FieldCache.ISingleParser parser) Parameters Type Name Description System.String field FieldCache.ISingleParser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.ISingleParser m_parser Field Value Type Description FieldCache.ISingleParser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingularFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingularFunction.html",
    "title": "Class SingularFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingularFunction A function with a single (one) argument. NOTE: This was SingleFunction in Lucene, changed to avoid conusion with operations on the datatype System.Single . Inheritance System.Object ValueSource SingularFunction SimpleSingleFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SingularFunction : ValueSource Constructors | Improve this Doc View Source SingularFunction(ValueSource) Declaration public SingularFunction(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumSingleFunction.html",
    "title": "Class SumSingleFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SumSingleFunction SumSingleFunction returns the sum of its components. NOTE: This was SumFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction SumSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SumSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source SumSingleFunction(ValueSource[]) Declaration public SumSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumTotalTermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumTotalTermFreqValueSource.html",
    "title": "Class SumTotalTermFreqValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SumTotalTermFreqValueSource SumTotalTermFreqValueSource returns the number of tokens. (sum of term freqs across all documents, across all terms). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource SumTotalTermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SumTotalTermFreqValueSource : ValueSource Constructors | Improve this Doc View Source SumTotalTermFreqValueSource(String) Declaration public SumTotalTermFreqValueSource(string indexedField) Parameters Type Name Description System.String indexedField Fields | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TermFreqValueSource.html",
    "title": "Class TermFreqValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermFreqValueSource Function that returns Freq for the supplied term in every document. If the term does not exist in the document, returns 0. If frequencies are omitted, returns 1. Inheritance System.Object ValueSource DocFreqValueSource TermFreqValueSource TFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TermFreqValueSource : DocFreqValueSource Constructors | Improve this Doc View Source TermFreqValueSource(String, String, String, BytesRef) Declaration public TermFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides DocFreqValueSource.Name Methods | 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides DocFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TFValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TFValueSource.html",
    "title": "Class TFValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TFValueSource Function that returns Tf(Single) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DocFreqValueSource TermFreqValueSource TFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TFValueSource : TermFreqValueSource Constructors | Improve this Doc View Source TFValueSource(String, String, String, BytesRef) Declaration public TFValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides TermFreqValueSource.Name Methods | 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides TermFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TotalTermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TotalTermFreqValueSource.html",
    "title": "Class TotalTermFreqValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TotalTermFreqValueSource TotalTermFreqValueSource returns the total term freq (sum of term freqs across all documents). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource TotalTermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TotalTermFreqValueSource : ValueSource Constructors | Improve this Doc View Source TotalTermFreqValueSource(String, String, String, BytesRef) Declaration public TotalTermFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_indexedBytes Declaration protected readonly BytesRef m_indexedBytes Field Value Type Description BytesRef | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String | Improve this Doc View Source m_val Declaration protected readonly string m_val Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.VectorValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.VectorValueSource.html",
    "title": "Class VectorValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VectorValueSource Converts individual ValueSource instances to leverage the FunctionValues *Val functions that work with multiple values, i.e. DoubleVal(Int32, Double[]) Inheritance System.Object ValueSource MultiValueSource VectorValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class VectorValueSource : MultiValueSource Constructors | Improve this Doc View Source VectorValueSource(IList<ValueSource>) Declaration public VectorValueSource(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description System.Collections.Generic.IList < ValueSource > Properties | Improve this Doc View Source Dimension Declaration public override int Dimension { get; } Property Value Type Description System.Int32 Overrides MultiValueSource.Dimension | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source Sources Declaration public virtual IList<ValueSource> Sources { get; } Property Value Type Description System.Collections.Generic.IList < ValueSource > Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSourceScorer.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSourceScorer.html",
    "title": "Class ValueSourceScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ValueSourceScorer Scorer which returns the result of SingleVal(Int32) as the score for a document. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ValueSourceScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class ValueSourceScorer : Scorer Constructors | Improve this Doc View Source ValueSourceScorer(IndexReader, FunctionValues) Declaration protected ValueSourceScorer(IndexReader reader, FunctionValues values) Parameters Type Name Description IndexReader reader FunctionValues values Fields | Improve this Doc View Source m_checkDeletes Declaration protected bool m_checkDeletes Field Value Type Description System.Boolean | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 | Improve this Doc View Source m_reader Declaration protected readonly IndexReader m_reader Field Value Type Description IndexReader | Improve this Doc View Source m_values Declaration protected readonly FunctionValues m_values Field Value Type Description FunctionValues Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source Reader Declaration public virtual IndexReader Reader { get; } Property Value Type Description IndexReader Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source Matches(Int32) Declaration public virtual bool Matches(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source MatchesValue(Int32) Declaration public virtual bool MatchesValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source SetCheckDeletes(Boolean) Declaration public virtual void SetCheckDeletes(bool checkDeletes) Parameters Type Name Description System.Boolean checkDeletes"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.html",
    "title": "Namespace Lucene.Net.Queries | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Queries <!-- 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. --> Filters and Queries that add to core Lucene. Classes BooleanFilter A container Filter that allows Boolean composition of Filter s. Filter s are allocated into one of three logical constructs; SHOULD, MUST NOT, MUST The results Filter BitSet is constructed as follows: SHOULD Filters are OR'd together The resulting Filter is NOT'd with the NOT Filter s The resulting Filter is AND'd with the MUST Filter s BoostingQuery The BoostingQuery class can be used to effectively demote results that match a given query. Unlike the \"NOT\" clause, this still selects documents that contain undesirable terms, but reduces their overall score: Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f); In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to select all matching documents, and the negativeQuery contains the undesirable elements which are simply used to lessen the scores. Documents that match the negativeQuery have their score multiplied by the supplied \"boost\" parameter, so this should be less than 1 to achieve a demoting effect This code was originally made available here: [WWW] http://marc.theaimsgroup.com/?l=lucene-user&m=108058407130459&w=2 and is documented here: http://wiki.apache.org/lucene-java/CommunityContributions ChainedFilter Allows multiple Filter s to be chained. Logical operations such as NOT and XOR are applied between filters. One operation can be used for all filters, or a specific operation can be declared for each filter. Order in which filters are called depends on the position of the filter in the chain. It's probably more efficient to place the most restrictive filters/least computationally-intensive filters first. CommonTermsQuery A query that executes high-frequency terms in a optional sub-query to prevent slow queries due to \"common\" terms like stopwords. This query builds 2 queries off the Add(Term) added terms: low-frequency terms are added to a required boolean clause and high-frequency terms are added to an optional boolean clause. The optional clause is only executed if the required \"low-frequency\" clause matches. Scores produced by this query will be slightly different than plain BooleanQuery scorer mainly due to differences in the Coord(Int32, Int32) number of leaf queries in the required boolean clause. In most cases, high-frequency terms are unlikely to significantly contribute to the document score unless at least one of the low-frequency terms are matched. This query can improve query execution times significantly if applicable. CommonTermsQuery has several advantages over stopword filtering at index or query time since a term can be \"classified\" based on the actual document frequency in the index and can prevent slow queries even across domains without specialized stopword files. Note: if the query only contains high-frequency terms the query is rewritten into a plain conjunction query ie. all high-frequency terms need to match in order to match a document. Collection initializer note: To create and populate a CommonTermsQuery in a single statement, you can use the following example as a guide: var query = new CommonTermsQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; CustomScoreProvider An instance of this subclass should be returned by GetCustomScoreProvider(AtomicReaderContext) , if you want to modify the custom score calculation of a CustomScoreQuery . Since Lucene 2.9, queries operate on each segment of an index separately, so the protected m_context field can be used to resolve doc IDs, as the supplied doc ID is per-segment and without knowledge of the IndexReader you cannot access the document or IFieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 2.9.2 CustomScoreQuery Query that sets document score as a programmatic function of several (sub) scores: the score of its subQuery (any query) (optional) the score of its FunctionQuery (or queries). Subclasses can modify the computation by overriding GetCustomScoreProvider(AtomicReaderContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterClause A Filter that wrapped with an indication of how that filter is used when composed with another filter. (Follows the boolean logic in BooleanClause for composition of queries.) TermFilter A filter that includes documents that match with a specific term. TermsFilter Constructs a filter for docs matching any of the terms added to this class. Unlike a RangeFilter this can be used for filtering on multiple terms that are not necessarily in a sequence. An example might be a collection of primary keys from a database query result or perhaps a choice of \"category\" labels picked by the end user. As a filter, this is much faster than the equivalent query (a BooleanQuery with many \"should\" TermQuery s)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.html",
    "title": "Namespace Lucene.Net.Queries.Mlt | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Mlt <!-- 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. --> Document similarity query generators. Classes MoreLikeThis Generate \"more like this\" similarity queries. Based on this mail: Lucene does let you access the document frequency of terms, with DocFreq(Term) . Term frequencies can be computed by re-tokenizing the text, which, for a single document, is usually fast enough. But looking up the DocFreq(Term) of every term in the document is probably too slow. You can use some heuristics to prune the set of terms, to avoid calling DocFreq(Term) too much, or at all. Since you're trying to maximize a tf*idf score, you're probably most interested in terms with a high tf. Choosing a tf threshold even as low as two or three will radically reduce the number of terms under consideration. Another heuristic is that terms with a high idf (i.e., a low df) tend to be longer. So you could threshold the terms by the number of characters, not selecting anything less than, e.g., six or seven characters. With these sorts of heuristics you can usually find small set of, e.g., ten or fewer terms that do a pretty good job of characterizing a document. It all depends on what you're trying to do. If you're trying to eek out that last percent of precision and recall regardless of computational difficulty so that you can win a TREC competition, then the techniques I mention above are useless. But if you're trying to provide a \"more like this\" button on a search results page that does a decent job and has good performance, such techniques might be useful. An efficient, effective \"more-like-this\" query generator would be a great contribution, if anyone's interested. I'd imagine that it would take a Reader or a String (the document's text), analyzer Analyzer, and return a set of representative terms using heuristics like those above. The frequency and length thresholds could be parameters, etc. Doug Initial Usage This class has lots of options to try to make it efficient and flexible. The simplest possible usage is as follows. The bold fragment is specific to this class. IndexReader ir = ... IndexSearcher is = ... MoreLikeThis mlt = new MoreLikeThis(ir); TextReader target = ... // orig source of doc you want to find similarities to Query query = mlt.Like(target); Hits hits = is.Search(query); // now the usual iteration thru 'hits' - the only thing to watch for is to make sure //you ignore the doc if it matches your 'target' document, as it should be similar to itself Thus you: do your normal, Lucene setup for searching, create a MoreLikeThis, get the text of the doc you want to find similarities to then call one of the Like(TextReader, String) calls to generate a similarity query call the searcher to find the similar docs More Advanced Usage You may want to use the setter for FieldNames so you can examine multiple fields (e.g. body and title) for similarity. Depending on the size of your index and the size and makeup of your documents you may want to call the other set methods to control how the similarity queries are generated: MinTermFreq MinDocFreq MaxDocFreq SetMaxDocFreqPct(Int32) MinWordLen MaxWordLen MaxQueryTerms MaxNumTokensParsed StopWords MoreLikeThisQuery A simple wrapper for MoreLikeThis for use in scenarios where a Query object is required eg in custom QueryParser extensions. At query.Rewrite() time the reader is used to construct the actual MoreLikeThis object and obtain the real Query object."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThis.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThis.html",
    "title": "Class MoreLikeThis | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MoreLikeThis Generate \"more like this\" similarity queries. Based on this mail: Lucene does let you access the document frequency of terms, with DocFreq(Term) . Term frequencies can be computed by re-tokenizing the text, which, for a single document, is usually fast enough. But looking up the DocFreq(Term) of every term in the document is probably too slow. You can use some heuristics to prune the set of terms, to avoid calling DocFreq(Term) too much, or at all. Since you're trying to maximize a tf*idf score, you're probably most interested in terms with a high tf. Choosing a tf threshold even as low as two or three will radically reduce the number of terms under consideration. Another heuristic is that terms with a high idf (i.e., a low df) tend to be longer. So you could threshold the terms by the number of characters, not selecting anything less than, e.g., six or seven characters. With these sorts of heuristics you can usually find small set of, e.g., ten or fewer terms that do a pretty good job of characterizing a document. It all depends on what you're trying to do. If you're trying to eek out that last percent of precision and recall regardless of computational difficulty so that you can win a TREC competition, then the techniques I mention above are useless. But if you're trying to provide a \"more like this\" button on a search results page that does a decent job and has good performance, such techniques might be useful. An efficient, effective \"more-like-this\" query generator would be a great contribution, if anyone's interested. I'd imagine that it would take a Reader or a String (the document's text), analyzer Analyzer, and return a set of representative terms using heuristics like those above. The frequency and length thresholds could be parameters, etc. Doug Initial Usage This class has lots of options to try to make it efficient and flexible. The simplest possible usage is as follows. The bold fragment is specific to this class. IndexReader ir = ... IndexSearcher is = ... MoreLikeThis mlt = new MoreLikeThis(ir); TextReader target = ... // orig source of doc you want to find similarities to Query query = mlt.Like(target); Hits hits = is.Search(query); // now the usual iteration thru 'hits' - the only thing to watch for is to make sure //you ignore the doc if it matches your 'target' document, as it should be similar to itself Thus you: do your normal, Lucene setup for searching, create a MoreLikeThis, get the text of the doc you want to find similarities to then call one of the Like(TextReader, String) calls to generate a similarity query call the searcher to find the similar docs More Advanced Usage You may want to use the setter for FieldNames so you can examine multiple fields (e.g. body and title) for similarity. Depending on the size of your index and the size and makeup of your documents you may want to call the other set methods to control how the similarity queries are generated: MinTermFreq MinDocFreq MaxDocFreq SetMaxDocFreqPct(Int32) MinWordLen MaxWordLen MaxQueryTerms MaxNumTokensParsed StopWords Inheritance System.Object MoreLikeThis 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.Queries.Mlt Assembly : Lucene.Net.Queries.dll Syntax public sealed class MoreLikeThis Remarks Changes: Mark Harwood 29/02/04 Some bugfixing, some refactoring, some optimisation. bugfix: retrieveTerms(int docNum) was not working for indexes without a termvector -added missing code bugfix: No significant terms being created for fields with a termvector - because was only counting one occurrence per term/field pair in calculations(ie not including frequency info from TermVector) refactor: moved common code into isNoiseWord() optimise: when no termvector support available - used maxNumTermsParsed to limit amount of tokenization Constructors | Improve this Doc View Source MoreLikeThis(IndexReader) Constructor requiring an IndexReader . Declaration public MoreLikeThis(IndexReader ir) Parameters Type Name Description IndexReader ir | Improve this Doc View Source MoreLikeThis(IndexReader, TFIDFSimilarity) Declaration public MoreLikeThis(IndexReader ir, TFIDFSimilarity sim) Parameters Type Name Description IndexReader ir TFIDFSimilarity sim Fields | Improve this Doc View Source DEFAULT_BOOST Boost terms in query based on score. Declaration public static readonly bool DEFAULT_BOOST Field Value Type Description System.Boolean See Also ApplyBoost | Improve this Doc View Source DEFAULT_FIELD_NAMES Default field names. Null is used to specify that the field names should be looked up at runtime from the provided reader. Declaration public static readonly string[] DEFAULT_FIELD_NAMES Field Value Type Description System.String [] | Improve this Doc View Source DEFAULT_MAX_DOC_FREQ Ignore words which occur in more than this many docs. Declaration public static readonly int DEFAULT_MAX_DOC_FREQ Field Value Type Description System.Int32 See Also MaxDocFreq SetMaxDocFreqPct(Int32) | Improve this Doc View Source DEFAULT_MAX_NUM_TOKENS_PARSED Default maximum number of tokens to parse in each example doc field that is not stored with TermVector support. Declaration public static readonly int DEFAULT_MAX_NUM_TOKENS_PARSED Field Value Type Description System.Int32 See Also MaxNumTokensParsed | Improve this Doc View Source DEFAULT_MAX_QUERY_TERMS Return a Query with no more than this many terms. Declaration public static readonly int DEFAULT_MAX_QUERY_TERMS Field Value Type Description System.Int32 See Also MaxClauseCount MaxQueryTerms | Improve this Doc View Source DEFAULT_MAX_WORD_LENGTH Ignore words greater than this length or if 0 then this has no effect. Declaration public static readonly int DEFAULT_MAX_WORD_LENGTH Field Value Type Description System.Int32 See Also MaxWordLen | Improve this Doc View Source DEFAULT_MIN_DOC_FREQ Ignore words which do not occur in at least this many docs. Declaration public static readonly int DEFAULT_MIN_DOC_FREQ Field Value Type Description System.Int32 See Also MinDocFreq | Improve this Doc View Source DEFAULT_MIN_TERM_FREQ Ignore terms with less than this frequency in the source doc. Declaration public static readonly int DEFAULT_MIN_TERM_FREQ Field Value Type Description System.Int32 See Also MinTermFreq | Improve this Doc View Source DEFAULT_MIN_WORD_LENGTH Ignore words less than this length or if 0 then this has no effect. Declaration public static readonly int DEFAULT_MIN_WORD_LENGTH Field Value Type Description System.Int32 See Also MinWordLen | Improve this Doc View Source DEFAULT_STOP_WORDS Default set of stopwords. If null means to allow stop words. Declaration public static readonly ISet<string> DEFAULT_STOP_WORDS Field Value Type Description System.Collections.Generic.ISet < System.String > See Also StopWords Properties | Improve this Doc View Source Analyzer Gets or Sets an analyzer that will be used to parse source doc with. The default analyzer is not set. An analyzer is not required for generating a query with the Like(Int32) method, all other 'like' methods require an analyzer. Declaration public Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source ApplyBoost Gets or Sets whether to boost terms in query based on \"score\" or not. The default is DEFAULT_BOOST . Declaration public bool ApplyBoost { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source BoostFactor Gets or Sets the boost factor used when boosting terms Declaration public float BoostFactor { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FieldNames Gets or Sets the field names that will be used when generating the 'More Like This' query. The default field names that will be used is DEFAULT_FIELD_NAMES . Set this to null for the field names to be determined at runtime from the IndexReader provided in the constructor. Declaration public string[] FieldNames { get; set; } Property Value Type Description System.String [] | Improve this Doc View Source MaxDocFreq Gets or Sets the maximum frequency in which words may still appear. Words that appear in more than this many docs will be ignored. The default frequency is DEFAULT_MAX_DOC_FREQ . Declaration public int MaxDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxNumTokensParsed Declaration public int MaxNumTokensParsed { get; set; } Property Value Type Description System.Int32 Gets or Sets the maximum number of tokens to parse in each example doc field that is not stored with TermVector support See Also DEFAULT_MAX_NUM_TOKENS_PARSED | Improve this Doc View Source MaxQueryTerms Gets or Sets the maximum number of query terms that will be included in any generated query. The default is DEFAULT_MAX_QUERY_TERMS . Declaration public int MaxQueryTerms { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxWordLen Gets or Sets the maximum word length above which words will be ignored. Set this to 0 for no maximum word length. The default is DEFAULT_MAX_WORD_LENGTH . Declaration public int MaxWordLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinDocFreq Gets or Sets the frequency at which words will be ignored which do not occur in at least this many docs. The default frequency is DEFAULT_MIN_DOC_FREQ . Declaration public int MinDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinTermFreq Gets or Sets the frequency below which terms will be ignored in the source doc. The default frequency is the DEFAULT_MIN_TERM_FREQ . Declaration public int MinTermFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinWordLen Gets or Sets the minimum word length below which words will be ignored. Set this to 0 for no minimum word length. The default is DEFAULT_MIN_WORD_LENGTH . Declaration public int MinWordLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity For idf() calculations. Declaration public TFIDFSimilarity Similarity { get; set; } Property Value Type Description TFIDFSimilarity | Improve this Doc View Source StopWords Gets or Sets the set of stopwords. Any word in this set is considered \"uninteresting\" and ignored. Even if your Analyzer allows stopwords, you might want to tell the MoreLikeThis code to ignore them, as for the purposes of document similarity it seems reasonable to assume that \"a stop word is never interesting\". Declaration public ISet<string> StopWords { get; set; } Property Value Type Description System.Collections.Generic.ISet < System.String > Methods | Improve this Doc View Source DescribeParams() Describe the parameters that control how the \"more like this\" query is formed. Declaration public string DescribeParams() Returns Type Description System.String | Improve this Doc View Source Like(Int32) Return a query that will return docs like the passed lucene document ID. Declaration public Query Like(int docNum) Parameters Type Name Description System.Int32 docNum the documentID of the lucene doc to generate the 'More Like This\" query for. Returns Type Description Query a query that will return docs like the passed lucene document ID. | Improve this Doc View Source Like(TextReader, String) Return a query that will return docs like the passed System.IO.TextReader . Declaration public Query Like(TextReader r, string fieldName) Parameters Type Name Description System.IO.TextReader r System.String fieldName Returns Type Description Query a query that will return docs like the passed System.IO.TextReader . | Improve this Doc View Source RetrieveInterestingTerms(Int32) Declaration public string[] RetrieveInterestingTerms(int docNum) Parameters Type Name Description System.Int32 docNum Returns Type Description System.String [] See Also RetrieveInterestingTerms(TextReader, String) | Improve this Doc View Source RetrieveInterestingTerms(TextReader, String) Convenience routine to make it easy to return the most interesting words in a document. More advanced users will call RetrieveTerms(TextReader, String) directly. Declaration public string[] RetrieveInterestingTerms(TextReader r, string fieldName) Parameters Type Name Description System.IO.TextReader r the source document System.String fieldName field passed to analyzer to use when analyzing the content Returns Type Description System.String [] the most interesting words in the document See Also RetrieveTerms(TextReader, String) MaxQueryTerms | Improve this Doc View Source RetrieveTerms(Int32) Find words for a more-like-this query former. Declaration public PriorityQueue<object[]> RetrieveTerms(int docNum) Parameters Type Name Description System.Int32 docNum the id of the lucene document from which to find terms Returns Type Description PriorityQueue < System.Object []> Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RetrieveTerms(TextReader, String) Find words for a more-like-this query former. The result is a priority queue of arrays with one entry for every word in the document. Each array has 6 elements. The elements are: The word ( System.String ) The top field that this word comes from ( System.String ) The score for this word ( System.Single ) The IDF value ( System.Single ) The frequency of this word in the index ( System.Int32 ) The frequency of this word in the source document ( System.Int32 ) This is a somewhat \"advanced\" routine, and in general only the 1st entry in the array is of interest. This method is exposed so that you can identify the \"interesting words\" in a document. For an easier method to call see RetrieveInterestingTerms(TextReader, String) . Declaration public PriorityQueue<object[]> RetrieveTerms(TextReader r, string fieldName) Parameters Type Name Description System.IO.TextReader r the reader that has the content of the document System.String fieldName field passed to the analyzer to use when analyzing the content Returns Type Description PriorityQueue < System.Object []> the most interesting words in the document ordered by score, with the highest scoring, or best entry, first Exceptions Type Condition System.IO.IOException See Also RetrieveInterestingTerms(TextReader, String) | Improve this Doc View Source SetMaxDocFreqPct(Int32) Set the maximum percentage in which words may still appear. Words that appear in more than this many percent of all docs will be ignored. Declaration public void SetMaxDocFreqPct(int maxPercentage) Parameters Type Name Description System.Int32 maxPercentage the maximum percentage of documents (0-100) that a term may appear in to be still considered relevant"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThisQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThisQuery.html",
    "title": "Class MoreLikeThisQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MoreLikeThisQuery A simple wrapper for MoreLikeThis for use in scenarios where a Query object is required eg in custom QueryParser extensions. At query.Rewrite() time the reader is used to construct the actual MoreLikeThis object and obtain the real Query object. Inheritance System.Object Query MoreLikeThisQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Mlt Assembly : Lucene.Net.Queries.dll Syntax public class MoreLikeThisQuery : Query Constructors | Improve this Doc View Source MoreLikeThisQuery(String, String[], Analyzer, String) Declaration public MoreLikeThisQuery(string likeText, string[] moreLikeFields, Analyzer analyzer, string fieldName) Parameters Type Name Description System.String likeText System.String [] moreLikeFields fields used for similarity measure Analyzer analyzer System.String fieldName Properties | Improve this Doc View Source Analyzer Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source LikeText Declaration public virtual string LikeText { get; set; } Property Value Type Description System.String | Improve this Doc View Source MaxQueryTerms Declaration public virtual int MaxQueryTerms { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinDocFreq Declaration public virtual int MinDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinTermFrequency Declaration public virtual int MinTermFrequency { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MoreLikeFields Declaration public virtual string[] MoreLikeFields { get; set; } Property Value Type Description System.String [] | Improve this Doc View Source PercentTermsToMatch Declaration public virtual float PercentTermsToMatch { get; set; } Property Value Type Description System.Single | Improve this Doc View Source StopWords Declaration public virtual ISet<string> StopWords { get; set; } Property Value Type Description System.Collections.Generic.ISet < System.String > Methods | 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 Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) 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)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.TermFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.TermFilter.html",
    "title": "Class TermFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermFilter A filter that includes documents that match with a specific term. Inheritance System.Object Filter TermFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class TermFilter : Filter Constructors | Improve this Doc View Source TermFilter(Term) Declaration public TermFilter(Term term) Parameters Type Name Description Term term The term documents need to have in order to be a match for this filter. Properties | Improve this Doc View Source Term Gets the term this filter includes documents with. Declaration public Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | 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()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.TermsFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.TermsFilter.html",
    "title": "Class TermsFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsFilter Constructs a filter for docs matching any of the terms added to this class. Unlike a RangeFilter this can be used for filtering on multiple terms that are not necessarily in a sequence. An example might be a collection of primary keys from a database query result or perhaps a choice of \"category\" labels picked by the end user. As a filter, this is much faster than the equivalent query (a BooleanQuery with many \"should\" TermQuery s) Inheritance System.Object Filter TermsFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class TermsFilter : Filter Constructors | Improve this Doc View Source TermsFilter(Term[]) Creates a new TermsFilter from the given array. The array can contain duplicate terms and multiple fields. Declaration public TermsFilter(params Term[] terms) Parameters Type Name Description Term [] terms | Improve this Doc View Source TermsFilter(IList<Term>) Creates a new TermsFilter from the given list. The list can contain duplicate terms and multiple fields. Declaration public TermsFilter(IList<Term> terms) Parameters Type Name Description System.Collections.Generic.IList < Term > terms | Improve this Doc View Source TermsFilter(String, BytesRef[]) Creates a new TermsFilter from the given BytesRef array for a single field. Declaration public TermsFilter(string field, params BytesRef[] terms) Parameters Type Name Description System.String field BytesRef [] terms | Improve this Doc View Source TermsFilter(String, IList<BytesRef>) Creates a new TermsFilter from the given BytesRef list for a single field. Declaration public TermsFilter(string field, IList<BytesRef> terms) Parameters Type Name Description System.String field System.Collections.Generic.IList < BytesRef > terms Methods | 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 GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | 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()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.AnalyzingQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.AnalyzingQueryParser.html",
    "title": "Class AnalyzingQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzingQueryParser Overrides Lucene's default QueryParser so that Fuzzy-, Prefix-, Range-, and WildcardQuerys are also passed through the given analyzer, but wildcard characters * and ? don't get removed from the search terms. Warning: This class should only be used with analyzers that do not use stopwords or that add tokens. Also, several stemming analyzers are inappropriate: for example, GermanAnalyzer will turn Häuser into hau , but H?user will become h?user when using this parser and thus no match would be found (i.e. using this parser will be no improvement over QueryParser in such cases). Inheritance System.Object QueryBuilder QueryParserBase QueryParser AnalyzingQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() 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.QueryParsers.Analyzing Assembly : Lucene.Net.QueryParser.dll Syntax public class AnalyzingQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source AnalyzingQueryParser(LuceneVersion, String, Analyzer) Declaration public AnalyzingQueryParser(LuceneVersion matchVersion, string field, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion System.String field Analyzer analyzer Methods | Improve this Doc View Source AnalyzeSingleChunk(String, String, String) Returns the analyzed form for the given chunk. If the analyzer produces more than one output token from the given chunk, a ParseException is thrown. Declaration protected virtual string AnalyzeSingleChunk(string field, string termStr, string chunk) Parameters Type Name Description System.String field The target field System.String termStr The full term from which the given chunk is excerpted System.String chunk The portion of the given termStr to be analyzed Returns Type Description System.String The result of analyzing the given chunk Exceptions Type Condition ParseException ParseException when analysis returns other than one output token | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Called when parser parses an input term that has the fuzzy suffix (~) appended. Depending on analyzer and settings, a fuzzy term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query System.Single minSimilarity Returns Type Description Query Resulting Query built for the term Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetPrefixQuery(String, String) Called when parser parses an input term that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on analyzer and settings, a prefix term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query ( without trailing '*' character!) Returns Type Description Query Resulting Query built for the term Overrides QueryParserBase.GetPrefixQuery(String, String) | Improve this Doc View Source GetWildcardQuery(String, String) Called when parser parses an input term that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on analyzer and settings, a prefix term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query ( without trailing '*' character!) Returns Type Description Query Resulting Query built for the term Overrides QueryParserBase.GetWildcardQuery(String, String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.html",
    "title": "Namespace Lucene.Net.QueryParsers.Analyzing | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Analyzing <!-- 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. --> QueryParser that passes Fuzzy-, Prefix-, Range-, and WildcardQuerys through the given analyzer. Classes AnalyzingQueryParser Overrides Lucene's default QueryParser so that Fuzzy-, Prefix-, Range-, and WildcardQuerys are also passed through the given analyzer, but wildcard characters * and ? don't get removed from the search terms. Warning: This class should only be used with analyzers that do not use stopwords or that add tokens. Also, several stemming analyzers are inappropriate: for example, GermanAnalyzer will turn Häuser into hau , but H?user will become h?user when using this parser and thus no match would be found (i.e. using this parser will be no improvement over QueryParser in such cases)."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. Inheritance System.Object FastCharStream Implements ICharStream 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : ICharStream Constructors | Improve this Doc View Source FastCharStream(TextReader) Constructs from a System.IO.TextReader . Declaration public FastCharStream(TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Declaration public string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.html",
    "title": "Namespace Lucene.Net.QueryParsers.Classic | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Classic <!-- 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. --> A simple query parser implemented with JavaCC. Note that JavaCC defines lots of public classes, methods and fields that do not need to be public. These clutter the documentation. Sorry. Note that because JavaCC defines a class named Token , org.apache.lucene.analysis.Token must always be fully qualified in source code in this package. NOTE : Lucene.Net.QueryParsers.Flexible.Standard has an alternative queryparser that matches the syntax of this one, but is more modular, enabling substantial customization to how a query is created. Query Parser Syntax Overview Terms Fields Term Modifiers Wildcard Searches Regular expression Searches Fuzzy Searches Proximity Searches Range Searches Boosting a Term Boolean Operators OR AND + NOT - Grouping Field Grouping Escaping Special Characters Overview Although Lucene provides the ability to create your own queries through its API, it also provides a rich query language through the Query Parser, a lexer which interprets a string into a Lucene Query using JavaCC. Generally, the query parser syntax may change from release to release. This page describes the syntax as of the current release. If you are using a different version of Lucene, please consult the copy of docs/queryparsersyntax.html that was distributed with the version you are using. Before choosing to use the provided Query Parser, please consider the following: 1. If you are programmatically generating a query string and then parsing it with the query parser then you should seriously consider building your queries directly with the query API. In other words, the query parser is designed for human-entered text, not for program-generated text. 2. Untokenized fields are best added directly to queries, and not through the query parser. If a field's values are generated programmatically by the application, then so should query clauses for this field. An analyzer, which the query parser uses, is designed to convert human-entered text to terms. Program-generated values, like dates, keywords, etc., should be consistently program-generated. 3. In a query form, fields which are general text should use the query parser. All others, such as date ranges, keywords, etc. are better added directly through the query API. A field with a limit set of values, that can be specified with a pull-down menu should not be added to a query string which is subsequently parsed, but rather added as a TermQuery clause. Terms A query is broken up into terms and operators. There are two types of terms: Single Terms and Phrases. A Single Term is a single word such as \"test\" or \"hello\". A Phrase is a group of words surrounded by double quotes such as \"hello dolly\". Multiple terms can be combined together with Boolean operators to form a more complex query (see below). Note: The analyzer used to create the index will be used on the terms and phrases in the query string. So it is important to choose an analyzer that will not interfere with the terms used in the query string. Fields Lucene supports fielded data. When performing a search you can either specify a field, or use the default field. The field names and default field is implementation specific. You can search any field by typing the field name followed by a colon \":\" and then the term you are looking for. As an example, let's assume a Lucene index contains two fields, title and text and text is the default field. If you want to find the document entitled \"The Right Way\" which contains the text \"don't go this way\", you can enter: title:\"The Right Way\" AND text:go or title:\"The Right Way\" AND go Since text is the default field, the field indicator is not required. Note: The field is only valid for the term that it directly precedes, so the query title:The Right Way Will only find \"The\" in the title field. It will find \"Right\" and \"Way\" in the default field (in this case the text field). Term Modifiers Lucene supports modifying query terms to provide a wide range of searching options. Wildcard Searches Lucene supports single and multiple character wildcard searches within single terms (not within phrase queries). To perform a single character wildcard search use the \"?\" symbol. To perform a multiple character wildcard search use the \"*\" symbol. The single character wildcard search looks for terms that match that with the single character replaced. For example, to search for \"text\" or \"test\" you can use the search: te?t Multiple character wildcard searches looks for 0 or more characters. For example, to search for test, tests or tester, you can use the search: test* You can also use the wildcard searches in the middle of a term. te*t Note: You cannot use a * or ? symbol as the first character of a search. Regular Expression Searches Lucene supports regular expression searches matching a pattern between forward slashes \"/\". The syntax may change across releases, but the current supported syntax is documented in the RegExp class. For example to find documents containing \"moat\" or \"boat\": /[mb]oat/ Fuzzy Searches Lucene supports fuzzy searches based on Damerau-Levenshtein Distance. To do a fuzzy search use the tilde, \"~\", symbol at the end of a Single word Term. For example to search for a term similar in spelling to \"roam\" use the fuzzy search: roam~ This search will find terms like foam and roams. An additional (optional) parameter can specify the maximum number of edits allowed. The value is between 0 and 2, For example: roam~1 The default that is used if the parameter is not given is 2 edit distances. Previously, a floating point value was allowed here. This syntax is considered deprecated and will be removed in Lucene 5.0 Proximity Searches Lucene supports finding words are a within a specific distance away. To do a proximity search use the tilde, \"~\", symbol at the end of a Phrase. For example to search for a \"apache\" and \"jakarta\" within 10 words of each other in a document use the search: \"jakarta apache\"~10 Range Searches Range Queries allow one to match documents whose field(s) values are between the lower and upper bound specified by the Range Query. Range Queries can be inclusive or exclusive of the upper and lower bounds. Sorting is done lexicographically. mod_date:[20020101 TO 20030101] This will find documents whose mod_date fields have values between 20020101 and 20030101, inclusive. Note that Range Queries are not reserved for date fields. You could also use range queries with non-date fields: title:{Aida TO Carmen} This will find all documents whose titles are between Aida and Carmen, but not including Aida and Carmen. Inclusive range queries are denoted by square brackets. Exclusive range queries are denoted by curly brackets. Boosting a Term Lucene provides the relevance level of matching documents based on the terms found. To boost a term use the caret, \"^\", symbol with a boost factor (a number) at the end of the term you are searching. The higher the boost factor, the more relevant the term will be. Boosting allows you to control the relevance of a document by boosting its term. For example, if you are searching for jakarta apache and you want the term \"jakarta\" to be more relevant boost it using the ^ symbol along with the boost factor next to the term. You would type: jakarta^4 apache This will make documents with the term jakarta appear more relevant. You can also boost Phrase Terms as in the example: \"jakarta apache\"^4 \"Apache Lucene\" By default, the boost factor is 1. Although the boost factor must be positive, it can be less than 1 (e.g. 0.2) Boolean Operators Boolean operators allow terms to be combined through logic operators. Lucene supports AND, \"+\", OR, NOT and \"-\" as Boolean operators(Note: Boolean operators must be ALL CAPS). OR The OR operator is the default conjunction operator. This means that if there is no Boolean operator between two terms, the OR operator is used. The OR operator links two terms and finds a matching document if either of the terms exist in a document. This is equivalent to a union using sets. The symbol || can be used in place of the word OR. To search for documents that contain either \"jakarta apache\" or just \"jakarta\" use the query: \"jakarta apache\" jakarta or \"jakarta apache\" OR jakarta AND The AND operator matches documents where both terms exist anywhere in the text of a single document. This is equivalent to an intersection using sets. The symbol && can be used in place of the word AND. To search for documents that contain \"jakarta apache\" and \"Apache Lucene\" use the query: \"jakarta apache\" AND \"Apache Lucene\" + The \"+\" or required operator requires that the term after the \"+\" symbol exist somewhere in a the field of a single document. To search for documents that must contain \"jakarta\" and may contain \"lucene\" use the query: +jakarta lucene NOT The NOT operator excludes documents that contain the term after NOT. This is equivalent to a difference using sets. The symbol ! can be used in place of the word NOT. To search for documents that contain \"jakarta apache\" but not \"Apache Lucene\" use the query: \"jakarta apache\" NOT \"Apache Lucene\" Note: The NOT operator cannot be used with just one term. For example, the following search will return no results: NOT \"jakarta apache\" - The \"-\" or prohibit operator excludes documents that contain the term after the \"-\" symbol. To search for documents that contain \"jakarta apache\" but not \"Apache Lucene\" use the query: \"jakarta apache\" -\"Apache Lucene\" Grouping Lucene supports using parentheses to group clauses to form sub queries. This can be very useful if you want to control the boolean logic for a query. To search for either \"jakarta\" or \"apache\" and \"website\" use the query: (jakarta OR apache) AND website This eliminates any confusion and makes sure you that website must exist and either term jakarta or apache may exist. Field Grouping Lucene supports using parentheses to group multiple clauses to a single field. To search for a title that contains both the word \"return\" and the phrase \"pink panther\" use the query: title:(+return +\"pink panther\") Escaping Special Characters Lucene supports escaping special characters that are part of the query syntax. The current list special characters are && || ! ( ) { } [ ] ^ \" ~ * ? : \\ / To escape these character use the \\ before the character. For example to search for (1+1):2 use the query: (1+1):2 Classes FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. LexicalToken MultiFieldQueryParser A QueryParser which constructs queries to search multiple fields. ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. QueryParser This class is generated by JavaCC. The most important method is Parse(String) . The syntax for query strings is as follows: A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation . In TermRangeQuery s, QueryParser tries to detect date values, e.g. date:[6/1/2005 TO 6/4/2005] produces a range query that searches for \"date\" fields between 2005-06-01 and 2005-06-04. Note that the format of the accepted input depends on the System.Globalization.CultureInfo . A DateTools.Resolution has to be set, if you want to use DateTools for date conversion. The date resolution that shall be used for RangeQueries can be set using SetDateResolution(DateTools.Resolution) or SetDateResolution(String, DateTools.Resolution) . The former sets the default date resolution for all fields, whereas the latter can be used to set field specific date resolutions. Field specific date resolutions take, if set, precedence over the default date resolution. If you don't use DateTools in your index, you can create your own query parser that inherits QueryParser and overwrites GetRangeQuery(String, String, String, Boolean, Boolean) to use a different method for date conversion. Note that QueryParser is not thread-safe. NOTE : there is a new QueryParser in contrib, which matches the same syntax as this class, but is more modular, enabling substantial customization to how a query is created. NOTE : You must specify the required LuceneVersion compatibility when creating QueryParser: As of 3.1, AutoGeneratePhraseQueries is false by default. QueryParserBase This class is overridden by QueryParser . QueryParserBase.MethodRemovedUseAnother Do not catch this exception in your code, it means you are using methods that you should no longer use. QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() QueryParserTokenManager Token Manager. RegexpToken Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Enums Operator The default operator for parsing queries. Use DefaultOperator to change it."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Returns the column position of the character last read. Declaration [Obsolete] int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Returns the line number of the character last read. Declaration [Obsolete] int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = Image; return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any System.IO.IOException . Declaration char ReadChar() Returns Type Description System.Char"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = 2 Field Value Type Description System.Int32 | Improve this Doc View Source Range Lexical state. Declaration public const int Range = 1 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.MultiFieldQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.MultiFieldQueryParser.html",
    "title": "Class MultiFieldQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiFieldQueryParser A QueryParser which constructs queries to search multiple fields. Inheritance System.Object QueryBuilder QueryParserBase QueryParser MultiFieldQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiFieldQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source MultiFieldQueryParser(LuceneVersion, String[], Analyzer) Creates a MultiFieldQueryParser. It will, when Parse(String) is called, construct a query like this (assuming the query consists of two terms and you specify the two fields title and body ): (title:term1 body:term1) (title:term2 body:term2) When DefaultOperator is set to AND_OPERATOR , the result will be: +(title:term1 body:term1) +(title:term2 body:term2) In other words, all the query's terms must appear, but it doesn't matter in what fields they appear. Declaration public MultiFieldQueryParser(LuceneVersion matchVersion, string[] fields, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion System.String [] fields Analyzer analyzer | Improve this Doc View Source MultiFieldQueryParser(LuceneVersion, String[], Analyzer, IDictionary<String, Single>) Creates a MultiFieldQueryParser . Allows passing of a map with term to Boost, and the boost to apply to each term. It will, when Parse(String) is called, construct a query like this (assuming the query consists of two terms and you specify the two fields title and body ): (title:term1 body:term1) (title:term2 body:term2) When DefaultOperator is set to AND_OPERATOR , the result will be: +(title:term1 body:term1) +(title:term2 body:term2) When you pass a boost (title=>5 body=>10) you can get +(title:term1^5.0 body:term1^10.0) +(title:term2^5.0 body:term2^10.0) In other words, all the query's terms must appear, but it doesn't matter in what fields they appear. Declaration public MultiFieldQueryParser(LuceneVersion matchVersion, string[] fields, Analyzer analyzer, IDictionary<string, float> boosts) Parameters Type Name Description LuceneVersion matchVersion System.String [] fields Analyzer analyzer System.Collections.Generic.IDictionary < System.String , System.Single > boosts Fields | Improve this Doc View Source m_boosts Declaration protected IDictionary<string, float> m_boosts Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Single > | Improve this Doc View Source m_fields Declaration protected string[] m_fields Field Value Type Description System.String [] Methods | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected override Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Boolean) | Improve this Doc View Source GetFieldQuery(String, String, Int32) Declaration protected override Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Int32) | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field System.String termStr System.Single minSimilarity Returns Type Description Query Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetPrefixQuery(String, String) Declaration protected override Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetPrefixQuery(String, String) | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source GetRegexpQuery(String, String) Declaration protected override Query GetRegexpQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetRegexpQuery(String, String) | Improve this Doc View Source GetWildcardQuery(String, String) Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetWildcardQuery(String, String) | Improve this Doc View Source Parse(LuceneVersion, String, String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(\"query\", fields, flags, analyzer); The code above would construct a query: (filename:query) +(contents:query) -(description:query) Declaration public static Query Parse(LuceneVersion matchVersion, string query, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String query Query string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails System.ArgumentException if the length of the fields array differs from the length of the flags array | Improve this Doc View Source Parse(LuceneVersion, String[], String[], Analyzer) Parses a query which searches on the fields specified. If x fields are specified, this effectively constructs: (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx) Declaration public static Query Parse(LuceneVersion matchVersion, string[] queries, string[] fields, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String [] queries Queries strings to parse System.String [] fields Fields to search on Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails System.ArgumentException if the length of the queries array differs from the length of the fields array | Improve this Doc View Source Parse(LuceneVersion, String[], String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] query = {\"query1\", \"query2\", \"query3\"}; string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(query, fields, flags, analyzer); The code above would construct a query: (filename:query1) +(contents:query2) -(description:query3) Declaration public static Query Parse(LuceneVersion matchVersion, string[] queries, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String [] queries Queries string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails System.ArgumentException if the length of the queries, fields, and flags array differ Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Operator.html",
    "title": "Enum Operator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Operator The default operator for parsing queries. Use DefaultOperator to change it. Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public enum Operator Fields Name Description AND OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object System.Exception ParseException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : Exception, ISerializable Constructors | Improve this Doc View Source ParseException() Declaration public ParseException() | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method GenerateParseException() in the generated parser. Calling this constructor generates a new object of this type with the fields currentToken , expectedTokenSequences , and tokenImage set. Declaration public ParseException(Token currentToken, int[][] expectedTokenSequences, string[] tokenImage) Parameters Type Name Description Token currentToken System.Int32 [][] expectedTokenSequences System.String [] tokenImage | Improve this Doc View Source ParseException(String) Declaration public ParseException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParseException(String, Exception) Declaration public ParseException(string message, Exception innerException) Parameters Type Name Description System.String message System.Exception innerException Fields | Improve this Doc View Source eol The end of line string for this machine. Declaration protected static string eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token following this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String [] Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParser.html",
    "title": "Class QueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParser This class is generated by JavaCC. The most important method is Parse(String) . The syntax for query strings is as follows: A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation . In TermRangeQuery s, QueryParser tries to detect date values, e.g. date:[6/1/2005 TO 6/4/2005] produces a range query that searches for \"date\" fields between 2005-06-01 and 2005-06-04. Note that the format of the accepted input depends on the System.Globalization.CultureInfo . A DateTools.Resolution has to be set, if you want to use DateTools for date conversion. The date resolution that shall be used for RangeQueries can be set using SetDateResolution(DateTools.Resolution) or SetDateResolution(String, DateTools.Resolution) . The former sets the default date resolution for all fields, whereas the latter can be used to set field specific date resolutions. Field specific date resolutions take, if set, precedence over the default date resolution. If you don't use DateTools in your index, you can create your own query parser that inherits QueryParser and overwrites GetRangeQuery(String, String, String, Boolean, Boolean) to use a different method for date conversion. Note that QueryParser is not thread-safe. NOTE : there is a new QueryParser in contrib, which matches the same syntax as this class, but is more modular, enabling substantial customization to how a query is created. NOTE : You must specify the required LuceneVersion compatibility when creating QueryParser: As of 3.1, AutoGeneratePhraseQueries is false by default. Inheritance System.Object QueryBuilder QueryParserBase QueryParser AnalyzingQueryParser MultiFieldQueryParser ComplexPhraseQueryParser ExtendableQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetWildcardQuery(String, String) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.GetFuzzyQuery(String, String, Single) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParser : QueryParserBase, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source QueryParser(ICharStream) Constructor with user supplied ICharStream . Declaration protected QueryParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParser(QueryParserTokenManager) Constructor with generated Token Manager. Declaration protected QueryParser(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source QueryParser(LuceneVersion, String, Analyzer) Constructs a query parser. Declaration public QueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match. System.String f the default field for query terms. Analyzer a used to find terms in the query text. Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public QueryParserTokenManager TokenSource { get; set; } Property Value Type Description QueryParserTokenManager Methods | Improve this Doc View Source Clause(String) Declaration public Query Clause(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source Conjunction() Declaration public int Conjunction() Returns Type Description System.Int32 | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source Modifiers() Declaration public int Modifiers() Returns Type Description System.Int32 | Improve this Doc View Source Query(String) Declaration public Query Query(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public override void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream Overrides QueryParserBase.ReInit(ICharStream) | Improve this Doc View Source ReInit(QueryParserTokenManager) Reinitialize. Declaration public virtual void ReInit(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source Term(String) Declaration public Query Term(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source TopLevelQuery(String) Declaration public override sealed Query TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description Query Overrides QueryParserBase.TopLevelQuery(String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.html",
    "title": "Class QueryParserBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserBase This class is overridden by QueryParser . Inheritance System.Object QueryBuilder QueryParserBase QueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryParserBase : QueryBuilder, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source QueryParserBase() So the generated QueryParser(CharStream) won't error out Declaration protected QueryParserBase() Fields | Improve this Doc View Source AND_OPERATOR Alternative form of AND Declaration public const Operator AND_OPERATOR = Operator.AND Field Value Type Description Operator | Improve this Doc View Source CONJ_AND Declaration protected const int CONJ_AND = 1 Field Value Type Description System.Int32 | Improve this Doc View Source CONJ_NONE Declaration protected const int CONJ_NONE = 0 Field Value Type Description System.Int32 | Improve this Doc View Source CONJ_OR Declaration protected const int CONJ_OR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source m_field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source MOD_NONE Declaration protected const int MOD_NONE = 0 Field Value Type Description System.Int32 | Improve this Doc View Source MOD_NOT Declaration protected const int MOD_NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source MOD_REQ Declaration protected const int MOD_REQ = 11 Field Value Type Description System.Int32 | Improve this Doc View Source OR_OPERATOR Alternative form of OR Declaration public const Operator OR_OPERATOR = Operator.OR Field Value Type Description Operator Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery. Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AnalyzeRangeTerms Get or Set whether or not to analyze range terms when constructing TermRangeQuery s. For example, setting this to true can enable analyzing terms into collation keys for locale-sensitive TermRangeQuery . Declaration public virtual bool AnalyzeRangeTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AutoGeneratePhraseQueries Set to true if phrase queries will be automatically generated when the analyzer returns more than one term from whitespace delimited text. NOTE: this behavior may not be suitable for all languages. Set to false if phrase queries should only be generated when surrounded by double quotes. Declaration public bool AutoGeneratePhraseQueries { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultOperator Gets or Sets the boolean operator of the QueryParser. In default mode ( OR_OPERATOR ) terms without any modifiers are considered optional: for example capital of Hungary is equal to capital OR of OR Hungary . In AND_OPERATOR mode terms are considered to be in conjunction: the above mentioned query is parsed as capital AND of AND Hungary Declaration public virtual Operator DefaultOperator { get; set; } Property Value Type Description Operator | Improve this Doc View Source Field Returns the default field. Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FuzzyMinSim Get or Set the minimum similarity for fuzzy queries. Default is 2f. Declaration public virtual float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Get or Set the prefix length for fuzzy queries. Default is 0. Declaration public virtual int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Get or Set locale used by date range parsing, lowercasing, and other locale-sensitive operations. By default, the culture is null , which indicates to read the culture on the fly from System.Globalization.CultureInfo.CurrentCulture . This ensures if you change the culture on the current thread, QueryParser will utilize it. You can also explicitly set a culture. Setting the culture to null will restore the default behavior if you have explicitly set a culture. Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically lower-cased or not. Default is true . Declaration public virtual bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default QueryParser uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT when creating a PrefixQuery , WildcardQuery or TermRangeQuery . This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any BooleanQuery.TooManyClausesException exception. However, if your application really needs to use the old-fashioned BooleanQuery expansion rewriting and the above points are not relevant then use this to change the rewrite method. Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration public virtual int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Get or Set the current time zone for date and time parsing operations. By default, the time zone is null , which indicates to read the time zone on the fly from System.TimeZoneInfo.Local . This ensures if you change the time zone on the current system, QueryParser will utilize it. You can also explicitly set a time zone. Setting the time zone to null will restore the default behavior if you have explicitly set a time zone. Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source AddClause(IList<BooleanClause>, Int32, Int32, Query) Declaration protected virtual void AddClause(IList<BooleanClause> clauses, int conj, int mods, Query q) Parameters Type Name Description System.Collections.Generic.IList < BooleanClause > clauses System.Int32 conj System.Int32 mods Query q | Improve this Doc View Source AnalyzeMultitermTerm(String, String, Analyzer) Declaration protected virtual BytesRef AnalyzeMultitermTerm(string field, string part, Analyzer analyzerIn) Parameters Type Name Description System.String field System.String part Analyzer analyzerIn Returns Type Description BytesRef | Improve this Doc View Source Escape(String) Returns a string where those characters that QueryParser expects to be escaped are escaped by a preceding \\ . Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetBooleanQuery(IList<BooleanClause>) Factory method for generating query, given a set of clauses. By default creates a boolean query composed of clauses passed in. Can be overridden by extending classes, to modify query being returned. Declaration protected virtual Query GetBooleanQuery(IList<BooleanClause> clauses) Parameters Type Name Description System.Collections.Generic.IList < BooleanClause > clauses List that contains BooleanClause instances to join. Returns Type Description Query Resulting Query object. Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetBooleanQuery(IList<BooleanClause>, Boolean) Factory method for generating query, given a set of clauses. By default creates a boolean query composed of clauses passed in. Can be overridden by extending classes, to modify query being returned. Declaration protected virtual Query GetBooleanQuery(IList<BooleanClause> clauses, bool disableCoord) Parameters Type Name Description System.Collections.Generic.IList < BooleanClause > clauses List that contains BooleanClause instances to join. System.Boolean disableCoord true if coord scoring should be disabled. Returns Type Description Query Resulting Query object. Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetDateResolution(String) Returns the date resolution that is used by RangeQueries for the given field. Returns null, if no default or field specific date resolution has been set for the given field. Declaration public virtual DateTools.Resolution GetDateResolution(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description DateTools.Resolution | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected virtual Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetFieldQuery(String, String, Int32) Base implementation delegates to GetFieldQuery(String, String, Boolean) . This method may be overridden, for example, to return a SpanNearQuery instead of a PhraseQuery . Declaration protected virtual Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Factory method for generating a query (similar to GetWildcardQuery(String, String) ). Called when parser parses an input term token that has the fuzzy suffix (~) appended. Declaration protected virtual Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token to use for building term for the query System.Single minSimilarity minimum similarity Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetPrefixQuery(String, String) Factory method for generating a query (similar to GetWildcardQuery(String, String) ). Called when parser parses an input term token that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on settings, a prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates. Can be overridden by extending classes, to provide custom handling for wild card queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token to use for building term for the query Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected virtual Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query | Improve this Doc View Source GetRegexpQuery(String, String) Factory method for generating a query. Called when parser parses an input term token that contains a regular expression query. Depending on settings, pattern term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with regular expression templates. Can be overridden by extending classes, to provide custom handling for regular expression queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetRegexpQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token that contains a regular expression Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetWildcardQuery(String, String) Factory method for generating a query. Called when parser parses an input term token that contains one or more wildcard characters (? and *), but is not a prefix term token (one that has just a single * character at the end) Depending on settings, prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates. Can be overridden by extending classes, to provide custom handling for wildcard queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token that contains one or more wild card characters (? or *), but is not simple prefix term Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source Init(LuceneVersion, String, Analyzer) Initializes a query parser. Called by the QueryParser constructor Declaration public virtual void Init(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match. System.String f the default field for query terms. Analyzer a used to find terms in the query text. | Improve this Doc View Source NewBooleanClause(Query, Occur) Builds a new BooleanClause instance Declaration protected virtual BooleanClause NewBooleanClause(Query q, Occur occur) Parameters Type Name Description Query q sub query Occur occur how this clause should occur when matching documents Returns Type Description BooleanClause new BooleanClause instance | Improve this Doc View Source NewFieldQuery(Analyzer, String, String, Boolean) Declaration protected virtual Query NewFieldQuery(Analyzer analyzer, string field, string queryText, bool quoted) Parameters Type Name Description Analyzer analyzer System.String field System.String queryText System.Boolean quoted Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source NewFuzzyQuery(Term, Single, Int32) Builds a new FuzzyQuery instance Declaration protected virtual Query NewFuzzyQuery(Term term, float minimumSimilarity, int prefixLength) Parameters Type Name Description Term term Term System.Single minimumSimilarity minimum similarity System.Int32 prefixLength prefix length Returns Type Description Query new FuzzyQuery Instance | Improve this Doc View Source NewMatchAllDocsQuery() Builds a new MatchAllDocsQuery instance Declaration protected virtual Query NewMatchAllDocsQuery() Returns Type Description Query new MatchAllDocsQuery instance | Improve this Doc View Source NewPrefixQuery(Term) Builds a new PrefixQuery instance Declaration protected virtual Query NewPrefixQuery(Term prefix) Parameters Type Name Description Term prefix Prefix term Returns Type Description Query new PrefixQuery instance | Improve this Doc View Source NewRangeQuery(String, String, String, Boolean, Boolean) Builds a new TermRangeQuery instance Declaration protected virtual Query NewRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field Field System.String part1 min System.String part2 max System.Boolean startInclusive true if the start of the range is inclusive System.Boolean endInclusive true if the end of the range is inclusive Returns Type Description Query new TermRangeQuery instance | Improve this Doc View Source NewRegexpQuery(Term) Builds a new RegexpQuery instance Declaration protected virtual Query NewRegexpQuery(Term regexp) Parameters Type Name Description Term regexp Regexp term Returns Type Description Query new RegexpQuery instance | Improve this Doc View Source NewWildcardQuery(Term) Builds a new WildcardQuery instance Declaration protected virtual Query NewWildcardQuery(Term t) Parameters Type Name Description Term t wildcard term Returns Type Description Query new WildcardQuery instance | Improve this Doc View Source Parse(String) Parses a query string, returning a Query . Declaration public virtual Query Parse(string query) Parameters Type Name Description System.String query the query string to be parsed. Returns Type Description Query Exceptions Type Condition ParseException if the parsing fails | Improve this Doc View Source ReInit(ICharStream) Declaration public abstract void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Gets or Sets the default date resolution used by RangeQueries for fields for which no specific date resolutions has been set. Field specific resolutions can be set with SetDateResolution(String, DateTools.Resolution) . Declaration public virtual void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution | Improve this Doc View Source SetDateResolution(String, DateTools.Resolution) Sets the date resolution used by RangeQueries for a specific field. Declaration public virtual void SetDateResolution(string fieldName, DateTools.Resolution dateResolution) Parameters Type Name Description System.String fieldName field for which the date resolution is to be set DateTools.Resolution dateResolution date resolution to set | Improve this Doc View Source TopLevelQuery(String) Declaration public abstract Query TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description Query Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.MethodRemovedUseAnother.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.MethodRemovedUseAnother.html",
    "title": "Class QueryParserBase.MethodRemovedUseAnother | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserBase.MethodRemovedUseAnother Do not catch this exception in your code, it means you are using methods that you should no longer use. Inheritance System.Object System.Exception QueryParserBase.MethodRemovedUseAnother Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class MethodRemovedUseAnother : Exception, ISerializable Constructors | Improve this Doc View Source MethodRemovedUseAnother() Declaration public MethodRemovedUseAnother() Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserConstants.html",
    "title": "Class QueryParserConstants | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() Inheritance System.Object QueryParserConstants 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class QueryParserConstants Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserTokenManager.html",
    "title": "Class QueryParserTokenManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserTokenManager Token Manager. Inheritance System.Object QueryParserTokenManager 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserTokenManager Constructors | Improve this Doc View Source QueryParserTokenManager(ICharStream) Constructor. Declaration public QueryParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParserTokenManager(ICharStream, Int32) Constructor. Declaration public QueryParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected virtual Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialise parser. Declaration public virtual void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialise parser. Declaration public virtual void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public virtual void SetDebugStream(TextWriter ds) Parameters Type Name Description System.IO.TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public virtual void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken 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.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = 8 Field Value Type Description System.Int32 | Improve this Doc View Source BAREOPER RegularExpression Id. Declaration public const int BAREOPER = 13 Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = 18 Field Value Type Description System.Int32 | Improve this Doc View Source COLON RegularExpression Id. Declaration public const int COLON = 16 Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = 0 Field Value Type Description System.Int32 | Improve this Doc View Source ESCAPED_CHAR RegularExpression Id. Declaration public const int ESCAPED_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source FUZZY_SLOP RegularExpression Id. Declaration public const int FUZZY_SLOP = 21 Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = 14 Field Value Type Description System.Int32 | Improve this Doc View Source MINUS RegularExpression Id. Declaration public const int MINUS = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = 27 Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = 9 Field Value Type Description System.Int32 | Improve this Doc View Source PLUS RegularExpression Id. Declaration public const int PLUS = 11 Field Value Type Description System.Int32 | Improve this Doc View Source PREFIXTERM RegularExpression Id. Declaration public const int PREFIXTERM = 22 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = 19 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED_CHAR RegularExpression Id. Declaration public const int QUOTED_CHAR = 6 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_GOOP RegularExpression Id. Declaration public const int RANGE_GOOP = 32 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_QUOTED RegularExpression Id. Declaration public const int RANGE_QUOTED = 31 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_TO RegularExpression Id. Declaration public const int RANGE_TO = 28 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_END RegularExpression Id. Declaration public const int RANGEEX_END = 30 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_START RegularExpression Id. Declaration public const int RANGEEX_START = 26 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_END RegularExpression Id. Declaration public const int RANGEIN_END = 29 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_START RegularExpression Id. Declaration public const int RANGEIN_START = 25 Field Value Type Description System.Int32 | Improve this Doc View Source REGEXPTERM RegularExpression Id. Declaration public const int REGEXPTERM = 24 Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = 15 Field Value Type Description System.Int32 | Improve this Doc View Source STAR RegularExpression Id. Declaration public const int STAR = 17 Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = 20 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = 4 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_START_CHAR RegularExpression Id. Declaration public const int TERM_START_CHAR = 3 Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = 5 Field Value Type Description System.Int32 | Improve this Doc View Source WILDTERM RegularExpression Id. Declaration public const int WILDTERM = 23 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token 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) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax [Serializable] public class Token Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object System.Exception TokenMgrError Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception, ISerializable Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean eofSeen System.Int32 lexState System.Int32 errorLine System.Int32 errorColumn System.String errorAfter System.Char curChar System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Detailed error message Remarks You can customize the lexical error message by modifying this method. Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.ComplexPhraseQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.ComplexPhraseQuery.html",
    "title": "Class ComplexPhraseQueryParser.ComplexPhraseQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ComplexPhraseQueryParser.ComplexPhraseQuery Used to handle the query content in between quotes and produced Span-based interpretations of the clauses. Inheritance System.Object Query ComplexPhraseQueryParser.ComplexPhraseQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.ComplexPhrase Assembly : Lucene.Net.QueryParser.dll Syntax public class ComplexPhraseQuery : Query Constructors | Improve this Doc View Source ComplexPhraseQuery(String, String, Int32, Boolean) Declaration public ComplexPhraseQuery(string field, string phrasedQueryStringContents, int slopFactor, bool inOrder) Parameters Type Name Description System.String field System.String phrasedQueryStringContents System.Int32 slopFactor System.Boolean inOrder Properties | Improve this Doc View Source Field Declaration public string Field { get; } Property Value Type Description System.String Methods | 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 Query.GetHashCode() | Improve this Doc View Source ParsePhraseElements(ComplexPhraseQueryParser) Declaration protected void ParsePhraseElements(ComplexPhraseQueryParser qp) Parameters Type Name Description ComplexPhraseQueryParser qp | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.html",
    "title": "Class ComplexPhraseQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ComplexPhraseQueryParser QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\". Performs potentially multiple passes over Query text to parse any nested logic in PhraseQueries. - First pass takes any PhraseQuery content between quotes and stores for subsequent pass. All other query content is parsed as normal - Second pass parses any stored PhraseQuery content, checking all embedded clauses are referring to the same field and therefore can be rewritten as Span queries. All PhraseQuery clauses are expressed as ComplexPhraseQuery objects This could arguably be done in one pass using a new QueryParser but here I am working within the constraints of the existing parser as a base class. This currently simply feeds all phrase content through an analyzer to select phrase terms - any \"special\" syntax such as * ~ * etc are not given special status Inheritance System.Object QueryBuilder QueryParserBase QueryParser ComplexPhraseQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() 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.QueryParsers.ComplexPhrase Assembly : Lucene.Net.QueryParser.dll Syntax public class ComplexPhraseQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source ComplexPhraseQueryParser(LuceneVersion, String, Analyzer) Declaration public ComplexPhraseQueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion System.String f Analyzer a Properties | Improve this Doc View Source InOrder When InOrder is true, the search terms must exists in the documents as the same order as in query. Choose between ordered (true) or un-ordered (false) proximity search. Declaration public virtual bool InOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetFieldQuery(String, String, Int32) Declaration protected override Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Int32) | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field System.String termStr System.Single minSimilarity Returns Type Description Query Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source GetWildcardQuery(String, String) Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetWildcardQuery(String, String) | Improve this Doc View Source NewRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query NewRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source NewTermQuery(Term) Declaration protected override Query NewTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description Query Overrides QueryBuilder.NewTermQuery(Term) | Improve this Doc View Source Parse(String) Declaration public override Query Parse(string query) Parameters Type Name Description System.String query Returns Type Description Query Overrides QueryParserBase.Parse(String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.html",
    "title": "Namespace Lucene.Net.QueryParsers.ComplexPhrase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.ComplexPhrase <!-- 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. --> QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\" Classes ComplexPhraseQueryParser QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\". Performs potentially multiple passes over Query text to parse any nested logic in PhraseQueries. - First pass takes any PhraseQuery content between quotes and stores for subsequent pass. All other query content is parsed as normal - Second pass parses any stored PhraseQuery content, checking all embedded clauses are referring to the same field and therefore can be rewritten as Span queries. All PhraseQuery clauses are expressed as ComplexPhraseQuery objects This could arguably be done in one pass using a new QueryParser but here I am working within the constraints of the existing parser as a base class. This currently simply feeds all phrase content through an analyzer to select phrase terms - any \"special\" syntax such as * ~ * etc are not given special status ComplexPhraseQueryParser.ComplexPhraseQuery Used to handle the query content in between quotes and produced Span-based interpretations of the clauses."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtendableQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtendableQueryParser.html",
    "title": "Class ExtendableQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExtendableQueryParser The ExtendableQueryParser enables arbitrary query parser extension based on a customizable field naming scheme. The lucene query syntax allows implicit and explicit field definitions as query prefix followed by a colon (':') character. The ExtendableQueryParser allows to encode extension keys into the field symbol associated with a registered instance of ParserExtension . A customizable separation character separates the extension key from the actual field symbol. The ExtendableQueryParser splits ( SplitExtensionField(String, String) ) the extension key from the field symbol and tries to resolve the associated ParserExtension . If the parser can't resolve the key or the field token does not contain a separation character, ExtendableQueryParser yields the same behavior as its super class QueryParser . Otherwise, if the key is associated with a ParserExtension instance, the parser builds an instance of ExtensionQuery to be processed by Parse(ExtensionQuery) .If a extension field does not contain a field part the default field for the query will be used. To guarantee that an extension field is processed with its associated extension, the extension query part must escape any special characters like '*' or '['. If the extension query contains any whitespace characters, the extension query part must be enclosed in quotes. Example ('_' used as separation character): title_customExt:\"Apache Lucene\\?\" OR content_customExt:prefix\\* Search on the default field: _customExt:\"Apache Lucene\\?\" OR _customExt:prefix\\* The ExtendableQueryParser itself does not implement the logic how field and extension key are separated or ordered. All logic regarding the extension key and field symbol parsing is located in Extensions . Customized extension schemes should be implemented by sub-classing Extensions . For details about the default encoding scheme see Extensions . Inheritance System.Object QueryBuilder QueryParserBase QueryParser ExtendableQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetWildcardQuery(String, String) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.GetFuzzyQuery(String, String, Single) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() 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.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class ExtendableQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source ExtendableQueryParser(LuceneVersion, String, Analyzer) Creates a new ExtendableQueryParser instance Declaration public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion the lucene version to use. System.String f the default query field Analyzer a the analyzer used to find terms in a query string | Improve this Doc View Source ExtendableQueryParser(LuceneVersion, String, Analyzer, Extensions) Creates a new ExtendableQueryParser instance Declaration public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a, Extensions ext) Parameters Type Name Description LuceneVersion matchVersion the lucene version to use. System.String f the default query field Analyzer a the analyzer used to find terms in a query string Extensions ext the query parser extensions Properties | Improve this Doc View Source ExtensionFieldDelimiter Returns the extension field delimiter character. Declaration public virtual char ExtensionFieldDelimiter { get; } Property Value Type Description System.Char the extension field delimiter character. Methods | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected override Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Boolean) Implements ICommonQueryParserConfiguration See Also Extensions ParserExtension ExtensionQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtensionQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtensionQuery.html",
    "title": "Class ExtensionQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExtensionQuery ExtensionQuery holds all query components extracted from the original query string like the query field and the extension query string. Inheritance System.Object ExtensionQuery 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.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class ExtensionQuery Constructors | Improve this Doc View Source ExtensionQuery(QueryParser, String, String) Creates a new ExtensionQuery Declaration public ExtensionQuery(QueryParser topLevelParser, string field, string rawQueryString) Parameters Type Name Description QueryParser topLevelParser System.String field the query field System.String rawQueryString the raw extension query string Properties | Improve this Doc View Source Field Returns the query field Declaration public virtual string Field { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source RawQueryString Returns the raw extension query string Declaration public virtual string RawQueryString { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source TopLevelParser Returns the top level parser which created this ExtensionQuery Declaration public virtual QueryParser TopLevelParser { get; protected set; } Property Value Type Description QueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.Extensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.Extensions.html",
    "title": "Class Extensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Extensions The Extensions class represents an extension mapping to associate ParserExtension instances with extension keys. An extension key is a string encoded into a Lucene standard query parser field symbol recognized by ExtendableQueryParser . The query parser passes each extension field token to SplitExtensionField(String, String) to separate the extension key from the field identifier. In addition to the key to extension mapping this class also defines the field name overloading scheme. ExtendableQueryParser uses the given extension to split the actual field name and extension key by calling SplitExtensionField(String, String) . To change the order or the key / field name encoding scheme users can subclass Extensions to implement their own. Inheritance System.Object Extensions 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.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class Extensions Constructors | Improve this Doc View Source Extensions() Creates a new Extensions instance with the DEFAULT_EXTENSION_FIELD_DELIMITER as a delimiter character. Declaration public Extensions() | Improve this Doc View Source Extensions(Char) Creates a new Extensions instance Declaration public Extensions(char extensionFieldDelimiter) Parameters Type Name Description System.Char extensionFieldDelimiter the extensions field delimiter character Fields | Improve this Doc View Source DEFAULT_EXTENSION_FIELD_DELIMITER The default extension field delimiter character. This constant is set to ':' Declaration public static readonly char DEFAULT_EXTENSION_FIELD_DELIMITER Field Value Type Description System.Char Properties | Improve this Doc View Source ExtensionFieldDelimiter Returns the extension field delimiter Declaration public virtual char ExtensionFieldDelimiter { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source Add(String, ParserExtension) Adds a new ParserExtension instance associated with the given key. Declaration public virtual void Add(string key, ParserExtension extension) Parameters Type Name Description System.String key the parser extension key ParserExtension extension the parser extension | Improve this Doc View Source BuildExtensionField(String) Builds an extension field string from a given extension key and the default query field. The default field and the key are delimited with the extension field delimiter character. This method makes no assumption about the order of the extension key and the field. By default the extension key is appended to the end of the returned string while the field is added to the beginning. Special Query characters are escaped in the result. Note: Extensions subclasses must maintain the contract between BuildExtensionField(String) and BuildExtensionField(String, String) where the latter inverts the former. Declaration public virtual string BuildExtensionField(string extensionKey) Parameters Type Name Description System.String extensionKey the extension key Returns Type Description System.String escaped extension field identifier | Improve this Doc View Source BuildExtensionField(String, String) Builds an extension field string from a given extension key and the default query field. The default field and the key are delimited with the extension field delimiter character. This method makes no assumption about the order of the extension key and the field. By default the extension key is appended to the end of the returned string while the field is added to the beginning. Special Query characters are escaped in the result. Note: Extensions subclasses must maintain the contract between BuildExtensionField(String) and BuildExtensionField(String, String) where the latter inverts the former. Declaration public virtual string BuildExtensionField(string extensionKey, string field) Parameters Type Name Description System.String extensionKey the extension key System.String field the field to apply the extension on. Returns Type Description System.String escaped extension field identifier Remarks See BuildExtensionField(String) to use the default query field | Improve this Doc View Source EscapeExtensionField(String) Escapes an extension field. The default implementation is equivalent to Escape(String) . Declaration public virtual string EscapeExtensionField(string extfield) Parameters Type Name Description System.String extfield the extension field identifier Returns Type Description System.String the extension field identifier with all special chars escaped with a backslash character. | Improve this Doc View Source GetExtension(String) Returns the ParserExtension instance for the given key or null if no extension can be found for the key. Declaration public ParserExtension GetExtension(string key) Parameters Type Name Description System.String key the extension key Returns Type Description ParserExtension the ParserExtension instance for the given key or null if no extension can be found for the key. | Improve this Doc View Source SplitExtensionField(String, String) Splits a extension field and returns the field / extension part as a Tuple{string,string} . This method tries to split on the first occurrence of the extension field delimiter, if the delimiter is not present in the string the result will contain a null value for the extension key and the given field string as the field value. If the given extension field string contains no field identifier the result pair will carry the given default field as the field value. Declaration public virtual Tuple<string, string> SplitExtensionField(string defaultField, string field) Parameters Type Name Description System.String defaultField the default query field System.String field the extension field string Returns Type Description System.Tuple < System.String , System.String > a { System.Tuple<T1, T2> with the field name as the System.Tuple`2.Item1 and the extension key as the System.Tuple`2.Item2 See Also ExtendableQueryParser ParserExtension"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.html",
    "title": "Namespace Lucene.Net.QueryParsers.Ext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Ext <!-- 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. --> Extendable QueryParser provides a simple and flexible extension mechanism by overloading query field names. Classes ExtendableQueryParser The ExtendableQueryParser enables arbitrary query parser extension based on a customizable field naming scheme. The lucene query syntax allows implicit and explicit field definitions as query prefix followed by a colon (':') character. The ExtendableQueryParser allows to encode extension keys into the field symbol associated with a registered instance of ParserExtension . A customizable separation character separates the extension key from the actual field symbol. The ExtendableQueryParser splits ( SplitExtensionField(String, String) ) the extension key from the field symbol and tries to resolve the associated ParserExtension . If the parser can't resolve the key or the field token does not contain a separation character, ExtendableQueryParser yields the same behavior as its super class QueryParser . Otherwise, if the key is associated with a ParserExtension instance, the parser builds an instance of ExtensionQuery to be processed by Parse(ExtensionQuery) .If a extension field does not contain a field part the default field for the query will be used. To guarantee that an extension field is processed with its associated extension, the extension query part must escape any special characters like '*' or '['. If the extension query contains any whitespace characters, the extension query part must be enclosed in quotes. Example ('_' used as separation character): title_customExt:\"Apache Lucene\\?\" OR content_customExt:prefix\\* Search on the default field: _customExt:\"Apache Lucene\\?\" OR _customExt:prefix\\* The ExtendableQueryParser itself does not implement the logic how field and extension key are separated or ordered. All logic regarding the extension key and field symbol parsing is located in Extensions . Customized extension schemes should be implemented by sub-classing Extensions . For details about the default encoding scheme see Extensions . ExtensionQuery ExtensionQuery holds all query components extracted from the original query string like the query field and the extension query string. Extensions The Extensions class represents an extension mapping to associate ParserExtension instances with extension keys. An extension key is a string encoded into a Lucene standard query parser field symbol recognized by ExtendableQueryParser . The query parser passes each extension field token to SplitExtensionField(String, String) to separate the extension key from the field identifier. In addition to the key to extension mapping this class also defines the field name overloading scheme. ExtendableQueryParser uses the given extension to split the actual field name and extension key by calling SplitExtensionField(String, String) . To change the order or the key / field name encoding scheme users can subclass Extensions to implement their own. ParserExtension This class represents an extension base class to the Lucene standard QueryParser . The QueryParser is generated by the JavaCC parser generator. Changing or adding functionality or syntax in the standard query parser requires changes to the JavaCC source file. To enable extending the standard query parser without changing the JavaCC sources and re-generate the parser the ParserExtension can be customized and plugged into an instance of ExtendableQueryParser , a direct subclass of QueryParser ."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ParserExtension.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ParserExtension.html",
    "title": "Class ParserExtension | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParserExtension This class represents an extension base class to the Lucene standard QueryParser . The QueryParser is generated by the JavaCC parser generator. Changing or adding functionality or syntax in the standard query parser requires changes to the JavaCC source file. To enable extending the standard query parser without changing the JavaCC sources and re-generate the parser the ParserExtension can be customized and plugged into an instance of ExtendableQueryParser , a direct subclass of QueryParser . Inheritance System.Object ParserExtension 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.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ParserExtension Methods | Improve this Doc View Source Parse(ExtensionQuery) Processes the given ExtensionQuery and returns a corresponding Query instance. Subclasses must either return a Query instance or raise a ParseException . This method must not return null . Declaration public abstract Query Parse(ExtensionQuery query) Parameters Type Name Description ExtensionQuery query the extension query Returns Type Description Query a new query instance Exceptions Type Condition ParseException if the query can not be parsed. See Also Extensions ExtendableQueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Builders | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Builders <!-- 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. --> Necessary classes to implement query builders. Query Parser Builders The package org.apache.lucene.queryParser.builders contains the interface that builders must implement, it also contain a utility QueryTreeBuilder , which walks the tree and call the Builder for each node in the tree. Builder normally convert QueryNode Object into a Lucene Query Object, and normally it's a one-to-one mapping class. But other builders implementations can by written to convert QueryNode objects to other non lucene objects. Classes QueryTreeBuilder LUCENENET specific class for accessing static members of QueryTreeBuilder<TQuery> without referencing its generic closing type. QueryTreeBuilder<TQuery> This class should be used when there is a builder for each type of node. The type of node may be defined in 2 different ways: - by the field name, when the node implements the IFieldableNode interface - by its class, it keeps checking the class and all the interfaces and classes this class implements/extends until it finds a builder for that class/interface This class always check if there is a builder for the field name before it checks for the node class. So, field name builders have precedence over class builders. When a builder is found for a node, it's called and the node is passed to the builder. If the returned built object is not null , it's tagged on the node using the tag QUERY_TREE_BUILDER_TAGID . The children are usually built before the parent node. However, if a builder associated to a node is an instance of QueryTreeBuilder<TQuery> , the node is delegated to this builder and it's responsible to build the node and its children. IQueryBuilder<TQuery> Interfaces IQueryBuilder<TQuery> This interface is used by implementors classes that builds some kind of object from a query tree. QueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.IQueryBuilder-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.IQueryBuilder-1.html",
    "title": "Interface IQueryBuilder<TQuery> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IQueryBuilder<TQuery> This interface is used by implementors classes that builds some kind of object from a query tree. QueryTreeBuilder Namespace : Lucene.Net.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryBuilder<TQuery> Type Parameters Name Description TQuery Methods | Improve this Doc View Source Build(IQueryNode) Builds some kind of object from a query tree. Declaration TQuery Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode the query tree root node Returns Type Description TQuery some object generated from the query tree"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder.html",
    "title": "Class QueryTreeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryTreeBuilder LUCENENET specific class for accessing static members of QueryTreeBuilder<TQuery> without referencing its generic closing type. Inheritance System.Object QueryTreeBuilder QueryTreeBuilder <TQuery> 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.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryTreeBuilder Fields | Improve this Doc View Source QUERY_TREE_BUILDER_TAGID This tag is used to tag the nodes in a query tree with the built objects produced from their own associated builder. Declaration public static readonly string QUERY_TREE_BUILDER_TAGID Field Value Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder-1.html",
    "title": "Class QueryTreeBuilder<TQuery> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryTreeBuilder<TQuery> This class should be used when there is a builder for each type of node. The type of node may be defined in 2 different ways: - by the field name, when the node implements the IFieldableNode interface - by its class, it keeps checking the class and all the interfaces and classes this class implements/extends until it finds a builder for that class/interface This class always check if there is a builder for the field name before it checks for the node class. So, field name builders have precedence over class builders. When a builder is found for a node, it's called and the node is passed to the builder. If the returned built object is not null , it's tagged on the node using the tag QUERY_TREE_BUILDER_TAGID . The children are usually built before the parent node. However, if a builder associated to a node is an instance of QueryTreeBuilder<TQuery> , the node is delegated to this builder and it's responsible to build the node and its children. IQueryBuilder<TQuery> Inheritance System.Object QueryTreeBuilder QueryTreeBuilder<TQuery> StandardQueryTreeBuilder Implements IQueryBuilder <TQuery> Inherited Members QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID 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.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryTreeBuilder<TQuery> : QueryTreeBuilder, IQueryBuilder<TQuery> Type Parameters Name Description TQuery Constructors | Improve this Doc View Source QueryTreeBuilder() QueryTreeBuilder<TQuery> constructor. Declaration public QueryTreeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Builds some kind of object from a query tree. Each node in the query tree is built using an specific builder associated to it. Declaration public virtual TQuery Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode the query tree root node Returns Type Description TQuery the built object Exceptions Type Condition QueryNodeException if some node builder throws a QueryNodeException or if there is a node which had no builder associated to it | Improve this Doc View Source SetBuilder(String, IQueryBuilder<TQuery>) Associates a field name with a builder. Declaration public virtual void SetBuilder(string fieldName, IQueryBuilder<TQuery> builder) Parameters Type Name Description System.String fieldName the field name IQueryBuilder <TQuery> builder the builder to be associated | Improve this Doc View Source SetBuilder(Type, IQueryBuilder<TQuery>) Associates a System.Type (that implements IQueryNode ) with a builder Declaration public virtual void SetBuilder(Type queryNodeClass, IQueryBuilder<TQuery> builder) Parameters Type Name Description System.Type queryNodeClass The type (a class that implements IQueryNode ) IQueryBuilder <TQuery> builder the builder to be associated Implements IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.AbstractQueryConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.AbstractQueryConfig.html",
    "title": "Class AbstractQueryConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractQueryConfig This class is the base of QueryConfigHandler and FieldConfig . It has operations to set, unset and get configuration values. Each configuration is is a key->value pair. The key should be an unique ConfigurationKey<T> instance and it also holds the value's type. ConfigurationKey<T> Inheritance System.Object AbstractQueryConfig FieldConfig QueryConfigHandler 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.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class AbstractQueryConfig Methods | Improve this Doc View Source Get<T>(ConfigurationKey<T>) Returns the value held by the given key. Declaration public virtual T Get<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null Returns Type Description T the value held by the given key Type Parameters Name Description T the value's type | Improve this Doc View Source Has<T>(ConfigurationKey<T>) Returns true if there is a value set with the given key, otherwise false . Declaration public virtual bool Has<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null Returns Type Description System.Boolean true if there is a value set with the given key, otherwise false Type Parameters Name Description T the value's type | Improve this Doc View Source Set<T>(ConfigurationKey<T>, T) Sets a key and its value. Declaration public virtual void Set<T>(ConfigurationKey<T> key, T value) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null T value value to set Type Parameters Name Description T the value's type | Improve this Doc View Source Unset<T>(ConfigurationKey<T>) Unsets the given key and its value. Declaration public virtual bool Unset<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key Returns Type Description System.Boolean true if the key and value was set and removed, otherwise false Type Parameters Name Description T the value's type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey.html",
    "title": "Class ConfigurationKey | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConfigurationKey LUCENENET specific class used to access the NewInstance static method without referring to the ConfigurationKey{T}'s generic closing type. Inheritance System.Object ConfigurationKey ConfigurationKey <T> 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.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ConfigurationKey Methods | Improve this Doc View Source NewInstance<T>() Creates a new instance. Declaration public static ConfigurationKey<T> NewInstance<T>() Returns Type Description ConfigurationKey <T> a new instance Type Parameters Name Description T the value's type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey-1.html",
    "title": "Class ConfigurationKey<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConfigurationKey<T> An instance of this class represents a key that is used to retrieve a value from AbstractQueryConfig . It also holds the value's type, which is defined in the generic argument. Inheritance System.Object ConfigurationKey ConfigurationKey<T> Inherited Members ConfigurationKey.NewInstance<T>() 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.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class ConfigurationKey<T> : ConfigurationKey Type Parameters Name Description T the value's type See Also AbstractQueryConfig"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.FieldConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.FieldConfig.html",
    "title": "Class FieldConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldConfig This class represents a field configuration. Inheritance System.Object AbstractQueryConfig FieldConfig Inherited Members AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) 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.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldConfig : AbstractQueryConfig Constructors | Improve this Doc View Source FieldConfig(String) Constructs a FieldConfig Declaration public FieldConfig(string fieldName) Parameters Type Name Description System.String fieldName the field name, it cannot be null Exceptions Type Condition System.ArgumentException if the field name is null Properties | Improve this Doc View Source Field Gets the field name this configuration represents. Declaration public virtual string Field { 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 System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Config | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Config <!-- 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. --> Base classes used to configure the query processing. Query Configuration Interfaces The package org.apache.lucene.queryparser.flexible.config contains query configuration handler abstract class that all config handlers should extend. See StandardQueryConfigHandler for a reference implementation. The QueryConfigHandler and FieldConfig are used in the processors to access config information in a flexible and independent way. See TermRangeQueryNodeProcessor for a reference implementation. Classes AbstractQueryConfig This class is the base of QueryConfigHandler and FieldConfig . It has operations to set, unset and get configuration values. Each configuration is is a key->value pair. The key should be an unique ConfigurationKey<T> instance and it also holds the value's type. ConfigurationKey<T> ConfigurationKey LUCENENET specific class used to access the NewInstance static method without referring to the ConfigurationKey{T}'s generic closing type. ConfigurationKey<T> An instance of this class represents a key that is used to retrieve a value from AbstractQueryConfig . It also holds the value's type, which is defined in the generic argument. FieldConfig This class represents a field configuration. QueryConfigHandler This class can be used to hold any query configuration and no field configuration. For field configuration, it creates an empty FieldConfig object and delegate it to field config listeners, these are responsible for setting up all the field configuration. QueryConfigHandler should be extended by classes that intends to provide configuration to IQueryNodeProcessor objects. The class that extends QueryConfigHandler should also provide FieldConfig objects for each collection field. Interfaces IFieldConfigListener This interface should be implemented by classes that wants to listen for field configuration requests. The implementation receives a FieldConfig object and may add/change its configuration."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.IFieldConfigListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.IFieldConfigListener.html",
    "title": "Interface IFieldConfigListener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFieldConfigListener This interface should be implemented by classes that wants to listen for field configuration requests. The implementation receives a FieldConfig object and may add/change its configuration. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldConfigListener Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) This method is called every time a field configuration is requested. Declaration void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig the field configuration requested, should never be null See Also FieldConfig QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html",
    "title": "Class QueryConfigHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryConfigHandler This class can be used to hold any query configuration and no field configuration. For field configuration, it creates an empty FieldConfig object and delegate it to field config listeners, these are responsible for setting up all the field configuration. QueryConfigHandler should be extended by classes that intends to provide configuration to IQueryNodeProcessor objects. The class that extends QueryConfigHandler should also provide FieldConfig objects for each collection field. Inheritance System.Object AbstractQueryConfig QueryConfigHandler StandardQueryConfigHandler Inherited Members AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) 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.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryConfigHandler : AbstractQueryConfig Methods | Improve this Doc View Source AddFieldConfigListener(IFieldConfigListener) Adds a listener. The added listeners are called in the order they are added. Declaration public virtual void AddFieldConfigListener(IFieldConfigListener listener) Parameters Type Name Description IFieldConfigListener listener the listener to be added | Improve this Doc View Source GetFieldConfig(String) Returns an implementation of FieldConfig for a specific field name. If the implemented QueryConfigHandler does not know a specific field name, it may return null , indicating there is no configuration for that field. Declaration public virtual FieldConfig GetFieldConfig(string fieldName) Parameters Type Name Description System.String fieldName the field name Returns Type Description FieldConfig A FieldConfig object containing the field name configuration or null , if the implemented QueryConfigHandler has no configuration for that field See Also FieldConfig IFieldConfigListener QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core <!-- 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. --> Core classes of the flexible query parser framework. Flexible Query Parser This package contains the necessary classes to implement a query parser. A query parser is divided in at least 2 phases, text parsing and query building, and one optional phase called query processing. First Phase: Text Parsing The text parsing phase is performed by a text parser, which implements <xref:Lucene.Net.QueryParsers.Flexible.Core.Parser.SyntaxParser> interface. A text parser is responsible to get a query string and convert it to a QueryNode tree, which is an object structure that represents the elements defined in the query string. Second (optional) Phase: Query Processing The query processing phase is performed by a query processor, which implements QueryNodeProcessor . A query processor is responsible to perform any processing on a QueryNode tree. This phase is optional and is used only if an extra processing, validation, query expansion, etc needs to be performed in a QueryNode tree. The QueryNode tree can be either be generated by a text parser or programmatically created. Third Phase: Query Building The query building phase is performed by a query builder, which implements <xref:Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryBuilder>. A query builder is responsible to convert a QueryNode tree into an arbitrary object, which is usually used to be executed against a search index. Classes QueryNodeError Error class with NLS support QueryNodeException This exception should be thrown if something wrong happens when dealing with IQueryNode s. It also supports NLS messages. QueryNodeParseException This should be thrown when an exception happens during the query parsing from string to the query node tree. QueryParserHelper<TQuery> This class is a helper for the query parser framework, it does all the three query parser phrases at once: text parsing, query processing and query building. It contains methods that allows the user to change the implementation used on the three phases."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Messages | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Messages <!-- 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. --> Messages usually used by query parser implementations. Query Parser Messages Messages for the Flexible Query Parser, they use org.apache.lucene.messages.NLS API. Classes QueryParserMessages Flexible Query Parser message bundle class"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.QueryParserMessages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.QueryParserMessages.html",
    "title": "Class QueryParserMessages | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserMessages Flexible Query Parser message bundle class Inheritance System.Object NLS QueryParserMessages Inherited Members NLS.GetResourceManagerFactory() NLS.SetResourceManagerFactory(IResourceManagerFactory) NLS.GetLocalizedMessage(String) NLS.GetLocalizedMessage(String, CultureInfo) NLS.GetLocalizedMessage(String, CultureInfo, Object[]) NLS.GetLocalizedMessage(String, Object[]) NLS.InitializeMessages(String, Type) 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.QueryParsers.Flexible.Core.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserMessages : NLS Fields | Improve this Doc View Source COULD_NOT_PARSE_NUMBER Declaration public static string COULD_NOT_PARSE_NUMBER Field Value Type Description System.String | Improve this Doc View Source EMPTY_MESSAGE Declaration public static string EMPTY_MESSAGE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX Declaration public static string INVALID_SYNTAX Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_CANNOT_PARSE Declaration public static string INVALID_SYNTAX_CANNOT_PARSE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_CHARACTER Declaration public static string INVALID_SYNTAX_ESCAPE_CHARACTER Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_NONE_HEX_UNICODE Declaration public static string INVALID_SYNTAX_ESCAPE_NONE_HEX_UNICODE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION Declaration public static string INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_FUZZY_EDITS Declaration public static string INVALID_SYNTAX_FUZZY_EDITS Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_FUZZY_LIMITS Declaration public static string INVALID_SYNTAX_FUZZY_LIMITS Field Value Type Description System.String | Improve this Doc View Source LEADING_WILDCARD_NOT_ALLOWED Declaration public static string LEADING_WILDCARD_NOT_ALLOWED Field Value Type Description System.String | Improve this Doc View Source LUCENE_QUERY_CONVERSION_ERROR Declaration public static string LUCENE_QUERY_CONVERSION_ERROR Field Value Type Description System.String | Improve this Doc View Source NODE_ACTION_NOT_SUPPORTED Declaration public static string NODE_ACTION_NOT_SUPPORTED Field Value Type Description System.String | Improve this Doc View Source NUMBER_CLASS_NOT_SUPPORTED_BY_NUMERIC_RANGE_QUERY Declaration public static string NUMBER_CLASS_NOT_SUPPORTED_BY_NUMERIC_RANGE_QUERY Field Value Type Description System.String | Improve this Doc View Source NUMERIC_CANNOT_BE_EMPTY Declaration public static string NUMERIC_CANNOT_BE_EMPTY Field Value Type Description System.String | Improve this Doc View Source PARAMETER_VALUE_NOT_SUPPORTED Declaration public static string PARAMETER_VALUE_NOT_SUPPORTED Field Value Type Description System.String | Improve this Doc View Source TOO_MANY_BOOLEAN_CLAUSES Declaration public static string TOO_MANY_BOOLEAN_CLAUSES Field Value Type Description System.String | Improve this Doc View Source UNSUPPORTED_NUMERIC_DATA_TYPE Declaration public static string UNSUPPORTED_NUMERIC_DATA_TYPE Field Value Type Description System.String | Improve this Doc View Source WILDCARD_NOT_SUPPORTED Declaration public static string WILDCARD_NOT_SUPPORTED Field Value Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AndQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AndQueryNode.html",
    "title": "Class AndQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AndQueryNode A AndQueryNode represents an AND boolean operation performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode AnyQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AndQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source AndQueryNode(IList<IQueryNode>) Declaration public AndQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be and'ed Methods | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AnyQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AnyQueryNode.html",
    "title": "Class AnyQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnyQueryNode A AnyQueryNode represents an ANY operator performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode AnyQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AnyQueryNode : AndQueryNode, IQueryNode Constructors | Improve this Doc View Source AnyQueryNode(IList<IQueryNode>, String, Int32) Declaration public AnyQueryNode(IList<IQueryNode> clauses, string field, int minimumMatchingElements) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be or'ed System.String field System.Int32 minimumMatchingElements Properties | Improve this Doc View Source Field Gets or sets the field name. Returns null if the field was not specified. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source MinimumMatchingElements Declaration public virtual int MinimumMatchingElements { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides BooleanQueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() null if the field was not specified Declaration public virtual string GetFieldAsString() Returns Type Description System.String the field as a System.String | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides AndQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AndQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BooleanQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BooleanQueryNode.html",
    "title": "Class BooleanQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanQueryNode A BooleanQueryNode represents a list of elements which do not have an explicit boolean operator defined between them. It can be used to express a boolean query that intends to use the default boolean operator. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode OrQueryNode ProximityQueryNode StandardBooleanQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source BooleanQueryNode(IList<IQueryNode>) Declaration public BooleanQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be and'ed Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BoostQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BoostQueryNode.html",
    "title": "Class BoostQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostQueryNode A BoostQueryNode boosts the QueryNode tree which is under this node. So, it must only and always have one child. The boost value may vary from 0.0 to 1.0. Inheritance System.Object QueryNode BoostQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source BoostQueryNode(IQueryNode, Single) Constructs a boost node Declaration public BoostQueryNode(IQueryNode query, float value) Parameters Type Name Description IQueryNode query the query to be boosted System.Single value the boost value, it may vary from 0.0 to 1.0 Properties | Improve this Doc View Source Child Gets the single child which this node boosts. Declaration public virtual IQueryNode Child { get; } Property Value Type Description IQueryNode | Improve this Doc View Source Value Gets the boost value. It may vary from 0.0 to 1.0. Declaration public virtual float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html",
    "title": "Class DeletedQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DeletedQueryNode A DeletedQueryNode represents a node that was deleted from the query node tree. It can be removed from the tree using the RemoveDeletedQueryNodesProcessor processor. Inheritance System.Object QueryNode DeletedQueryNode MatchNoDocsQueryNode NoTokenFoundQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class DeletedQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source DeletedQueryNode() Declaration public DeletedQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FieldQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FieldQueryNode.html",
    "title": "Class FieldQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldQueryNode A FieldQueryNode represents a element that contains field/text tuple Inheritance System.Object QueryNode FieldQueryNode FuzzyQueryNode QuotedFieldQueryNode WildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldQueryNode : QueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source FieldQueryNode(String, ICharSequence, Int32, Int32) Declaration public FieldQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name J2N.Text.ICharSequence text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FieldQueryNode(String, String, Int32, Int32) Declaration public FieldQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FieldQueryNode(String, StringBuilder, Int32, Int32) Declaration public FieldQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value System.Int32 begin position in the query string System.Int32 end position in the query string Fields | Improve this Doc View Source m_begin The term's begin position. Declaration protected int m_begin Field Value Type Description System.Int32 | Improve this Doc View Source m_end The term's end position. Declaration protected int m_end Field Value Type Description System.Int32 | Improve this Doc View Source m_field The term's field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source m_positionIncrement The term's position increment. Declaration protected int m_positionIncrement Field Value Type Description System.Int32 | Improve this Doc View Source m_text The term's text. Declaration protected ICharSequence m_text Field Value Type Description J2N.Text.ICharSequence Properties | Improve this Doc View Source Begin Declaration public virtual int Begin { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source End Declaration public virtual int End { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source PositionIncrement Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Gets or Sets the \"original\" form of the term. Declaration public virtual ICharSequence Text { get; set; } Property Value Type Description J2N.Text.ICharSequence | Improve this Doc View Source Value Declaration public virtual string Value { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() null if the field was not specified in the query string Declaration public virtual string GetFieldAsString() Returns Type Description System.String the field | Improve this Doc View Source GetTermEscaped(IEscapeQuerySyntax) Declaration protected virtual string GetTermEscaped(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String | Improve this Doc View Source GetTermEscapeQuoted(IEscapeQuerySyntax) Declaration protected virtual string GetTermEscapeQuoted(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String | Improve this Doc View Source GetTextAsString() Declaration public virtual string GetTextAsString() Returns Type Description System.String the term | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FuzzyQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FuzzyQueryNode.html",
    "title": "Class FuzzyQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyQueryNode A FuzzyQueryNode represents a element that contains field/text/similarity tuple Inheritance System.Object QueryNode FieldQueryNode FuzzyQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source FuzzyQueryNode(String, ICharSequence, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, ICharSequence term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. J2N.Text.ICharSequence term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FuzzyQueryNode(String, String, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, string term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. System.String term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FuzzyQueryNode(String, StringBuilder, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, StringBuilder term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. System.Text.StringBuilder term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source PrefixLength Declaration public virtual int PrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity Gets or Sets the similarity Declaration public virtual float Similarity { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.GroupQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.GroupQueryNode.html",
    "title": "Class GroupQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GroupQueryNode A GroupQueryNode represents a location where the original user typed real parenthesis on the query string. This class is useful for queries like: a) a AND b OR c b) ( a AND b) OR c Parenthesis might be used to define the boolean operation precedence. Inheritance System.Object QueryNode GroupQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class GroupQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source GroupQueryNode(IQueryNode) This IQueryNode is used to identify parenthesis on the original query string Declaration public GroupQueryNode(IQueryNode query) Parameters Type Name Description IQueryNode query Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source SetChild(IQueryNode) Declaration public virtual void SetChild(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Nodes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Nodes <!-- 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. --> Query nodes commonly used by query parser implementations. Query Nodes The package org.apache.lucene.queryParser.nodes contains all the basic query nodes. The interface that represents a query node is QueryNode . QueryNode s are used by the text parser to create a syntax tree. These nodes are designed to be used by UI or other text parsers. The default Lucene text parser is StandardSyntaxParser , it implements Lucene's standard syntax. QueryNode interface should be implemented by all query nodes, the class <xref:Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNodeImpl> implements QueryNode and is extended by all current query node implementations. A query node tree can be printed to the a stream, and it generates a pseudo XML representation with all the nodes. A query node tree can also generate a query string that can be parsed back by the original text parser, at this point only the standard lucene syntax is supported. Grouping nodes: * AndQueryNode - used for AND operator * AnyQueryNode - used for ANY operator * OrQueryNode - used for OR operator * BooleanQueryNode - used when no operator is specified * ModifierQueryNode - used for modifier operator * GroupQueryNode - used for parenthesis * BoostQueryNode - used for boost operator * SlopQueryNode - phrase slop * FuzzyQueryNode - fuzzy node * TermRangeQueryNode - used for parametric field:[low_value TO high_value] * ProximityQueryNode - used for proximity search * NumericRangeQueryNode - used for numeric range search * TokenizedPhraseQueryNode - used by tokenizers/lemmatizers/analyzers for phrases/autophrases Leaf Nodes: * FieldQueryNode - field/value node * NumericQueryNode - used for numeric search * PathQueryNode - QueryNode object used with path-like queries * OpaqueQueryNode - Used as for part of the query that can be parsed by other parsers. schema/value * PrefixWildcardQueryNode - non-phrase wildcard query * QuotedFieldQUeryNode - regular phrase node * WildcardQueryNode - non-phrase wildcard query Utility Nodes: * DeletedQueryNode - used by processors on optimizations * MatchAllDocsQueryNode - used by processors on optimizations * MatchNoDocsQueryNode - used by processors on optimizations * NoTokenFoundQueryNode - used by tokenizers/lemmatizers/analyzers Classes AndQueryNode A AndQueryNode represents an AND boolean operation performed on a list of nodes. AnyQueryNode A AnyQueryNode represents an ANY operator performed on a list of nodes. BooleanQueryNode A BooleanQueryNode represents a list of elements which do not have an explicit boolean operator defined between them. It can be used to express a boolean query that intends to use the default boolean operator. BoostQueryNode A BoostQueryNode boosts the QueryNode tree which is under this node. So, it must only and always have one child. The boost value may vary from 0.0 to 1.0. DeletedQueryNode A DeletedQueryNode represents a node that was deleted from the query node tree. It can be removed from the tree using the RemoveDeletedQueryNodesProcessor processor. FieldQueryNode A FieldQueryNode represents a element that contains field/text tuple FuzzyQueryNode A FuzzyQueryNode represents a element that contains field/text/similarity tuple GroupQueryNode A GroupQueryNode represents a location where the original user typed real parenthesis on the query string. This class is useful for queries like: a) a AND b OR c b) ( a AND b) OR c Parenthesis might be used to define the boolean operation precedence. MatchAllDocsQueryNode A MatchAllDocsQueryNode indicates that a query node tree or subtree will match all documents if executed in the index. MatchNoDocsQueryNode A MatchNoDocsQueryNode indicates that a query node tree or subtree will not match any documents if executed in the index. ModifierExtensions ModifierQueryNode A ModifierQueryNode indicates the modifier value (+,-,?,NONE) for each term on the query string. For example \"+t1 -t2 t3\" will have a tree of: <BooleanQueryNode> <ModifierQueryNode modifier=\"MOD_REQ\"> <t1/> </ModifierQueryNode> <ModifierQueryNode modifier=\"MOD_NOT\"> <t2/> </ModifierQueryNode> <t3/> </BooleanQueryNode> NoTokenFoundQueryNode A NoTokenFoundQueryNode is used if a term is convert into no tokens by the tokenizer/lemmatizer/analyzer (null). OpaqueQueryNode A OpaqueQueryNode is used for specify values that are not supposed to be parsed by the parser. For example: and XPATH query in the middle of a query string a b @xpath:&apos;/bookstore/book[1]/title&apos; c d OrQueryNode A OrQueryNode represents an OR boolean operation performed on a list of nodes. PathQueryNode A PathQueryNode is used to store queries like /company/USA/California /product/shoes/brown. QueryText are objects that contain the text, begin position and end position in the query. Example how the text parser creates these objects: IList<PathQueryNode.QueryText> values = new List<PathQueryNode.QueryText>(); values.Add(new PathQueryNode.QueryText(\"company\", 1, 7)); values.Add(new PathQueryNode.QueryText(\"USA\", 9, 12)); values.Add(new PathQueryNode.QueryText(\"California\", 14, 23)); QueryNode q = new PathQueryNode(values); PathQueryNode.QueryText Term text with a beginning and end position PhraseSlopQueryNode Query node for PhraseQuery 's slop factor. ProximityQueryNode A ProximityQueryNode represents a query where the terms should meet specific distance conditions. (a b c) WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] (\"a\" \"b\" \"c\") WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] TODO: Add this to the future standard Lucene parser/processor/builder ProximityQueryNode_TypeExtensions ProximityType utility class containing the distance condition and number QueryNode A QueryNode is the default implementation of the interface IQueryNode QuotedFieldQueryNode A QuotedFieldQueryNode represents phrase query. Example: \"life is great\" SlopQueryNode A SlopQueryNode represents phrase query with a slop. From Lucene FAQ: Is there a way to use a proximity operator (like near or within) with Lucene? There is a variable called slop that allows you to perform NEAR/WITHIN-like queries. By default, slop is set to 0 so that only exact phrases will match. When using TextParser you can use this syntax to specify the slop: \"doug cutting\"~2 will find documents that contain \"doug cutting\" as well as ones that contain \"cutting doug\". TokenizedPhraseQueryNode A TokenizedPhraseQueryNode represents a node created by a code that tokenizes/lemmatizes/analyzes. Interfaces IFieldableNode A query node implements IFieldableNode interface to indicate that its children and itself are associated to a specific field. If it has any children which also implements this interface, it must ensure the children are associated to the same field. IFieldValuePairQueryNode<T> This interface should be implemented by IQueryNode that holds a field and an arbitrary value. IQueryNode A IQueryNode is a interface implemented by all nodes on a IQueryNode tree. IRangeQueryNode LUCENENET specific interface for identifying a RangeQueryNode without specifying its generic closing type IRangeQueryNode<T> This interface should be implemented by an IQueryNode that represents some kind of range query. ITextableQueryNode Interface for a node that has text as a J2N.Text.ICharSequence IValueQueryNode<T> This interface should be implemented by IQueryNode that holds an arbitrary value. Enums Modifier Modifier type: such as required (REQ), prohibited (NOT) ProximityQueryNode.Type Distance condition: PARAGRAPH, SENTENCE, or NUMBER"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldableNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldableNode.html",
    "title": "Interface IFieldableNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFieldableNode A query node implements IFieldableNode interface to indicate that its children and itself are associated to a specific field. If it has any children which also implements this interface, it must ensure the children are associated to the same field. Inherited Members IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldableNode : IQueryNode Properties | Improve this Doc View Source Field Gets or Sets the field name associated to the node and every node under it. Declaration string Field { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldValuePairQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldValuePairQueryNode-1.html",
    "title": "Interface IFieldValuePairQueryNode<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFieldValuePairQueryNode<T> This interface should be implemented by IQueryNode that holds a field and an arbitrary value. Inherited Members IFieldableNode.Field IValueQueryNode<T>.Value IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldValuePairQueryNode<T> : IFieldableNode, IValueQueryNode<T>, IQueryNode Type Parameters Name Description T See Also IFieldableNode IValueQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html",
    "title": "Interface IQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IQueryNode A IQueryNode is a interface implemented by all nodes on a IQueryNode tree. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryNode Properties | Improve this Doc View Source IsLeaf verify if a node is a Leaf node Declaration bool IsLeaf { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Declaration IQueryNode Parent { get; } Property Value Type Description IQueryNode | Improve this Doc View Source TagMap Gets a map containing all tags attached to this query node. Declaration IDictionary<string, object> TagMap { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Methods | Improve this Doc View Source Add(IQueryNode) add a new child to a non Leaf node Declaration void Add(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source Add(IList<IQueryNode>) Declaration void Add(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source CloneTree() Recursive clone the IQueryNode tree. The tags are not copied to the new tree when you call the CloneTree() method. Declaration IQueryNode CloneTree() Returns Type Description IQueryNode the cloned tree | Improve this Doc View Source ContainsTag(String) verify if a node contains a tag Declaration bool ContainsTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Boolean | Improve this Doc View Source GetChildren() get Children nodes Declaration IList<IQueryNode> GetChildren() Returns Type Description System.Collections.Generic.IList < IQueryNode > | Improve this Doc View Source GetTag(String) Returns object stored under that tag name Declaration object GetTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Object | Improve this Doc View Source RemoveFromParent() Removes this query node from its parent. Declaration void RemoveFromParent() | Improve this Doc View Source Set(IList<IQueryNode>) reset the children of a node Declaration void Set(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source SetTag(String, Object) Associate the specified value with the specified tagName . If the tagName already exists, the old value is replaced. The tagName and value cannot be null. tagName will be converted to lowercase. Declaration void SetTag(string tagName, object value) Parameters Type Name Description System.String tagName System.Object value | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) convert to a query string understood by the query parser Declaration string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String | Improve this Doc View Source ToString() for printing Declaration string ToString() Returns Type Description System.String | Improve this Doc View Source UnsetTag(String) Unset a tag. tagName will be converted to lowercase. Declaration void UnsetTag(string tagName) Parameters Type Name Description System.String tagName"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode.html",
    "title": "Interface IRangeQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IRangeQueryNode LUCENENET specific interface for identifying a RangeQueryNode without specifying its generic closing type Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IRangeQueryNode Properties | Improve this Doc View Source IsLowerInclusive Declaration bool IsLowerInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsUpperInclusive Declaration bool IsUpperInclusive { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode-1.html",
    "title": "Interface IRangeQueryNode<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IRangeQueryNode<T> This interface should be implemented by an IQueryNode that represents some kind of range query. Inherited Members IRangeQueryNode.IsLowerInclusive IRangeQueryNode.IsUpperInclusive IFieldableNode.Field IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IRangeQueryNode<T> : IRangeQueryNode, IFieldableNode, IQueryNode where T : IFieldableNode Type Parameters Name Description T Properties | Improve this Doc View Source LowerBound Declaration T LowerBound { get; } Property Value Type Description T | Improve this Doc View Source UpperBound Declaration T UpperBound { get; } Property Value Type Description T"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ITextableQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ITextableQueryNode.html",
    "title": "Interface ITextableQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITextableQueryNode Interface for a node that has text as a J2N.Text.ICharSequence Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface ITextableQueryNode Properties | Improve this Doc View Source Text Declaration ICharSequence Text { get; set; } Property Value Type Description J2N.Text.ICharSequence"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IValueQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IValueQueryNode-1.html",
    "title": "Interface IValueQueryNode<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IValueQueryNode<T> This interface should be implemented by IQueryNode that holds an arbitrary value. Inherited Members IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IValueQueryNode<T> : IQueryNode Type Parameters Name Description T the value's type Properties | Improve this Doc View Source Value Declaration T Value { get; set; } Property Value Type Description T"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchAllDocsQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchAllDocsQueryNode.html",
    "title": "Class MatchAllDocsQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchAllDocsQueryNode A MatchAllDocsQueryNode indicates that a query node tree or subtree will match all documents if executed in the index. Inheritance System.Object QueryNode MatchAllDocsQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source MatchAllDocsQueryNode() Declaration public MatchAllDocsQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchNoDocsQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchNoDocsQueryNode.html",
    "title": "Class MatchNoDocsQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchNoDocsQueryNode A MatchNoDocsQueryNode indicates that a query node tree or subtree will not match any documents if executed in the index. Inheritance System.Object QueryNode DeletedQueryNode MatchNoDocsQueryNode Implements IQueryNode Inherited Members DeletedQueryNode.ToQueryString(IEscapeQuerySyntax) DeletedQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchNoDocsQueryNode : DeletedQueryNode, IQueryNode Constructors | Improve this Doc View Source MatchNoDocsQueryNode() Declaration public MatchNoDocsQueryNode() Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides DeletedQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.Modifier.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.Modifier.html",
    "title": "Enum Modifier | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Modifier Modifier type: such as required (REQ), prohibited (NOT) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public enum Modifier Fields Name Description MOD_NONE MOD_NOT MOD_REQ Extension Methods ModifierExtensions.ToDigitString() ModifierExtensions.ToLargeString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierExtensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierExtensions.html",
    "title": "Class ModifierExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ModifierExtensions Inheritance System.Object ModifierExtensions 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public static class ModifierExtensions Methods | Improve this Doc View Source ToDigitString(Modifier) Declaration public static string ToDigitString(this Modifier modifier) Parameters Type Name Description Modifier modifier Returns Type Description System.String | Improve this Doc View Source ToLargeString(Modifier) Declaration public static string ToLargeString(this Modifier modifier) Parameters Type Name Description Modifier modifier Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierQueryNode.html",
    "title": "Class ModifierQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ModifierQueryNode A ModifierQueryNode indicates the modifier value (+,-,?,NONE) for each term on the query string. For example \"+t1 -t2 t3\" will have a tree of: <BooleanQueryNode> <ModifierQueryNode modifier=\"MOD_REQ\"> <t1/> </ModifierQueryNode> <ModifierQueryNode modifier=\"MOD_NOT\"> <t2/> </ModifierQueryNode> <t3/> </BooleanQueryNode> Inheritance System.Object QueryNode ModifierQueryNode BooleanModifierNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ModifierQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source ModifierQueryNode(IQueryNode, Modifier) Used to store the modifier value on the original query string Declaration public ModifierQueryNode(IQueryNode query, Modifier mod) Parameters Type Name Description IQueryNode query QueryNode subtree Modifier mod Modifier Value Properties | Improve this Doc View Source Modifier Declaration public virtual Modifier Modifier { get; } Property Value Type Description Modifier Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source SetChild(IQueryNode) Declaration public virtual void SetChild(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.NoTokenFoundQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.NoTokenFoundQueryNode.html",
    "title": "Class NoTokenFoundQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoTokenFoundQueryNode A NoTokenFoundQueryNode is used if a term is convert into no tokens by the tokenizer/lemmatizer/analyzer (null). Inheritance System.Object QueryNode DeletedQueryNode NoTokenFoundQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NoTokenFoundQueryNode : DeletedQueryNode, IQueryNode Constructors | Improve this Doc View Source NoTokenFoundQueryNode() Declaration public NoTokenFoundQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides DeletedQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides DeletedQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides DeletedQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OpaqueQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OpaqueQueryNode.html",
    "title": "Class OpaqueQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpaqueQueryNode A OpaqueQueryNode is used for specify values that are not supposed to be parsed by the parser. For example: and XPATH query in the middle of a query string a b @xpath:&apos;/bookstore/book[1]/title&apos; c d Inheritance System.Object QueryNode OpaqueQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class OpaqueQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source OpaqueQueryNode(String, String) Declaration public OpaqueQueryNode(string schema, string value) Parameters Type Name Description System.String schema schema identifier System.String value value that was not parsed Properties | Improve this Doc View Source Schema Gets the schema Declaration public virtual string Schema { get; } Property Value Type Description System.String | Improve this Doc View Source Value Gets the value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OrQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OrQueryNode.html",
    "title": "Class OrQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OrQueryNode A OrQueryNode represents an OR boolean operation performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode OrQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class OrQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source OrQueryNode(IList<IQueryNode>) Declaration public OrQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be or'ed Methods | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.html",
    "title": "Class PathQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PathQueryNode A PathQueryNode is used to store queries like /company/USA/California /product/shoes/brown. QueryText are objects that contain the text, begin position and end position in the query. Example how the text parser creates these objects: IList<PathQueryNode.QueryText> values = new List<PathQueryNode.QueryText>(); values.Add(new PathQueryNode.QueryText(\"company\", 1, 7)); values.Add(new PathQueryNode.QueryText(\"USA\", 9, 12)); values.Add(new PathQueryNode.QueryText(\"California\", 14, 23)); QueryNode q = new PathQueryNode(values); Inheritance System.Object QueryNode PathQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PathQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source PathQueryNode(IList<PathQueryNode.QueryText>) Declaration public PathQueryNode(IList<PathQueryNode.QueryText> pathElements) Parameters Type Name Description System.Collections.Generic.IList < PathQueryNode.QueryText > pathElements List of QueryText objects Properties | Improve this Doc View Source PathElements Gets or Sets the a List with all QueryText elements Declaration public virtual IList<PathQueryNode.QueryText> PathElements { get; set; } Property Value Type Description System.Collections.Generic.IList < PathQueryNode.QueryText > QueryText List size Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFirstPathElement() Returns the System.String value of a specific QueryText element Declaration public virtual string GetFirstPathElement() Returns Type Description System.String The System.String for a specific QueryText element | Improve this Doc View Source GetPathElement(Int32) Returns the a specific QueryText element Declaration public virtual PathQueryNode.QueryText GetPathElement(int index) Parameters Type Name Description System.Int32 index Returns Type Description PathQueryNode.QueryText QueryText List size | Improve this Doc View Source GetPathElements(Int32) Returns a List QueryText element from position startIndex Declaration public virtual IList<PathQueryNode.QueryText> GetPathElements(int startIndex) Parameters Type Name Description System.Int32 startIndex Returns Type Description System.Collections.Generic.IList < PathQueryNode.QueryText > a List QueryText element from position startIndex | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.QueryText.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.QueryText.html",
    "title": "Class PathQueryNode.QueryText | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PathQueryNode.QueryText Term text with a beginning and end position Inheritance System.Object PathQueryNode.QueryText 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) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryText Constructors | Improve this Doc View Source QueryText(String, Int32, Int32) Declaration public QueryText(string value, int begin, int end) Parameters Type Name Description System.String value text value System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source Begin Gets the begin Declaration public virtual int Begin { get; } Property Value Type Description System.Int32 | Improve this Doc View Source End Gets the end Declaration public virtual int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Gets the value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PhraseSlopQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PhraseSlopQueryNode.html",
    "title": "Class PhraseSlopQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhraseSlopQueryNode Query node for PhraseQuery 's slop factor. Inheritance System.Object QueryNode PhraseSlopQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseSlopQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source PhraseSlopQueryNode(IQueryNode, Int32) Declaration public PhraseSlopQueryNode(IQueryNode query, int value) Parameters Type Name Description IQueryNode query System.Int32 value Exceptions Type Condition QueryNodeError throw in overridden method to disallow Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual int Value { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.html",
    "title": "Class ProximityQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ProximityQueryNode A ProximityQueryNode represents a query where the terms should meet specific distance conditions. (a b c) WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] (\"a\" \"b\" \"c\") WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] TODO: Add this to the future standard Lucene parser/processor/builder Inheritance System.Object QueryNode BooleanQueryNode ProximityQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ProximityQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source ProximityQueryNode(IList<IQueryNode>, String, ProximityQueryNode.Type, Boolean) Declaration public ProximityQueryNode(IList<IQueryNode> clauses, string field, ProximityQueryNode.Type type, bool inorder) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses QueryNode children System.String field field name ProximityQueryNode.Type type type of proximity query System.Boolean inorder true, if the tokens should be matched in the order of the clauses | Improve this Doc View Source ProximityQueryNode(IList<IQueryNode>, String, ProximityQueryNode.Type, Int32, Boolean) Declaration public ProximityQueryNode(IList<IQueryNode> clauses, string field, ProximityQueryNode.Type type, int distance, bool inorder) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses QueryNode children System.String field field name ProximityQueryNode.Type type type of proximity query System.Int32 distance positive integer that specifies the distance System.Boolean inorder true, if the tokens should be matched in the order of the clauses Properties | Improve this Doc View Source Distance Gets the distance Declaration public virtual int Distance { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Gets or Sets the field. Returns null if the field was not specified in the query string. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsInOrder terms must be matched in the specified order Declaration public virtual bool IsInOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source ProximityType Declaration public virtual ProximityQueryNode.Type ProximityType { get; } Property Value Type Description ProximityQueryNode.Type Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides BooleanQueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() Gets the field as a string. Returns null if the field was not specified in the query string. Declaration public virtual string GetFieldAsString() Returns Type Description System.String | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.Type.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.Type.html",
    "title": "Enum ProximityQueryNode.Type | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum ProximityQueryNode.Type Distance condition: PARAGRAPH, SENTENCE, or NUMBER Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public enum Type Fields Name Description NUMBER PARAGRAPH SENTENCE Extension Methods ProximityQueryNode_TypeExtensions.ToQueryString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode_TypeExtensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode_TypeExtensions.html",
    "title": "Class ProximityQueryNode_TypeExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ProximityQueryNode_TypeExtensions Inheritance System.Object ProximityQueryNode_TypeExtensions 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public static class ProximityQueryNode_TypeExtensions Methods | Improve this Doc View Source ToQueryString(ProximityQueryNode.Type) Declaration public static string ToQueryString(this ProximityQueryNode.Type type) Parameters Type Name Description ProximityQueryNode.Type type Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityType.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityType.html",
    "title": "Class ProximityType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ProximityType utility class containing the distance condition and number Inheritance System.Object ProximityType 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ProximityType Constructors | Improve this Doc View Source ProximityType(ProximityQueryNode.Type) Declaration public ProximityType(ProximityQueryNode.Type type) Parameters Type Name Description ProximityQueryNode.Type type | Improve this Doc View Source ProximityType(ProximityQueryNode.Type, Int32) Declaration public ProximityType(ProximityQueryNode.Type type, int distance) Parameters Type Name Description ProximityQueryNode.Type type System.Int32 distance"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html",
    "title": "Class QueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryNode A QueryNode is the default implementation of the interface IQueryNode Inheritance System.Object QueryNode BooleanQueryNode BoostQueryNode DeletedQueryNode FieldQueryNode GroupQueryNode MatchAllDocsQueryNode ModifierQueryNode OpaqueQueryNode PathQueryNode PhraseSlopQueryNode SlopQueryNode TokenizedPhraseQueryNode AbstractRangeQueryNode<T> MultiPhraseQueryNode NumericQueryNode RegexpQueryNode Implements IQueryNode 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) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryNode : IQueryNode Fields | Improve this Doc View Source m_toQueryStringIgnoreFields If set to true the the method toQueryString will not write field names Declaration protected bool m_toQueryStringIgnoreFields Field Value Type Description System.Boolean | Improve this Doc View Source PLAINTEXT_FIELD_NAME index default field Declaration public static readonly string PLAINTEXT_FIELD_NAME Field Value Type Description System.String Properties | Improve this Doc View Source IsLeaf Declaration public virtual bool IsLeaf { get; protected set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsRoot Declaration protected virtual bool IsRoot { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Declaration public virtual IQueryNode Parent { get; } Property Value Type Description IQueryNode | Improve this Doc View Source TagMap Gets a map containing all tags attached to this query node. Declaration public virtual IDictionary<string, object> TagMap { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Methods | Improve this Doc View Source Add(IQueryNode) Declaration public void Add(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source Add(IList<IQueryNode>) Declaration public void Add(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source Allocate() Declaration protected virtual void Allocate() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CloneTree() Declaration public virtual IQueryNode CloneTree() Returns Type Description IQueryNode | Improve this Doc View Source ContainsTag(String) verify if a node contains a tag Declaration public virtual bool ContainsTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Boolean | Improve this Doc View Source GetChildren() a List for QueryNode object. Returns null, for nodes that do not contain children. All leaf Nodes return null. Declaration public IList<IQueryNode> GetChildren() Returns Type Description System.Collections.Generic.IList < IQueryNode > | Improve this Doc View Source GetTag(String) Declaration public virtual object GetTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Object | Improve this Doc View Source IsDefaultField(String) This method is use toQueryString to detect if fld is the default field Declaration protected virtual bool IsDefaultField(string fld) Parameters Type Name Description System.String fld field name Returns Type Description System.Boolean true if fld is the default field | Improve this Doc View Source RemoveFromParent() Declaration public virtual void RemoveFromParent() | Improve this Doc View Source Set(IList<IQueryNode>) Declaration public void Set(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source SetTag(String, Object) Declaration public virtual void SetTag(string tagName, object value) Parameters Type Name Description System.String tagName System.Object value | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public abstract string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String | Improve this Doc View Source ToString() Every implementation of this class should return pseudo xml like this: For FieldQueryNode: <field start='1' end='2' field='subject' text='foo'/> Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also ToString () | Improve this Doc View Source UnsetTag(String) Declaration public virtual void UnsetTag(string tagName) Parameters Type Name Description System.String tagName Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QuotedFieldQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QuotedFieldQueryNode.html",
    "title": "Class QuotedFieldQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QuotedFieldQueryNode A QuotedFieldQueryNode represents phrase query. Example: \"life is great\" Inheritance System.Object QueryNode FieldQueryNode QuotedFieldQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class QuotedFieldQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source QuotedFieldQueryNode(String, ICharSequence, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name J2N.Text.ICharSequence text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source QuotedFieldQueryNode(String, String, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source QuotedFieldQueryNode(String, StringBuilder, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.SlopQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.SlopQueryNode.html",
    "title": "Class SlopQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SlopQueryNode A SlopQueryNode represents phrase query with a slop. From Lucene FAQ: Is there a way to use a proximity operator (like near or within) with Lucene? There is a variable called slop that allows you to perform NEAR/WITHIN-like queries. By default, slop is set to 0 so that only exact phrases will match. When using TextParser you can use this syntax to specify the slop: \"doug cutting\"~2 will find documents that contain \"doug cutting\" as well as ones that contain \"cutting doug\". Inheritance System.Object QueryNode SlopQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class SlopQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source SlopQueryNode(IQueryNode, Int32) Declaration public SlopQueryNode(IQueryNode query, int value) Parameters Type Name Description IQueryNode query QueryNode Tree with the phrase System.Int32 value slop value Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual int Value { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.TokenizedPhraseQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.TokenizedPhraseQueryNode.html",
    "title": "Class TokenizedPhraseQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenizedPhraseQueryNode A TokenizedPhraseQueryNode represents a node created by a code that tokenizes/lemmatizes/analyzes. Inheritance System.Object QueryNode TokenizedPhraseQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenizedPhraseQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source TokenizedPhraseQueryNode() Declaration public TokenizedPhraseQueryNode() Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.EscapeQuerySyntaxType.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.EscapeQuerySyntaxType.html",
    "title": "Enum EscapeQuerySyntaxType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum EscapeQuerySyntaxType Type of escaping: String for escaping syntax, NORMAL for escaping reserved words (like AND) in terms Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public enum EscapeQuerySyntaxType Remarks Renamed from Type in Lucene to prevent collisions with System.Type. Fields Name Description NORMAL STRING"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Parser <!-- 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. --> Necessary interfaces to implement text parsers. Parser The package org.apache.lucene.queryparser.flexible.parser contains interfaces that should be implemented by the parsers. Parsers produce QueryNode Trees from a string object. These package still needs some work to add support to for multiple parsers. Features that should be supported for the future, related with the parser: - QueryNode tree should be able convertible to any parser syntax. - The query syntax should support calling other parsers. - QueryNode tree created by multiple parsers. Interfaces IEscapeQuerySyntax A parser needs to implement IEscapeQuerySyntax to allow the IQueryNode to escape the queries, when the ToQueryString method is called. ISyntaxParser A parser needs to implement ISyntaxParser interface Enums EscapeQuerySyntaxType Type of escaping: String for escaping syntax, NORMAL for escaping reserved words (like AND) in terms"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.IEscapeQuerySyntax.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.IEscapeQuerySyntax.html",
    "title": "Interface IEscapeQuerySyntax | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IEscapeQuerySyntax A parser needs to implement IEscapeQuerySyntax to allow the IQueryNode to escape the queries, when the ToQueryString method is called. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface IEscapeQuerySyntax Methods | Improve this Doc View Source Escape(ICharSequence, CultureInfo, EscapeQuerySyntaxType) Declaration ICharSequence Escape(ICharSequence text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description J2N.Text.ICharSequence text text to be escaped System.Globalization.CultureInfo locale locale for the current query EscapeQuerySyntaxType type select the type of escape operation to use Returns Type Description J2N.Text.ICharSequence escaped text | Improve this Doc View Source Escape(String, CultureInfo, EscapeQuerySyntaxType) Declaration string Escape(string text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description System.String text text to be escaped System.Globalization.CultureInfo locale locale for the current query EscapeQuerySyntaxType type select the type of escape operation to use Returns Type Description System.String escaped text"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.ISyntaxParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.ISyntaxParser.html",
    "title": "Interface ISyntaxParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ISyntaxParser A parser needs to implement ISyntaxParser interface Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ISyntaxParser Methods | Improve this Doc View Source Parse(String, String) Declaration IQueryNode Parse(string query, string field) Parameters Type Name Description System.String query query data to be parsed System.String field default field name Returns Type Description IQueryNode QueryNode tree"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors <!-- 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. --> Interfaces and implementations used by query node processors Query Node Processors The package org.apache.lucene.queryParser.processors contains interfaces that should be implemented by every query node processor. The interface that every query node processor should implement is QueryNodeProcessor . A query node processor should be used to process a QueryNode tree. QueryNode trees can be programmatically created or generated by a text parser. See Lucene.Net.QueryParsers.Flexible.Core.Parser for more details about text parsers. A query node processor should be used to process a QueryNode tree. QueryNode trees can be programmatically created or generated by a text parser. See Lucene.Net.QueryParsers.Flexible.Core.Parser for more details about text parsers. A pipeline of processors can be assembled using QueryNodeProcessorPipeline . Implementors may want to extend <xref:Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorImpl>, which simplifies the implementation, because it walks automatically the QueryNode . See <xref:Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorImpl> for more details. Classes NoChildOptimizationQueryNodeProcessor A NoChildOptimizationQueryNodeProcessor removes every BooleanQueryNode, BoostQueryNode, TokenizedPhraseQueryNode or ModifierQueryNode that do not have a valid children. Example: When the children of these nodes are removed for any reason then the nodes may become invalid. QueryNodeProcessor This is a default implementation for the IQueryNodeProcessor interface, it's an abstract class, so it should be extended by classes that want to process a IQueryNode tree. This class process IQueryNode s from left to right in the tree. While it's walking down the tree, for every node, PreProcessNode(IQueryNode) is invoked. After a node's children are processed, PostProcessNode(IQueryNode) is invoked for that node. SetChildrenOrder(IList<IQueryNode>) is invoked before PostProcessNode(IQueryNode) only if the node has at least one child, in SetChildrenOrder(IList<IQueryNode>) the implementor might redefine the children order or remove any children from the children list. Here is an example about how it process the nodes: a / \\ b e / \\ c d Here is the order the methods would be invoked for the tree described above: PreProcessNode( a ); PreProcessNode( b ); PreProcessNode( c ); PostProcessNode( c ); PreProcessNode( d ); PostProcessNode( d ); SetChildrenOrder( bChildrenList ); PostProcessNode( b ); PreProcessNode( e ); PostProcessNode( e ); SetChildrenOrder( aChildrenList ); PostProcessNode( a ) QueryNodeProcessorPipeline A QueryNodeProcessorPipeline class should be used to build a query node processor pipeline. When a query node tree is processed using this class, it passes the query node tree to each processor on the pipeline and the result from each processor is passed to the next one, always following the order the processors were on the pipeline. When a QueryConfigHandler object is set on a QueryNodeProcessorPipeline , it also takes care of setting this QueryConfigHandler on all processor on pipeline. RemoveDeletedQueryNodesProcessor A QueryNodeProcessorPipeline class removes every instance of DeletedQueryNode from a query node tree. If the resulting root node is a DeletedQueryNode , MatchNoDocsQueryNode is returned. Interfaces IQueryNodeProcessor An IQueryNodeProcessor is an interface for classes that process a IQueryNode tree. The implementor of this class should perform some operation on a query node tree and return the same or another query node tree. It also may carry a QueryConfigHandler object that contains configuration about the query represented by the query tree or the collection/index where it's intended to be executed. In case there is any QueryConfigHandler associated to the query tree to be processed, it should be set using SetQueryConfigHandler(QueryConfigHandler) before Process(IQueryNode) is invoked."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html",
    "title": "Interface IQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IQueryNodeProcessor An IQueryNodeProcessor is an interface for classes that process a IQueryNode tree. The implementor of this class should perform some operation on a query node tree and return the same or another query node tree. It also may carry a QueryConfigHandler object that contains configuration about the query represented by the query tree or the collection/index where it's intended to be executed. In case there is any QueryConfigHandler associated to the query tree to be processed, it should be set using SetQueryConfigHandler(QueryConfigHandler) before Process(IQueryNode) is invoked. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryNodeProcessor Methods | Improve this Doc View Source GetQueryConfigHandler() Returns the QueryConfigHandler associated to the query tree if any, otherwise it returns null Declaration QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler the QueryConfigHandler associated to the query tree if any, otherwise it returns null | Improve this Doc View Source Process(IQueryNode) Processes a query node tree. It may return the same or another query tree. I should never return null . Declaration IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree tree root node Returns Type Description IQueryNode the processed query tree | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Sets the QueryConfigHandler associated to the query tree. Declaration void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler See Also IQueryNode IQueryNodeProcessor QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html",
    "title": "Class NoChildOptimizationQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoChildOptimizationQueryNodeProcessor A NoChildOptimizationQueryNodeProcessor removes every BooleanQueryNode, BoostQueryNode, TokenizedPhraseQueryNode or ModifierQueryNode that do not have a valid children. Example: When the children of these nodes are removed for any reason then the nodes may become invalid. Inheritance System.Object QueryNodeProcessor NoChildOptimizationQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NoChildOptimizationQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NoChildOptimizationQueryNodeProcessor() Declaration public NoChildOptimizationQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html",
    "title": "Class QueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryNodeProcessor This is a default implementation for the IQueryNodeProcessor interface, it's an abstract class, so it should be extended by classes that want to process a IQueryNode tree. This class process IQueryNode s from left to right in the tree. While it's walking down the tree, for every node, PreProcessNode(IQueryNode) is invoked. After a node's children are processed, PostProcessNode(IQueryNode) is invoked for that node. SetChildrenOrder(IList<IQueryNode>) is invoked before PostProcessNode(IQueryNode) only if the node has at least one child, in SetChildrenOrder(IList<IQueryNode>) the implementor might redefine the children order or remove any children from the children list. Here is an example about how it process the nodes: a / \\ b e / \\ c d Here is the order the methods would be invoked for the tree described above: PreProcessNode( a ); PreProcessNode( b ); PreProcessNode( c ); PostProcessNode( c ); PreProcessNode( d ); PostProcessNode( d ); SetChildrenOrder( bChildrenList ); PostProcessNode( b ); PreProcessNode( e ); PostProcessNode( e ); SetChildrenOrder( aChildrenList ); PostProcessNode( a ) Inheritance System.Object QueryNodeProcessor NoChildOptimizationQueryNodeProcessor RemoveDeletedQueryNodesProcessor BooleanModifiersQueryNodeProcessor AllowLeadingWildcardProcessor AnalyzerQueryNodeProcessor BooleanSingleChildOptimizationQueryNodeProcessor BoostQueryNodeProcessor DefaultPhraseSlopQueryNodeProcessor FuzzyQueryNodeProcessor LowercaseExpandedTermsQueryNodeProcessor MatchAllDocsQueryNodeProcessor MultiFieldQueryNodeProcessor MultiTermRewriteMethodProcessor NumericQueryNodeProcessor NumericRangeQueryNodeProcessor OpenRangeQueryNodeProcessor PhraseSlopQueryNodeProcessor RemoveEmptyNonLeafQueryNodeProcessor TermRangeQueryNodeProcessor WildcardQueryNodeProcessor Implements IQueryNodeProcessor 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.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryNodeProcessor : IQueryNodeProcessor Constructors | Improve this Doc View Source QueryNodeProcessor() Declaration public QueryNodeProcessor() | Improve this Doc View Source QueryNodeProcessor(QueryConfigHandler) Declaration public QueryNodeProcessor(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Methods | Improve this Doc View Source GetQueryConfigHandler() For reference about this method check: GetQueryConfigHandler() . Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler QueryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler | Improve this Doc View Source PostProcessNode(IQueryNode) This method is invoked for every node when walking up the tree. Declaration protected abstract IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node node the query node to be post-processed Returns Type Description IQueryNode a query node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source PreProcessNode(IQueryNode) This method is invoked for every node when walking down the tree. Declaration protected abstract IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node the query node to be pre-processed Returns Type Description IQueryNode a query node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source ProcessChildren(IQueryNode) This method is called every time a child is processed. Declaration protected virtual void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree the query node child to be processed Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) This method is invoked for every node that has at least on child. It's invoked right before PostProcessNode(IQueryNode) is invoked. Declaration protected abstract IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children the list containing all current node's children Returns Type Description System.Collections.Generic.IList < IQueryNode > a new list containing all children that should be set to the current node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) For reference about this method check: SetQueryConfigHandler(QueryConfigHandler) . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler Implements IQueryNodeProcessor See Also IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html",
    "title": "Class QueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryNodeProcessorPipeline A QueryNodeProcessorPipeline class should be used to build a query node processor pipeline. When a query node tree is processed using this class, it passes the query node tree to each processor on the pipeline and the result from each processor is passed to the next one, always following the order the processors were on the pipeline. When a QueryConfigHandler object is set on a QueryNodeProcessorPipeline , it also takes care of setting this QueryConfigHandler on all processor on pipeline. Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline Implements IQueryNodeProcessor System.Collections.Generic.IList < IQueryNodeProcessor > System.Collections.Generic.ICollection < IQueryNodeProcessor > System.Collections.Generic.IEnumerable < IQueryNodeProcessor > 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.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeProcessorPipeline : IQueryNodeProcessor, IList<IQueryNodeProcessor>, ICollection<IQueryNodeProcessor>, IEnumerable<IQueryNodeProcessor>, IEnumerable Constructors | Improve this Doc View Source QueryNodeProcessorPipeline() Constructs an empty query node processor pipeline. Declaration public QueryNodeProcessorPipeline() | Improve this Doc View Source QueryNodeProcessorPipeline(QueryConfigHandler) Constructs with a QueryConfigHandler object. Declaration public QueryNodeProcessorPipeline(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Properties | Improve this Doc View Source Count System.Collections.Generic.ICollection<T>.Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly System.Collections.Generic.ICollection<T>.IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] System.Collections.Generic.IList<T>.Item[System.Int32] Declaration public virtual IQueryNodeProcessor this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description IQueryNodeProcessor Methods | Improve this Doc View Source Add(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Add(T) Declaration public virtual bool Add(IQueryNodeProcessor processor) Parameters Type Name Description IQueryNodeProcessor processor Returns Type Description System.Boolean | Improve this Doc View Source Clear() System.Collections.Generic.ICollection<T>.Clear() Declaration public virtual void Clear() | Improve this Doc View Source Contains(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Contains(T) Declaration public virtual bool Contains(IQueryNodeProcessor item) Parameters Type Name Description IQueryNodeProcessor item Returns Type Description System.Boolean | Improve this Doc View Source Contains(Object) Declaration public virtual bool Contains(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(IQueryNodeProcessor[], Int32) System.Collections.Generic.ICollection<T>.CopyTo(T[], System.Int32) Declaration public virtual void CopyTo(IQueryNodeProcessor[] array, int arrayIndex) Parameters Type Name Description IQueryNodeProcessor [] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() System.Collections.Generic.IEnumerable<T>.GetEnumerator() Declaration public virtual IEnumerator<IQueryNodeProcessor> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < IQueryNodeProcessor > | Improve this Doc View Source GetQueryConfigHandler() For reference about this method check: GetQueryConfigHandler() . Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler QueryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler | Improve this Doc View Source GetRange(Int32, Int32) Declaration public virtual IList<IQueryNodeProcessor> GetRange(int index, int count) Parameters Type Name Description System.Int32 index System.Int32 count Returns Type Description System.Collections.Generic.IList < IQueryNodeProcessor > | Improve this Doc View Source IndexOf(IQueryNodeProcessor) System.Collections.Generic.IList<T>.IndexOf(T) Declaration public virtual int IndexOf(IQueryNodeProcessor o) Parameters Type Name Description IQueryNodeProcessor o Returns Type Description System.Int32 | Improve this Doc View Source Insert(Int32, IQueryNodeProcessor) Declaration public virtual void Insert(int index, IQueryNodeProcessor item) Parameters Type Name Description System.Int32 index IQueryNodeProcessor item | Improve this Doc View Source Process(IQueryNode) For reference about this method check: Process(IQueryNode) . Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree the query node tree to be processed Returns Type Description IQueryNode Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing See Also IQueryNode | Improve this Doc View Source Remove(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Remove(T) Declaration public virtual bool Remove(IQueryNodeProcessor o) Parameters Type Name Description IQueryNodeProcessor o Returns Type Description System.Boolean | Improve this Doc View Source RemoveAt(Int32) System.Collections.Generic.IList<T>.RemoveAt(System.Int32) Declaration public virtual void RemoveAt(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source RemoveRange(Int32, Int32) Declaration public virtual void RemoveRange(int index, int count) Parameters Type Name Description System.Int32 index System.Int32 count | Improve this Doc View Source Set(Int32, IQueryNodeProcessor) Declaration public virtual IQueryNodeProcessor Set(int index, IQueryNodeProcessor processor) Parameters Type Name Description System.Int32 index IQueryNodeProcessor processor Returns Type Description IQueryNodeProcessor | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) For reference about this method check: SetQueryConfigHandler(QueryConfigHandler) . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler to be set. See Also GetQueryConfigHandler () QueryConfigHandler Explicit Interface Implementations | Improve this Doc View Source ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Add(T) Declaration void ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor item) Parameters Type Name Description IQueryNodeProcessor item | Improve this Doc View Source IEnumerable.GetEnumerator() System.Collections.IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements IQueryNodeProcessor System.Collections.Generic.IList<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.RemoveDeletedQueryNodesProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.RemoveDeletedQueryNodesProcessor.html",
    "title": "Class RemoveDeletedQueryNodesProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RemoveDeletedQueryNodesProcessor A QueryNodeProcessorPipeline class removes every instance of DeletedQueryNode from a query node tree. If the resulting root node is a DeletedQueryNode , MatchNoDocsQueryNode is returned. Inheritance System.Object QueryNodeProcessor RemoveDeletedQueryNodesProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class RemoveDeletedQueryNodesProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source RemoveDeletedQueryNodesProcessor() Declaration public RemoveDeletedQueryNodesProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeError.html",
    "title": "Class QueryNodeError | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryNodeError Error class with NLS support Inheritance System.Object System.Exception QueryNodeError Implements System.Runtime.Serialization.ISerializable INLSException Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeError : Exception, ISerializable, INLSException Constructors | Improve this Doc View Source QueryNodeError(IMessage) Declaration public QueryNodeError(IMessage message) Parameters Type Name Description IMessage message NLS Message Object | Improve this Doc View Source QueryNodeError(IMessage, Exception) Declaration public QueryNodeError(IMessage message, Exception throwable) Parameters Type Name Description IMessage message NLS Message Object System.Exception throwable An exception instance to wrap | Improve this Doc View Source QueryNodeError(Exception) Declaration public QueryNodeError(Exception throwable) Parameters Type Name Description System.Exception throwable An exception instance to wrap Properties | Improve this Doc View Source MessageObject MessageObject Declaration public virtual IMessage MessageObject { get; } Property Value Type Description IMessage Implements System.Runtime.Serialization.ISerializable INLSException See Also NLS IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeException.html",
    "title": "Class QueryNodeException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryNodeException This exception should be thrown if something wrong happens when dealing with IQueryNode s. It also supports NLS messages. Inheritance System.Object System.Exception QueryNodeException QueryNodeParseException Implements System.Runtime.Serialization.ISerializable INLSException Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeException : Exception, ISerializable, INLSException Constructors | Improve this Doc View Source QueryNodeException(IMessage) Declaration public QueryNodeException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source QueryNodeException(IMessage, Exception) Declaration public QueryNodeException(IMessage message, Exception throwable) Parameters Type Name Description IMessage message System.Exception throwable | Improve this Doc View Source QueryNodeException(Exception) Declaration public QueryNodeException(Exception throwable) Parameters Type Name Description System.Exception throwable Fields | Improve this Doc View Source m_message Declaration protected IMessage m_message Field Value Type Description IMessage Properties | Improve this Doc View Source Message Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message | Improve this Doc View Source MessageObject Declaration public virtual IMessage MessageObject { get; } Property Value Type Description IMessage Methods | Improve this Doc View Source GetLocalizedMessage() Declaration public virtual string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration public virtual string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description System.Globalization.CultureInfo locale Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Exception.ToString() Implements System.Runtime.Serialization.ISerializable INLSException See Also IMessage NLS INLSException IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeParseException.html",
    "title": "Class QueryNodeParseException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryNodeParseException This should be thrown when an exception happens during the query parsing from string to the query node tree. Inheritance System.Object System.Exception QueryNodeException QueryNodeParseException ParseException Implements System.Runtime.Serialization.ISerializable INLSException Inherited Members QueryNodeException.m_message QueryNodeException.MessageObject QueryNodeException.Message QueryNodeException.GetLocalizedMessage() QueryNodeException.GetLocalizedMessage(CultureInfo) QueryNodeException.ToString() System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeParseException : QueryNodeException, ISerializable, INLSException Constructors | Improve this Doc View Source QueryNodeParseException(IMessage) Declaration public QueryNodeParseException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source QueryNodeParseException(IMessage, Exception) Declaration public QueryNodeParseException(IMessage message, Exception throwable) Parameters Type Name Description IMessage message System.Exception throwable | Improve this Doc View Source QueryNodeParseException(Exception) Declaration public QueryNodeParseException(Exception throwable) Parameters Type Name Description System.Exception throwable Properties | Improve this Doc View Source BeginColumn For EndOfLine and EndOfFile (\"<EOF>\") parsing problems the last char in the string is returned. For the case where the parser is not able to figure out the line and column number -1 will be returned. Returns column of the first char where the problem was found. Declaration public virtual int BeginColumn { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine For EndOfLine and EndOfFile (\"<EOF>\") parsing problems the last char in the string is returned. For the case where the parser is not able to figure out the line and column number -1 will be returned. Returns line where the problem was found. Declaration public virtual int BeginLine { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source ErrorToken The errorToken in the query Declaration public virtual string ErrorToken { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source Query Declaration public virtual string Query { get; } Property Value Type Description System.String Methods | Improve this Doc View Source SetNonLocalizedMessage(IMessage) Declaration public virtual void SetNonLocalizedMessage(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source SetQuery(String) Declaration public virtual void SetQuery(string query) Parameters Type Name Description System.String query Implements System.Runtime.Serialization.ISerializable INLSException See Also QueryNodeException ISyntaxParser IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper-1.html",
    "title": "Class QueryParserHelper<TQuery> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserHelper<TQuery> This class is a helper for the query parser framework, it does all the three query parser phrases at once: text parsing, query processing and query building. It contains methods that allows the user to change the implementation used on the three phases. Inheritance System.Object QueryParserHelper<TQuery> StandardQueryParser 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.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserHelper<TQuery> Type Parameters Name Description TQuery Constructors | Improve this Doc View Source QueryParserHelper(QueryConfigHandler, ISyntaxParser, IQueryNodeProcessor, IQueryBuilder<TQuery>) Creates a query parser helper object using the specified configuration, text parser, processor and builder. Declaration public QueryParserHelper(QueryConfigHandler queryConfigHandler, ISyntaxParser syntaxParser, IQueryNodeProcessor processor, IQueryBuilder<TQuery> builder) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler that will be initially set to this helper ISyntaxParser syntaxParser the text parser that will be initially set to this helper IQueryNodeProcessor processor the query processor that will be initially set to this helper IQueryBuilder <TQuery> builder the query builder that will be initially set to this helper See Also IQueryNodeProcessor ISyntaxParser IQueryBuilder <TQuery> QueryConfigHandler Properties | Improve this Doc View Source QueryBuilder Returns the query builder used to build a object from the query node tree. The object produced by this builder is returned by Parse(String, String) . Declaration public virtual IQueryBuilder<TQuery> QueryBuilder { get; } Property Value Type Description IQueryBuilder <TQuery> See Also SetQueryBuilder(IQueryBuilder<TQuery>) IQueryBuilder <TQuery> | Improve this Doc View Source QueryConfigHandler Returns the query configuration handler, which is used during the query node tree processing. It can be null . Declaration public virtual QueryConfigHandler QueryConfigHandler { get; } Property Value Type Description QueryConfigHandler See Also QueryConfigHandler SetQueryConfigHandler(QueryConfigHandler) | Improve this Doc View Source QueryNodeProcessor Gets the processor object used to process the query node tree, it returns null if no processor is used. Declaration public virtual IQueryNodeProcessor QueryNodeProcessor { get; } Property Value Type Description IQueryNodeProcessor See Also IQueryNodeProcessor SetQueryNodeProcessor(IQueryNodeProcessor) | Improve this Doc View Source SyntaxParser Returns the text parser used to build a query node tree from a query string. The default text parser instance returned by this method is a ISyntaxParser . Declaration public virtual ISyntaxParser SyntaxParser { get; } Property Value Type Description ISyntaxParser See Also ISyntaxParser SetSyntaxParser(ISyntaxParser) Methods | Improve this Doc View Source Parse(String, String) Parses a query string to an object, usually some query object. In this method the three phases are executed: the query string is parsed using the text parser returned by SyntaxParser , the result is a query node tree. the query node tree is processed by the processor returned by QueryNodeProcessor . a object is built from the query node tree using the builder returned by QueryBuilder . Declaration public virtual TQuery Parse(string query, string defaultField) Parameters Type Name Description System.String query the query string System.String defaultField the default field used by the text parser Returns Type Description TQuery the object built from the query Exceptions Type Condition QueryNodeException if something wrong happens along the three phases | Improve this Doc View Source SetQueryBuilder(IQueryBuilder<TQuery>) The query builder that will be used to build an object from the query node tree. It cannot be null . Declaration public virtual void SetQueryBuilder(IQueryBuilder<TQuery> queryBuilder) Parameters Type Name Description IQueryBuilder <TQuery> queryBuilder the query builder used to build something from the query node tree See Also QueryBuilder IQueryBuilder <TQuery> | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Sets the query configuration handler that will be used during query processing. It can be null . It's also set to the processor returned by QueryNodeProcessor . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config the query configuration handler used during query processing, it can be null See Also QueryConfigHandler QueryConfigHandler | Improve this Doc View Source SetQueryNodeProcessor(IQueryNodeProcessor) Sets the processor that will be used to process the query node tree. If there is any QueryConfigHandler returned by QueryConfigHandler , it will be set on the processor. The argument can be null , which means that no processor will be used to process the query node tree. Declaration public virtual void SetQueryNodeProcessor(IQueryNodeProcessor processor) Parameters Type Name Description IQueryNodeProcessor processor the processor that will be used to process the query node tree, this argument can be null See Also QueryNodeProcessor IQueryNodeProcessor | Improve this Doc View Source SetSyntaxParser(ISyntaxParser) Sets the text parser that will be used to parse the query string, it cannot be null . Declaration public virtual void SetSyntaxParser(ISyntaxParser syntaxParser) Parameters Type Name Description ISyntaxParser syntaxParser the text parser that will be used to parse the query string See Also SyntaxParser ISyntaxParser See Also IQueryNodeProcessor ISyntaxParser IQueryBuilder <TQuery> QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Util <!-- 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. --> Utility classes to used with the Query Parser. Utility classes to used with the Query Parser This package contains utility classes used with the query parsers. Classes QueryNodeOperation Allow joining 2 QueryNode Trees, into one. StringUtils String manipulation routines UnescapedCharSequence J2N.Text.ICharSequence with escaped chars information."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.QueryNodeOperation.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.QueryNodeOperation.html",
    "title": "Class QueryNodeOperation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryNodeOperation Allow joining 2 QueryNode Trees, into one. Inheritance System.Object QueryNodeOperation 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.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class QueryNodeOperation Methods | Improve this Doc View Source LogicalAnd(IQueryNode, IQueryNode) perform a logical and of 2 QueryNode trees. if q1 and q2 are ANDQueryNode nodes it uses head Node from q1 and adds the children of q2 to q1 if q1 is a AND node and q2 is not, add q2 as a child of the head node of q1 if q2 is a AND node and q1 is not, add q1 as a child of the head node of q2 if q1 and q2 are not ANDQueryNode nodes, create a AND node and make q1 and q2 children of that node if q1 or q2 is null it returns the not null node if q1 = q2 = null it returns null Declaration public static IQueryNode LogicalAnd(IQueryNode q1, IQueryNode q2) Parameters Type Name Description IQueryNode q1 IQueryNode q2 Returns Type Description IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.StringUtils.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.StringUtils.html",
    "title": "Class StringUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StringUtils String manipulation routines Inheritance System.Object StringUtils 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.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class StringUtils Methods | Improve this Doc View Source ToString(Object) Declaration public static string ToString(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.UnescapedCharSequence.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.UnescapedCharSequence.html",
    "title": "Class UnescapedCharSequence | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UnescapedCharSequence J2N.Text.ICharSequence with escaped chars information. Inheritance System.Object UnescapedCharSequence Implements J2N.Text.ICharSequence 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) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class UnescapedCharSequence : ICharSequence Constructors | Improve this Doc View Source UnescapedCharSequence(ICharSequence) Create a non-escaped J2N.Text.ICharSequence Declaration public UnescapedCharSequence(ICharSequence text) Parameters Type Name Description J2N.Text.ICharSequence text | Improve this Doc View Source UnescapedCharSequence(Char[], Boolean[], Int32, Int32) Create a escaped J2N.Text.ICharSequence Declaration public UnescapedCharSequence(char[] chars, bool[] wasEscaped, int offset, int length) Parameters Type Name Description System.Char [] chars System.Boolean [] wasEscaped System.Int32 offset System.Int32 length | Improve this Doc View Source UnescapedCharSequence(String) Create a non-escaped System.String Declaration public UnescapedCharSequence(string text) Parameters Type Name Description System.String text | Improve this Doc View Source UnescapedCharSequence(StringBuilder) Create a non-escaped System.Text.StringBuilder Declaration public UnescapedCharSequence(StringBuilder text) Parameters Type Name Description System.Text.StringBuilder text Properties | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Subsequence(Int32, Int32) Declaration public ICharSequence Subsequence(int startIndex, int length) Parameters Type Name Description System.Int32 startIndex System.Int32 length Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source ToLower(ICharSequence, CultureInfo) Declaration public static ICharSequence ToLower(ICharSequence text, CultureInfo locale) Parameters Type Name Description J2N.Text.ICharSequence text System.Globalization.CultureInfo locale Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToStringEscaped() Return an escaped System.String Declaration public string ToStringEscaped() Returns Type Description System.String an escaped System.String | Improve this Doc View Source ToStringEscaped(Char[]) Return an escaped System.String Declaration public ICharSequence ToStringEscaped(char[] enabledChars) Parameters Type Name Description System.Char [] enabledChars array of chars to be escaped Returns Type Description J2N.Text.ICharSequence an escaped System.String | Improve this Doc View Source WasEscaped(ICharSequence, Int32) Declaration public static bool WasEscaped(ICharSequence text, int index) Parameters Type Name Description J2N.Text.ICharSequence text System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source WasEscaped(Int32) Declaration public bool WasEscaped(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean Explicit Interface Implementations | Improve this Doc View Source ICharSequence.HasValue Declaration bool ICharSequence.HasValue { get; } Returns Type Description System.Boolean Implements J2N.Text.ICharSequence"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Messages | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Messages <!-- 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. --> For Native Language Support (NLS), system of software internationalization. NLS message API This utility API, adds support for NLS messages in the apache code. It is currently used by the lucene \"New Flexible Query PArser\". Features: 1. Message reference in the code, using static Strings 2. Message resource validation at class load time, for easier debugging 3. Allows for message IDs to be re-factored using eclipse or other code re-factor tools 4. Allows for reference count on messages, just like code 5. Lazy loading of Message Strings 6. Normal loading Message Strings Lazy loading of Message Strings public class MessagesTestBundle extends NLS { private static final String BUNDLE_NAME = MessagesTestBundle.class.getName(); private MessagesTestBundle() { // should never be instantiated } static { // register all string ids with NLS class and initialize static string // values NLS.initializeMessages(BUNDLE_NAME, MessagesTestBundle.class); } // static string must match the strings in the property files. public static String Q0001E_INVALID_SYNTAX; public static String Q0004E_INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION; // this message is missing from the properties file public static String Q0005E_MESSAGE_NOT_IN_BUNDLE; } // Create a message reference Message invalidSyntax = new MessageImpl(MessagesTestBundle.Q0001E_INVALID_SYNTAX, \"XXX\"); // Do other stuff in the code... // when is time to display the message to the user or log the message on a file // the message is loaded from the correct bundle String message1 = invalidSyntax.getLocalizedMessage(); String message2 = invalidSyntax.getLocalizedMessage(Locale.JAPANESE); Normal loading of Message Strings String message1 = NLS.getLocalizedMessage(MessagesTestBundle.Q0004E_INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION); String message2 = NLS.getLocalizedMessage(MessagesTestBundle.Q0004E_INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION, Locale.JAPANESE); The org.apache.lucene.messages.TestNLS junit contains several other examples. The TestNLS java code is available from the Apache Lucene code repository. Classes Message Default implementation of Message interface. For Native Language Support (NLS), system of software internationalization. NLS MessageBundles classes extend this class, to implement a bundle. For Native Language Support (NLS), system of software internationalization. This interface is similar to the NLS class in eclipse.osgi.util.NLS class - initializeMessages() method resets the values of all static strings, should only be called by classes that extend from NLS (see TestMessages.java for reference) - performs validation of all message in a bundle, at class load time - performs per message validation at runtime - see NLSTest.java for usage reference MessageBundle classes may subclass this type. Interfaces IMessage Message Interface for a lazy loading. For Native Language Support (NLS), system of software internationalization. INLSException Interface that exceptions should implement to support lazy loading of messages. For Native Language Support (NLS), system of software internationalization. This Interface should be implemented by all exceptions that require translation"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.IMessage.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.IMessage.html",
    "title": "Interface IMessage | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IMessage Message Interface for a lazy loading. For Native Language Support (NLS), system of software internationalization. Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public interface IMessage Properties | Improve this Doc View Source Key Declaration string Key { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetArguments() Declaration object[] GetArguments() Returns Type Description System.Object [] | Improve this Doc View Source GetLocalizedMessage() Declaration string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description System.Globalization.CultureInfo locale Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.INLSException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.INLSException.html",
    "title": "Interface INLSException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface INLSException Interface that exceptions should implement to support lazy loading of messages. For Native Language Support (NLS), system of software internationalization. This Interface should be implemented by all exceptions that require translation Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public interface INLSException Properties | Improve this Doc View Source MessageObject an instance of a class that implements the Message interface Declaration IMessage MessageObject { get; } Property Value Type Description IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.Message.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.Message.html",
    "title": "Class Message | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Message Default implementation of Message interface. For Native Language Support (NLS), system of software internationalization. Inheritance System.Object Message Implements IMessage 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) Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax [Serializable] public class Message : IMessage Constructors | Improve this Doc View Source Message(String) Declaration public Message(string key) Parameters Type Name Description System.String key | Improve this Doc View Source Message(String, Object[]) Declaration public Message(string key, params object[] args) Parameters Type Name Description System.String key System.Object [] args Properties | Improve this Doc View Source Key Declaration public virtual string Key { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetArguments() Declaration public virtual object[] GetArguments() Returns Type Description System.Object [] | Improve this Doc View Source GetLocalizedMessage() Declaration public virtual string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration public virtual string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description System.Globalization.CultureInfo locale Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.NLS.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.NLS.html",
    "title": "Class NLS | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NLS MessageBundles classes extend this class, to implement a bundle. For Native Language Support (NLS), system of software internationalization. This interface is similar to the NLS class in eclipse.osgi.util.NLS class - initializeMessages() method resets the values of all static strings, should only be called by classes that extend from NLS (see TestMessages.java for reference) - performs validation of all message in a bundle, at class load time - performs per message validation at runtime - see NLSTest.java for usage reference MessageBundle classes may subclass this type. Inheritance System.Object NLS QueryParserMessages 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.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class NLS Constructors | Improve this Doc View Source NLS() Declaration protected NLS() Methods | Improve this Doc View Source GetLocalizedMessage(String) Declaration public static string GetLocalizedMessage(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, CultureInfo) Declaration public static string GetLocalizedMessage(string key, CultureInfo locale) Parameters Type Name Description System.String key System.Globalization.CultureInfo locale Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, CultureInfo, Object[]) Declaration public static string GetLocalizedMessage(string key, CultureInfo locale, params object[] args) Parameters Type Name Description System.String key System.Globalization.CultureInfo locale System.Object [] args Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, Object[]) Declaration public static string GetLocalizedMessage(string key, params object[] args) Parameters Type Name Description System.String key System.Object [] args Returns Type Description System.String | Improve this Doc View Source GetResourceManagerFactory() Gets the static IResourceManagerFactory instance responsible for creating System.Resources.ResourceManager instances in this class. LUCENENET specific. Declaration public static IResourceManagerFactory GetResourceManagerFactory() Returns Type Description IResourceManagerFactory | Improve this Doc View Source InitializeMessages(String, Type) Initialize a given class with the message bundle Keys Should be called from a class that extends NLS in a static block at class load time. Declaration protected static void InitializeMessages(string bundleName, Type clazz) Parameters Type Name Description System.String bundleName Property file with that contains the message bundle System.Type clazz where constants will reside | Improve this Doc View Source SetResourceManagerFactory(IResourceManagerFactory) Sets the IResourceManagerFactory used to create instances of System.Resources.ResourceManager for retrieving localized resources. Defaults to BundleResourceManagerFactory if not set. LUCENENET specific. Declaration public static void SetResourceManagerFactory(IResourceManagerFactory resourceManagerFactory) Parameters Type Name Description IResourceManagerFactory resourceManagerFactory The IResourceManagerFactory instance. Cannot be null ."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence <!-- 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. --> Precedence Query Parser Implementation Lucene Precedence Query Parser The Precedence Query Parser extends the Standard Query Parser and enables the boolean precedence. So, the query is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. Check StandardQueryParser for more details about the supported syntax and query parser functionalities. Classes PrecedenceQueryParser This query parser works exactly as the standard query parser ( StandardQueryParser ), except that it respect the boolean precedence, so <a AND b OR c AND d> is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. EXPERT: This class extends StandardQueryParser , but uses PrecedenceQueryNodeProcessorPipeline instead of StandardQueryNodeProcessorPipeline to process the query tree."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.PrecedenceQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.PrecedenceQueryParser.html",
    "title": "Class PrecedenceQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrecedenceQueryParser This query parser works exactly as the standard query parser ( StandardQueryParser ), except that it respect the boolean precedence, so <a AND b OR c AND d> is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. EXPERT: This class extends StandardQueryParser , but uses PrecedenceQueryNodeProcessorPipeline instead of StandardQueryNodeProcessorPipeline to process the query tree. Inheritance System.Object QueryParserHelper < Query > StandardQueryParser PrecedenceQueryParser Implements ICommonQueryParserConfiguration Inherited Members StandardQueryParser.ToString() StandardQueryParser.Parse(String, String) StandardQueryParser.DefaultOperator StandardQueryParser.LowercaseExpandedTerms StandardQueryParser.AllowLeadingWildcard StandardQueryParser.EnablePositionIncrements StandardQueryParser.MultiTermRewriteMethod StandardQueryParser.SetMultiFields(String[]) StandardQueryParser.GetMultiFields() StandardQueryParser.FuzzyPrefixLength StandardQueryParser.NumericConfigMap StandardQueryParser.Locale StandardQueryParser.TimeZone StandardQueryParser.SetDefaultPhraseSlop(Int32) StandardQueryParser.Analyzer StandardQueryParser.PhraseSlop StandardQueryParser.FuzzyMinSim StandardQueryParser.FieldsBoost StandardQueryParser.SetDateResolution(DateTools.Resolution) StandardQueryParser.DateResolution StandardQueryParser.SetDateResolution(IDictionary<String, Nullable<DateTools.Resolution>>) StandardQueryParser.DateResolutionMap QueryParserHelper<Query>.QueryNodeProcessor QueryParserHelper<Query>.SetQueryNodeProcessor(IQueryNodeProcessor) QueryParserHelper<Query>.SetSyntaxParser(ISyntaxParser) QueryParserHelper<Query>.SetQueryBuilder(IQueryBuilder<Query>) QueryParserHelper<Query>.QueryConfigHandler QueryParserHelper<Query>.QueryBuilder QueryParserHelper<Query>.SyntaxParser QueryParserHelper<Query>.SetQueryConfigHandler(QueryConfigHandler) 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.QueryParsers.Flexible.Precedence Assembly : Lucene.Net.QueryParser.dll Syntax public class PrecedenceQueryParser : StandardQueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source PrecedenceQueryParser() StandardQueryParser() Declaration public PrecedenceQueryParser() | Improve this Doc View Source PrecedenceQueryParser(Analyzer) StandardQueryParser(Analyzer) Declaration public PrecedenceQueryParser(Analyzer analyer) Parameters Type Name Description Analyzer analyer Implements ICommonQueryParserConfiguration See Also StandardQueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.BooleanModifiersQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.BooleanModifiersQueryNodeProcessor.html",
    "title": "Class BooleanModifiersQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanModifiersQueryNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. It walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For any other BooleanQueryNode which is not an OrQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Inheritance System.Object QueryNodeProcessor BooleanModifiersQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Precedence.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanModifiersQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanModifiersQueryNodeProcessor() Declaration public BooleanModifiersQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also DEFAULT_OPERATOR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence.Processors | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence.Processors <!-- 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. --> Processors used by Precedence Query Parser Lucene Precedence Query Parser Processors This package contains the 2 QueryNodeProcessor s used by PrecedenceQueryParser . BooleanModifiersQueryNodeProcessor : this processor is used to apply ModifierQueryNode s on BooleanQueryNode children according to the boolean type or the default operator. PrecedenceQueryNodeProcessorPipeline : this processor pipeline is used by PrecedenceQueryParser . It extends StandardQueryNodeProcessorPipeline and rearrange the pipeline so the boolean precedence is processed correctly. Check PrecedenceQueryNodeProcessorPipeline for more details. Classes BooleanModifiersQueryNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. It walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For any other BooleanQueryNode which is not an OrQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. PrecedenceQueryNodeProcessorPipeline This processor pipeline extends StandardQueryNodeProcessorPipeline and enables boolean precedence on it. EXPERT: the precedence is enabled by removing GroupQueryNodeProcessor from the StandardQueryNodeProcessorPipeline and appending BooleanModifiersQueryNodeProcessor to the pipeline."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.PrecedenceQueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.PrecedenceQueryNodeProcessorPipeline.html",
    "title": "Class PrecedenceQueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrecedenceQueryNodeProcessorPipeline This processor pipeline extends StandardQueryNodeProcessorPipeline and enables boolean precedence on it. EXPERT: the precedence is enabled by removing GroupQueryNodeProcessor from the StandardQueryNodeProcessorPipeline and appending BooleanModifiersQueryNodeProcessor to the pipeline. Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline PrecedenceQueryNodeProcessorPipeline Implements IQueryNodeProcessor System.Collections.Generic.IList < IQueryNodeProcessor > System.Collections.Generic.ICollection < IQueryNodeProcessor > System.Collections.Generic.IEnumerable < IQueryNodeProcessor > System.Collections.IEnumerable Inherited Members QueryNodeProcessorPipeline.GetQueryConfigHandler() QueryNodeProcessorPipeline.Process(IQueryNode) QueryNodeProcessorPipeline.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessorPipeline.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Clear() QueryNodeProcessorPipeline.Contains(Object) QueryNodeProcessorPipeline.Item[Int32] QueryNodeProcessorPipeline.IndexOf(IQueryNodeProcessor) QueryNodeProcessorPipeline.GetEnumerator() QueryNodeProcessorPipeline.Remove(IQueryNodeProcessor) QueryNodeProcessorPipeline.RemoveAt(Int32) QueryNodeProcessorPipeline.RemoveRange(Int32, Int32) QueryNodeProcessorPipeline.Set(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Count QueryNodeProcessorPipeline.IsReadOnly QueryNodeProcessorPipeline.GetRange(Int32, Int32) QueryNodeProcessorPipeline.Insert(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Contains(IQueryNodeProcessor) QueryNodeProcessorPipeline.CopyTo(IQueryNodeProcessor[], Int32) QueryNodeProcessorPipeline.IEnumerable.GetEnumerator() 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.QueryParsers.Flexible.Precedence.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class PrecedenceQueryNodeProcessorPipeline : StandardQueryNodeProcessorPipeline, IQueryNodeProcessor, IList<IQueryNodeProcessor>, ICollection<IQueryNodeProcessor>, IEnumerable<IQueryNodeProcessor>, IEnumerable Constructors | Improve this Doc View Source PrecedenceQueryNodeProcessorPipeline(QueryConfigHandler) StandardQueryNodeProcessorPipeline(QueryConfigHandler) Declaration public PrecedenceQueryNodeProcessorPipeline(QueryConfigHandler queryConfig) Parameters Type Name Description QueryConfigHandler queryConfig Implements IQueryNodeProcessor System.Collections.Generic.IList<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable See Also PrecedenceQueryParser StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.AnyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.AnyQueryNodeBuilder.html",
    "title": "Class AnyQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnyQueryNodeBuilder Builds a BooleanQuery of SHOULD clauses, possibly with some minimum number to match. Inheritance System.Object AnyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class AnyQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source AnyQueryNodeBuilder() Declaration public AnyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BooleanQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BooleanQueryNodeBuilder.html",
    "title": "Class BooleanQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanQueryNodeBuilder Builds a BooleanQuery object from a BooleanQueryNode object. Every children in the BooleanQueryNode object must be already tagged using QUERY_TREE_BUILDER_TAGID with a Query object. It takes in consideration if the children is a ModifierQueryNode to define the BooleanClause . Inheritance System.Object BooleanQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source BooleanQueryNodeBuilder() Declaration public BooleanQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BoostQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BoostQueryNodeBuilder.html",
    "title": "Class BoostQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostQueryNodeBuilder This builder basically reads the Query object set on the BoostQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the boost value defined in the BoostQueryNode . Inheritance System.Object BoostQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source BoostQueryNodeBuilder() Declaration public BoostQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.DummyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.DummyQueryNodeBuilder.html",
    "title": "Class DummyQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DummyQueryNodeBuilder This builder does nothing. Commonly used for IQueryNode objects that are built by its parent's builder. Inheritance System.Object DummyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DummyQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source DummyQueryNodeBuilder() Constructs a DummyQueryNodeBuilder object. Declaration public DummyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Always return null . Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query null Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also IStandardQueryBuilder QueryTreeBuilder <TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FieldQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FieldQueryNodeBuilder.html",
    "title": "Class FieldQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldQueryNodeBuilder Builds a TermQuery object from a FieldQueryNode object. Inheritance System.Object FieldQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source FieldQueryNodeBuilder() Declaration public FieldQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FuzzyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FuzzyQueryNodeBuilder.html",
    "title": "Class FuzzyQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyQueryNodeBuilder Builds a FuzzyQuery object from a FuzzyQueryNode object. Inheritance System.Object FuzzyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source FuzzyQueryNodeBuilder() Declaration public FuzzyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.GroupQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.GroupQueryNodeBuilder.html",
    "title": "Class GroupQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GroupQueryNodeBuilder Builds no object, it only returns the Query object set on the GroupQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. Inheritance System.Object GroupQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class GroupQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source GroupQueryNodeBuilder() Declaration public GroupQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Builders | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Builders <!-- 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. --> Standard Lucene Query Node Builders. Standard Lucene Query Node Builders The package org.apache.lucene.queryparser.flexible.standard.builders contains all the builders needed to build a Lucene Query object from a query node tree. These builders expect the query node tree was already processed by the StandardQueryNodeProcessorPipeline . StandardQueryTreeBuilder is a builder that already contains a defined map that maps each QueryNode object with its respective builder. Classes AnyQueryNodeBuilder Builds a BooleanQuery of SHOULD clauses, possibly with some minimum number to match. BooleanQueryNodeBuilder Builds a BooleanQuery object from a BooleanQueryNode object. Every children in the BooleanQueryNode object must be already tagged using QUERY_TREE_BUILDER_TAGID with a Query object. It takes in consideration if the children is a ModifierQueryNode to define the BooleanClause . BoostQueryNodeBuilder This builder basically reads the Query object set on the BoostQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the boost value defined in the BoostQueryNode . DummyQueryNodeBuilder This builder does nothing. Commonly used for IQueryNode objects that are built by its parent's builder. FieldQueryNodeBuilder Builds a TermQuery object from a FieldQueryNode object. FuzzyQueryNodeBuilder Builds a FuzzyQuery object from a FuzzyQueryNode object. GroupQueryNodeBuilder Builds no object, it only returns the Query object set on the GroupQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. MatchAllDocsQueryNodeBuilder Builds a MatchAllDocsQuery object from a MatchAllDocsQueryNode object. MatchNoDocsQueryNodeBuilder Builds an empty BooleanQuery object from a MatchNoDocsQueryNode object. ModifierQueryNodeBuilder Builds no object, it only returns the Query object set on the ModifierQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. MultiPhraseQueryNodeBuilder Builds a MultiPhraseQuery object from a MultiPhraseQueryNode object. NumericRangeQueryNodeBuilder Builds NumericRangeQuery s out of NumericRangeQueryNode s. PhraseQueryNodeBuilder Builds a PhraseQuery object from a TokenizedPhraseQueryNode object. PrefixWildcardQueryNodeBuilder Builds a PrefixQuery object from a PrefixWildcardQueryNode object. RegexpQueryNodeBuilder Builds a RegexpQuery object from a RegexpQueryNode object. SlopQueryNodeBuilder This builder basically reads the Query object set on the SlopQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the slop value defined in the SlopQueryNode . StandardBooleanQueryNodeBuilder This builder does the same as the BooleanQueryNodeBuilder , but this considers if the built BooleanQuery should have its coord disabled or not. StandardQueryTreeBuilder This query tree builder only defines the necessary map to build a Query tree object. It should be used to generate a Query tree object from a query node tree processed by a StandardQueryNodeProcessorPipeline . TermRangeQueryNodeBuilder Builds a TermRangeQuery object from a TermRangeQueryNode object. WildcardQueryNodeBuilder Builds a WildcardQuery object from a WildcardQueryNode object. Interfaces IStandardQueryBuilder This interface should be implemented by every class that wants to build Query objects from IQueryNode objects."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.IStandardQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.IStandardQueryBuilder.html",
    "title": "Interface IStandardQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IStandardQueryBuilder This interface should be implemented by every class that wants to build Query objects from IQueryNode objects. Inherited Members IQueryBuilder<Query>.Build(IQueryNode) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface IStandardQueryBuilder : IQueryBuilder<Query> See Also IQueryBuilder <TQuery> QueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchAllDocsQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchAllDocsQueryNodeBuilder.html",
    "title": "Class MatchAllDocsQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchAllDocsQueryNodeBuilder Builds a MatchAllDocsQuery object from a MatchAllDocsQueryNode object. Inheritance System.Object MatchAllDocsQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MatchAllDocsQueryNodeBuilder() Declaration public MatchAllDocsQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchNoDocsQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchNoDocsQueryNodeBuilder.html",
    "title": "Class MatchNoDocsQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchNoDocsQueryNodeBuilder Builds an empty BooleanQuery object from a MatchNoDocsQueryNode object. Inheritance System.Object MatchNoDocsQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchNoDocsQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MatchNoDocsQueryNodeBuilder() Declaration public MatchNoDocsQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.ModifierQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.ModifierQueryNodeBuilder.html",
    "title": "Class ModifierQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ModifierQueryNodeBuilder Builds no object, it only returns the Query object set on the ModifierQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. Inheritance System.Object ModifierQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class ModifierQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source ModifierQueryNodeBuilder() Declaration public ModifierQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MultiPhraseQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MultiPhraseQueryNodeBuilder.html",
    "title": "Class MultiPhraseQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiPhraseQueryNodeBuilder Builds a MultiPhraseQuery object from a MultiPhraseQueryNode object. Inheritance System.Object MultiPhraseQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiPhraseQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MultiPhraseQueryNodeBuilder() Declaration public MultiPhraseQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.NumericRangeQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.NumericRangeQueryNodeBuilder.html",
    "title": "Class NumericRangeQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeQueryNodeBuilder Builds NumericRangeQuery s out of NumericRangeQueryNode s. Inheritance System.Object NumericRangeQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source NumericRangeQueryNodeBuilder() Constructs a NumericRangeQueryNodeBuilder object. Declaration public NumericRangeQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also NumericRangeQuery NumericRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PhraseQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PhraseQueryNodeBuilder.html",
    "title": "Class PhraseQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhraseQueryNodeBuilder Builds a PhraseQuery object from a TokenizedPhraseQueryNode object. Inheritance System.Object PhraseQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source PhraseQueryNodeBuilder() Declaration public PhraseQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PrefixWildcardQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PrefixWildcardQueryNodeBuilder.html",
    "title": "Class PrefixWildcardQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixWildcardQueryNodeBuilder Builds a PrefixQuery object from a PrefixWildcardQueryNode object. Inheritance System.Object PrefixWildcardQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class PrefixWildcardQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source PrefixWildcardQueryNodeBuilder() Declaration public PrefixWildcardQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.RegexpQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.RegexpQueryNodeBuilder.html",
    "title": "Class RegexpQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RegexpQueryNodeBuilder Builds a RegexpQuery object from a RegexpQueryNode object. Inheritance System.Object RegexpQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class RegexpQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source RegexpQueryNodeBuilder() Declaration public RegexpQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.SlopQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.SlopQueryNodeBuilder.html",
    "title": "Class SlopQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SlopQueryNodeBuilder This builder basically reads the Query object set on the SlopQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the slop value defined in the SlopQueryNode . Inheritance System.Object SlopQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SlopQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source SlopQueryNodeBuilder() Declaration public SlopQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardBooleanQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardBooleanQueryNodeBuilder.html",
    "title": "Class StandardBooleanQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardBooleanQueryNodeBuilder This builder does the same as the BooleanQueryNodeBuilder , but this considers if the built BooleanQuery should have its coord disabled or not. Inheritance System.Object StandardBooleanQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardBooleanQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source StandardBooleanQueryNodeBuilder() Declaration public StandardBooleanQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also BooleanQueryNodeBuilder BooleanQuery Coord(Int32, Int32)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardQueryTreeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardQueryTreeBuilder.html",
    "title": "Class StandardQueryTreeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardQueryTreeBuilder This query tree builder only defines the necessary map to build a Query tree object. It should be used to generate a Query tree object from a query node tree processed by a StandardQueryNodeProcessorPipeline . Inheritance System.Object QueryTreeBuilder QueryTreeBuilder < Query > StandardQueryTreeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members QueryTreeBuilder<Query>.SetBuilder(String, IQueryBuilder<Query>) QueryTreeBuilder<Query>.SetBuilder(Type, IQueryBuilder<Query>) QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryTreeBuilder : QueryTreeBuilder<Query>, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source StandardQueryTreeBuilder() Declaration public StandardQueryTreeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public override Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Overrides Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder<Lucene.Net.Search.Query>.Build(Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode) Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also QueryTreeBuilder StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.TermRangeQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.TermRangeQueryNodeBuilder.html",
    "title": "Class TermRangeQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermRangeQueryNodeBuilder Builds a TermRangeQuery object from a TermRangeQueryNode object. Inheritance System.Object TermRangeQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source TermRangeQueryNodeBuilder() Declaration public TermRangeQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.WildcardQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.WildcardQueryNodeBuilder.html",
    "title": "Class WildcardQueryNodeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WildcardQueryNodeBuilder Builds a WildcardQuery object from a WildcardQueryNode object. Inheritance System.Object WildcardQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > 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.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source WildcardQueryNodeBuilder() Declaration public WildcardQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.ConfigurationKeys.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.ConfigurationKeys.html",
    "title": "Class ConfigurationKeys | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConfigurationKeys Class holding keys for StandardQueryNodeProcessorPipeline options. Inheritance System.Object ConfigurationKeys 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class ConfigurationKeys Fields | Improve this Doc View Source ALLOW_LEADING_WILDCARD Key used to set whether leading wildcards are supported Declaration public static readonly ConfigurationKey<bool?> ALLOW_LEADING_WILDCARD Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also AllowLeadingWildcard | Improve this Doc View Source ANALYZER Key used to set the Analyzer used for terms found in the query Declaration public static readonly ConfigurationKey<Analyzer> ANALYZER Field Value Type Description ConfigurationKey < Analyzer > See Also Analyzer | Improve this Doc View Source BOOST Key used to set the boost value in FieldConfig objects. Declaration public static readonly ConfigurationKey<float?> BOOST Field Value Type Description ConfigurationKey < System.Nullable < System.Single >> See Also FieldsBoost | Improve this Doc View Source DATE_RESOLUTION Key used to set default DateTools.Resolution . Declaration public static readonly ConfigurationKey<DateTools.Resolution> DATE_RESOLUTION Field Value Type Description ConfigurationKey < DateTools.Resolution > See Also SetDateResolution ( DateTools.Resolution ) DateResolution | Improve this Doc View Source DEFAULT_OPERATOR Key used to set the default boolean operator Declaration public static readonly ConfigurationKey<StandardQueryConfigHandler.Operator> DEFAULT_OPERATOR Field Value Type Description ConfigurationKey < StandardQueryConfigHandler.Operator > See Also DefaultOperator | Improve this Doc View Source ENABLE_POSITION_INCREMENTS Key used to set whether position increments is enabled Declaration public static readonly ConfigurationKey<bool?> ENABLE_POSITION_INCREMENTS Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also EnablePositionIncrements | Improve this Doc View Source FIELD_BOOST_MAP Key used to set a field to boost map that is used to set the boost for each field Declaration public static readonly ConfigurationKey<IDictionary<string, float?>> FIELD_BOOST_MAP Field Value Type Description ConfigurationKey < System.Collections.Generic.IDictionary < System.String , System.Nullable < System.Single >>> See Also FieldsBoost | Improve this Doc View Source FIELD_DATE_RESOLUTION_MAP Key used to set a field to DateTools.Resolution map that is used to normalize each date field value. Declaration public static readonly ConfigurationKey<IDictionary<string, DateTools.Resolution?>> FIELD_DATE_RESOLUTION_MAP Field Value Type Description ConfigurationKey < System.Collections.Generic.IDictionary < System.String , System.Nullable < DateTools.Resolution >>> See Also DateResolutionMap | Improve this Doc View Source FUZZY_CONFIG Key used to set the FuzzyConfig used to create fuzzy queries. Declaration public static readonly ConfigurationKey<FuzzyConfig> FUZZY_CONFIG Field Value Type Description ConfigurationKey < FuzzyConfig > See Also FuzzyMinSim FuzzyPrefixLength | Improve this Doc View Source LOCALE Key used to set the System.Globalization.CultureInfo used when parsing the query Declaration public static readonly ConfigurationKey<CultureInfo> LOCALE Field Value Type Description ConfigurationKey < System.Globalization.CultureInfo > See Also Locale | Improve this Doc View Source LOWERCASE_EXPANDED_TERMS Key used to set whether expanded terms should be lower-cased Declaration public static readonly ConfigurationKey<bool?> LOWERCASE_EXPANDED_TERMS Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also LowercaseExpandedTerms | Improve this Doc View Source MULTI_FIELDS Key used to set the fields a query should be expanded to when the field is null Declaration public static readonly ConfigurationKey<string[]> MULTI_FIELDS Field Value Type Description ConfigurationKey < System.String []> See Also SetMultiFields ( System.String []) GetMultiFields () | Improve this Doc View Source MULTI_TERM_REWRITE_METHOD Key used to set the MultiTermQuery.RewriteMethod used when creating queries Declaration public static readonly ConfigurationKey<MultiTermQuery.RewriteMethod> MULTI_TERM_REWRITE_METHOD Field Value Type Description ConfigurationKey < MultiTermQuery.RewriteMethod > See Also MultiTermRewriteMethod | Improve this Doc View Source NUMERIC_CONFIG Key used to set a field to its NumericConfig . Declaration public static readonly ConfigurationKey<NumericConfig> NUMERIC_CONFIG Field Value Type Description ConfigurationKey < NumericConfig > See Also NumericConfigMap | Improve this Doc View Source NUMERIC_CONFIG_MAP Key used to set the NumericConfig in FieldConfig for numeric fields. Declaration public static readonly ConfigurationKey<IDictionary<string, NumericConfig>> NUMERIC_CONFIG_MAP Field Value Type Description ConfigurationKey < System.Collections.Generic.IDictionary < System.String , NumericConfig >> See Also NumericConfigMap | Improve this Doc View Source PHRASE_SLOP Key used to set the default phrase slop Declaration public static readonly ConfigurationKey<int?> PHRASE_SLOP Field Value Type Description ConfigurationKey < System.Nullable < System.Int32 >> See Also PhraseSlop | Improve this Doc View Source TIMEZONE Declaration public static readonly ConfigurationKey<TimeZoneInfo> TIMEZONE Field Value Type Description ConfigurationKey < System.TimeZoneInfo >"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.DateFormat.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.DateFormat.html",
    "title": "Enum DateFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum DateFormat LUCENENET specific enum for mimicking the Java DateFormat Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public enum DateFormat Fields Name Description FULL LONG MEDIUM SHORT"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldBoostMapFCListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldBoostMapFCListener.html",
    "title": "Class FieldBoostMapFCListener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldBoostMapFCListener This listener listens for every field configuration request and assign a BOOST to the equivalent FieldConfig based on a defined map: fieldName -> boostValue stored in FIELD_BOOST_MAP . Inheritance System.Object FieldBoostMapFCListener Implements IFieldConfigListener 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldBoostMapFCListener : IFieldConfigListener Constructors | Improve this Doc View Source FieldBoostMapFCListener(QueryConfigHandler) Declaration public FieldBoostMapFCListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also FIELD_BOOST_MAP BOOST FieldConfig IFieldConfigListener"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldDateResolutionFCListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldDateResolutionFCListener.html",
    "title": "Class FieldDateResolutionFCListener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldDateResolutionFCListener This listener listens for every field configuration request and assign a DATE_RESOLUTION to the equivalent FieldConfig based on a defined map: fieldName -> DateTools.Resolution stored in FIELD_DATE_RESOLUTION_MAP . Inheritance System.Object FieldDateResolutionFCListener Implements IFieldConfigListener 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldDateResolutionFCListener : IFieldConfigListener Constructors | Improve this Doc View Source FieldDateResolutionFCListener(QueryConfigHandler) Declaration public FieldDateResolutionFCListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also DATE_RESOLUTION FIELD_DATE_RESOLUTION_MAP FieldConfig IFieldConfigListener"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FuzzyConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FuzzyConfig.html",
    "title": "Class FuzzyConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyConfig Configuration parameters for FuzzyQuery s Inheritance System.Object FuzzyConfig 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyConfig Constructors | Improve this Doc View Source FuzzyConfig() Declaration public FuzzyConfig() Properties | Improve this Doc View Source MinSimilarity Declaration public virtual float MinSimilarity { get; set; } Property Value Type Description System.Single | Improve this Doc View Source PrefixLength Declaration public virtual int PrefixLength { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Config | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Config <!-- 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. --> Standard Lucene Query Configuration. Standard Lucene Query Configuration The package org.apache.lucene.queryparser.flexible.standard.config contains the Lucene query configuration handler (StandardQueryConfigHandler). This configuration handler reproduces almost everything that could be set on the old query parser. StandardQueryConfigHandler is the class that should be used to configure the StandardQueryNodeProcessorPipeline. Classes ConfigurationKeys Class holding keys for StandardQueryNodeProcessorPipeline options. FieldBoostMapFCListener This listener listens for every field configuration request and assign a BOOST to the equivalent FieldConfig based on a defined map: fieldName -> boostValue stored in FIELD_BOOST_MAP . FieldDateResolutionFCListener This listener listens for every field configuration request and assign a DATE_RESOLUTION to the equivalent FieldConfig based on a defined map: fieldName -> DateTools.Resolution stored in FIELD_DATE_RESOLUTION_MAP . FuzzyConfig Configuration parameters for FuzzyQuery s NumberDateFormat This NumberFormat parses System.Int64 into date strings and vice-versa. It uses the given dateFormat and System.Globalization.CultureInfo to parse and format dates, but before, it converts System.Int64 to System.DateTime objects or vice-versa. Note that the System.Int64 value the dates are parsed into and out of represent the number of milliseconds since January 1, 1970 0:00:00, also known as the \"epoch\". NumericConfig This class holds the configuration used to parse numeric queries and create NumericRangeQuery s. NumericFieldConfigListener This listener is used to listen to FieldConfig requests in QueryConfigHandler and add NUMERIC_CONFIG based on the NUMERIC_CONFIG_MAP set in the QueryConfigHandler . StandardQueryConfigHandler This query configuration handler is used for almost every processor defined in the StandardQueryNodeProcessorPipeline processor pipeline. It holds configuration methods that reproduce the configuration methods that could be set on the old lucene 2.4 QueryParser class. Enums DateFormat LUCENENET specific enum for mimicking the Java DateFormat StandardQueryConfigHandler.Operator Boolean Operator: AND or OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat.html",
    "title": "Class NumberDateFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumberDateFormat This NumberFormat parses System.Int64 into date strings and vice-versa. It uses the given dateFormat and System.Globalization.CultureInfo to parse and format dates, but before, it converts System.Int64 to System.DateTime objects or vice-versa. Note that the System.Int64 value the dates are parsed into and out of represent the number of milliseconds since January 1, 1970 0:00:00, also known as the \"epoch\". Inheritance System.Object NumberFormat NumberDateFormat Inherited Members NumberFormat.Culture NumberFormat.GetNumberFormat() NumberFormat.ToString() 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumberDateFormat : NumberFormat Constructors | Improve this Doc View Source NumberDateFormat(DateFormat, DateFormat, CultureInfo) Constructs a NumberDateFormat object using the given dateStyle , timeStyle , and culture . Declaration public NumberDateFormat(DateFormat dateStyle, DateFormat timeStyle, CultureInfo culture) Parameters Type Name Description DateFormat dateStyle DateFormat timeStyle System.Globalization.CultureInfo culture | Improve this Doc View Source NumberDateFormat(String, CultureInfo) Constructs a NumberDateFormat object using the given dateFormat and locale . Declaration public NumberDateFormat(string dateFormat, CultureInfo locale) Parameters Type Name Description System.String dateFormat Date format used to parse and format dates System.Globalization.CultureInfo locale Fields | Improve this Doc View Source EPOCH Declaration public const long EPOCH = 621355968000000000L Field Value Type Description System.Int64 Properties | Improve this Doc View Source TimeZone Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source Format(Double) Declaration public override string Format(double number) Parameters Type Name Description System.Double number Returns Type Description System.String Overrides NumberFormat.Format(Double) | Improve this Doc View Source Format(Int64) Declaration public override string Format(long number) Parameters Type Name Description System.Int64 number Returns Type Description System.String Overrides NumberFormat.Format(Int64) | Improve this Doc View Source Format(Object) Declaration public override string Format(object number) Parameters Type Name Description System.Object number Returns Type Description System.String Overrides NumberFormat.Format(Object) | Improve this Doc View Source GetDateFormat() Returns the .NET date format that will be used to Format the date. Note that parsing the date uses System.DateTime.ParseExact(System.String,System.String,System.IFormatProvider) . Declaration public string GetDateFormat() Returns Type Description System.String | Improve this Doc View Source GetDateFormat(DateFormat, DateFormat, CultureInfo) Declaration public static string GetDateFormat(DateFormat dateStyle, DateFormat timeStyle, CultureInfo culture) Parameters Type Name Description DateFormat dateStyle DateFormat timeStyle System.Globalization.CultureInfo culture Returns Type Description System.String | Improve this Doc View Source Parse(String) Declaration public override object Parse(string source) Parameters Type Name Description System.String source Returns Type Description System.Object Overrides NumberFormat.Parse(String) | Improve this Doc View Source SetDateFormat(String) Declaration public void SetDateFormat(string dateFormat) Parameters Type Name Description System.String dateFormat"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericConfig.html",
    "title": "Class NumericConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericConfig This class holds the configuration used to parse numeric queries and create NumericRangeQuery s. Inheritance System.Object NumericConfig 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericConfig Constructors | Improve this Doc View Source NumericConfig(Int32, NumberFormat, NumericType) Constructs a NumericConfig object. Declaration public NumericConfig(int precisionStep, NumberFormat format, NumericType type) Parameters Type Name Description System.Int32 precisionStep the precision used to index the numeric values NumberFormat format the NumberFormat used to parse a System.String to an System.Object representing a .NET numeric type. NumericType type the numeric type used to index the numeric values See Also PrecisionStep NumberFormat Type Properties | Improve this Doc View Source NumberFormat Gets or Sets the NumberFormat used to parse a System.String to System.Object representing a .NET numeric type, cannot be null Declaration public virtual NumberFormat NumberFormat { get; set; } Property Value Type Description NumberFormat | Improve this Doc View Source PrecisionStep Gets or sets the precision used to index the numeric values Declaration public virtual int PrecisionStep { get; set; } Property Value Type Description System.Int32 See Also PrecisionStep | Improve this Doc View Source Type Gets or Sets the numeric type used to index the numeric values Declaration public virtual NumericType Type { get; set; } Property Value Type Description NumericType Methods | 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() LUCENENET specific - Visual Studio provides a compiler warning if Equals(Object) is overridden without GetHashCode() , so we provide an implementation that mirrors Equals(Object) . Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() See Also NumericRangeQuery NumberFormat"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericFieldConfigListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericFieldConfigListener.html",
    "title": "Class NumericFieldConfigListener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericFieldConfigListener This listener is used to listen to FieldConfig requests in QueryConfigHandler and add NUMERIC_CONFIG based on the NUMERIC_CONFIG_MAP set in the QueryConfigHandler . Inheritance System.Object NumericFieldConfigListener Implements IFieldConfigListener 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericFieldConfigListener : IFieldConfigListener Constructors | Improve this Doc View Source NumericFieldConfigListener(QueryConfigHandler) Constructs a NumericFieldConfigListener object using the given QueryConfigHandler . Declaration public NumericFieldConfigListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config the QueryConfigHandler it will listen too Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also NumericConfig QueryConfigHandler NUMERIC_CONFIG NUMERIC_CONFIG_MAP"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.html",
    "title": "Class StandardQueryConfigHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardQueryConfigHandler This query configuration handler is used for almost every processor defined in the StandardQueryNodeProcessorPipeline processor pipeline. It holds configuration methods that reproduce the configuration methods that could be set on the old lucene 2.4 QueryParser class. Inheritance System.Object AbstractQueryConfig QueryConfigHandler StandardQueryConfigHandler Inherited Members QueryConfigHandler.GetFieldConfig(String) QueryConfigHandler.AddFieldConfigListener(IFieldConfigListener) AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) 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.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryConfigHandler : QueryConfigHandler Constructors | Improve this Doc View Source StandardQueryConfigHandler() Declaration public StandardQueryConfigHandler() See Also StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.Operator.html",
    "title": "Enum StandardQueryConfigHandler.Operator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum StandardQueryConfigHandler.Operator Boolean Operator: AND or OR Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public enum Operator Fields Name Description AND OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard <!-- 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. --> Implementation of the {@linkplain org.apache.lucene.queryparser.classic Lucene classic query parser} using the flexible query parser frameworks Lucene Flexible Query Parser Implementation The old Lucene query parser used to have only one class that performed all the parsing operations. In the new query parser structure, the parsing was divided in 3 steps: parsing (syntax), processing (semantic) and building. The classes contained in the package org.apache.lucene.queryParser.standard are used to reproduce the same behavior as the old query parser. Check StandardQueryParser to quick start using the Lucene query parser. Classes QueryParserUtil This class defines utility methods to (help) parse query strings into Query objects. StandardQueryParser This class is a helper that enables users to easily use the Lucene query parser. To construct a Query object from a query string, use the Parse(String, String) method: StandardQueryParser queryParserHelper = new StandardQueryParser(); Query query = queryParserHelper.Parse(\"a AND b\", \"defaultField\"); To change any configuration before parsing the query string do, for example: // the query config handler returned by StandardQueryParser is a // StandardQueryConfigHandler queryParserHelper.QueryConfigHandler.Analyzer = new WhitespaceAnalyzer(); The syntax for query strings is as follows (copied from the old QueryParser javadoc): A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation. The text parser used by this helper is a StandardSyntaxParser . The query node processor used by this helper is a StandardQueryNodeProcessorPipeline . The builder used by this helper is a StandardQueryTreeBuilder . Interfaces ICommonQueryParserConfiguration Configuration options common across queryparser implementations."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.ICommonQueryParserConfiguration.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.ICommonQueryParserConfiguration.html",
    "title": "Interface ICommonQueryParserConfiguration | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICommonQueryParserConfiguration Configuration options common across queryparser implementations. Namespace : Lucene.Net.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICommonQueryParserConfiguration Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery . Note that this can produce very slow queries on big indexes. Default: false. Declaration bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Analyzer Declaration Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source EnablePositionIncrements Set to true to enable position increments in result query. When set, result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: false. Declaration bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FuzzyMinSim Get the minimal similarity for fuzzy queries. Declaration float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Get or Set the prefix length for fuzzy queries. Default is 0. Declaration int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Get or Set locale used by date range parsing. Declaration CultureInfo Locale { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Whether terms of multi-term queries (e.g., wildcard, prefix, fuzzy and range) should be automatically lower-cased or not. Default is true . Declaration bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default, it uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT when creating a prefix, wildcard and range queries. This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any exception due to too many listeners. However, if your application really needs to use the old-fashioned boolean queries expansion rewriting and the above points are not relevant then use this change the rewrite method. Declaration MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Gets or Sets the time zone. Declaration TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Sets the default DateTools.Resolution used for certain field when no DateTools.Resolution is defined for this field. Declaration void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode-1.html",
    "title": "Class AbstractRangeQueryNode<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractRangeQueryNode<T> This class should be extended by nodes intending to represent range queries. Inheritance System.Object QueryNode AbstractRangeQueryNode<T> NumericRangeQueryNode TermRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AbstractRangeQueryNode<T> : QueryNode, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode where T : IFieldableNode Type Parameters Name Description T the type of the range query bounds (lower and upper) Constructors | Improve this Doc View Source AbstractRangeQueryNode() Constructs an AbstractRangeQueryNode<T> , it should be invoked only by its extenders. Declaration protected AbstractRangeQueryNode() Properties | Improve this Doc View Source Field Gets or Sets the field associated with this node. Declaration public virtual string Field { get; set; } Property Value Type Description System.String See Also IFieldableNode | Improve this Doc View Source IsLowerInclusive Gets whether the lower bound is inclusive or exclusive. Declaration public virtual bool IsLowerInclusive { get; } Property Value Type Description System.Boolean Remarks true if the lower bound is inclusive, otherwise, false | Improve this Doc View Source IsUpperInclusive Gets whether the upper bound is inclusive or exclusive. Declaration public virtual bool IsUpperInclusive { get; } Property Value Type Description System.Boolean Remarks true if the upper bound is inclusive, otherwise, false | Improve this Doc View Source LowerBound Gets the lower bound node. Declaration public virtual IFieldableNode LowerBound { get; } Property Value Type Description IFieldableNode | Improve this Doc View Source UpperBound Gets the upper bound node. Declaration public virtual IFieldableNode UpperBound { get; } Property Value Type Description IFieldableNode Methods | Improve this Doc View Source SetBounds(T, T, Boolean, Boolean) Sets the lower and upper bounds. Declaration public virtual void SetBounds(T lower, T upper, bool lowerInclusive, bool upperInclusive) Parameters Type Name Description T lower the lower bound, null if lower bound is open T upper the upper bound, null if upper bound is open System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false See Also LowerBound UpperBound IsLowerInclusive IsUpperInclusive | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.BooleanModifierNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.BooleanModifierNode.html",
    "title": "Class BooleanModifierNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanModifierNode A BooleanModifierNode has the same behaviour as ModifierQueryNode , it only indicates that this modifier was added by GroupQueryNodeProcessor and not by the user. Inheritance System.Object QueryNode ModifierQueryNode BooleanModifierNode Implements IQueryNode Inherited Members ModifierQueryNode.GetChild() ModifierQueryNode.Modifier ModifierQueryNode.ToString() ModifierQueryNode.ToQueryString(IEscapeQuerySyntax) ModifierQueryNode.CloneTree() ModifierQueryNode.SetChild(IQueryNode) QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanModifierNode : ModifierQueryNode, IQueryNode Constructors | Improve this Doc View Source BooleanModifierNode(IQueryNode, Modifier) Declaration public BooleanModifierNode(IQueryNode node, Modifier mod) Parameters Type Name Description IQueryNode node Modifier mod Implements IQueryNode See Also ModifierQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Nodes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Nodes <!-- 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. --> Standard Lucene Query Nodes. Standard Lucene Query Nodes The package org.apache.lucene.queryparser.flexible.standard.nodes contains QueryNode classes that are used specifically for Lucene query node tree. Any other generic QueryNode is defined under org.apache.lucene.queryParser.nodes. Classes AbstractRangeQueryNode<T> This class should be extended by nodes intending to represent range queries. BooleanModifierNode A BooleanModifierNode has the same behaviour as ModifierQueryNode , it only indicates that this modifier was added by GroupQueryNodeProcessor and not by the user. MultiPhraseQueryNode A MultiPhraseQueryNode indicates that its children should be used to build a MultiPhraseQuery instead of PhraseQuery . NumericQueryNode This query node represents a field query that holds a numeric value. It is similar to FieldQueryNode , however the Value returns an System.Object representing a .NET numeric type. NumericRangeQueryNode This query node represents a range query composed by NumericQueryNode bounds, which means the bound values are System.Object s representing a .NET numeric type. PrefixWildcardQueryNode A PrefixWildcardQueryNode represents wildcardquery that matches abc* or *. This does not apply to phrases, this is a special case on the original lucene parser. TODO: refactor the code to remove this special case from the parser. and probably do it on a Processor RegexpQueryNode A RegexpQueryNode represents RegexpQuery query Examples: /[a-z]|[0-9]/ StandardBooleanQueryNode A StandardBooleanQueryNode has the same behavior as BooleanQueryNode . It only indicates if the coord should be enabled or not for this boolean query. TermRangeQueryNode This query node represents a range query composed by FieldQueryNode bounds, which means the bound values are strings. WildcardQueryNode A WildcardQueryNode represents wildcard query This does not apply to phrases. Examples: a b c Fl?w? m?ke*g Interfaces IAbstractRangeQueryNode LUCENENET specific interface used to identify an AbstractRangeQueryNode without referring to its generic closing type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.IAbstractRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.IAbstractRangeQueryNode.html",
    "title": "Interface IAbstractRangeQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAbstractRangeQueryNode LUCENENET specific interface used to identify an AbstractRangeQueryNode without referring to its generic closing type Inherited Members IRangeQueryNode<IFieldableNode>.LowerBound IRangeQueryNode<IFieldableNode>.UpperBound IRangeQueryNode.IsLowerInclusive IRangeQueryNode.IsUpperInclusive IFieldableNode.Field IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IAbstractRangeQueryNode : IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.MultiPhraseQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.MultiPhraseQueryNode.html",
    "title": "Class MultiPhraseQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiPhraseQueryNode A MultiPhraseQueryNode indicates that its children should be used to build a MultiPhraseQuery instead of PhraseQuery . Inheritance System.Object QueryNode MultiPhraseQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiPhraseQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source MultiPhraseQueryNode() Declaration public MultiPhraseQueryNode() Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode.html",
    "title": "Class NumericQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericQueryNode This query node represents a field query that holds a numeric value. It is similar to FieldQueryNode , however the Value returns an System.Object representing a .NET numeric type. Inheritance System.Object QueryNode NumericQueryNode Implements IFieldValuePairQueryNode < System.Object > IFieldableNode IValueQueryNode < System.Object > IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericQueryNode : QueryNode, IFieldValuePairQueryNode<object>, IFieldableNode, IValueQueryNode<object>, IQueryNode Constructors | Improve this Doc View Source NumericQueryNode(String, Object, NumberFormat) Creates a NumericQueryNode object using the given field, System.Object (representing a .NET numeric type) value and NumberFormat used to convert the value to System.String . Declaration public NumericQueryNode(string field, object value, NumberFormat numberFormat) Parameters Type Name Description System.String field the field associated with this query node System.Object value the value hold by this node NumberFormat numberFormat the NumberFormat used to convert the value to System.String Properties | Improve this Doc View Source Field Gets or Sets the field associated with this node. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source NumberFormat Gets or Sets the NumberFormat used to convert the value to System.String . Declaration public virtual NumberFormat NumberFormat { get; set; } Property Value Type Description NumberFormat | Improve this Doc View Source Value Gets or Sets the numeric value as System.Object representing a .NET numeric type. Declaration public virtual object Value { get; set; } Property Value Type Description System.Object Methods | Improve this Doc View Source GetTermEscaped(IEscapeQuerySyntax) This method is used to get the value converted to System.String and escaped using the given IEscapeQuerySyntax . Declaration protected string GetTermEscaped(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper The IEscapeQuerySyntax used to escape the value System.String Returns Type Description System.String The value converted to System.String and escaped | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode See Also NumericConfig"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericRangeQueryNode.html",
    "title": "Class NumericRangeQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeQueryNode This query node represents a range query composed by NumericQueryNode bounds, which means the bound values are System.Object s representing a .NET numeric type. Inheritance System.Object QueryNode AbstractRangeQueryNode < NumericQueryNode > NumericRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members AbstractRangeQueryNode<NumericQueryNode>.Field AbstractRangeQueryNode<NumericQueryNode>.LowerBound AbstractRangeQueryNode<NumericQueryNode>.UpperBound AbstractRangeQueryNode<NumericQueryNode>.IsLowerInclusive AbstractRangeQueryNode<NumericQueryNode>.IsUpperInclusive AbstractRangeQueryNode<NumericQueryNode>.SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean) AbstractRangeQueryNode<NumericQueryNode>.ToQueryString(IEscapeQuerySyntax) QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNode : AbstractRangeQueryNode<NumericQueryNode>, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source NumericRangeQueryNode(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Constructs a NumericRangeQueryNode object using the given NumericQueryNode as its bounds and NumericConfig . Declaration public NumericRangeQueryNode(NumericQueryNode lower, NumericQueryNode upper, bool lowerInclusive, bool upperInclusive, NumericConfig numericConfig) Parameters Type Name Description NumericQueryNode lower the lower bound NumericQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false NumericConfig numericConfig the NumericConfig that represents associated with the upper and lower bounds See Also SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Properties | Improve this Doc View Source NumericConfig Gets the NumericConfig associated with the lower and upper bounds. Declaration public virtual NumericConfig NumericConfig { get; set; } Property Value Type Description NumericConfig Methods | Improve this Doc View Source SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Sets the upper and lower bounds of this range query node and the NumericConfig associated with these bounds. Declaration public virtual void SetBounds(NumericQueryNode lower, NumericQueryNode upper, bool lowerInclusive, bool upperInclusive, NumericConfig numericConfig) Parameters Type Name Description NumericQueryNode lower the lower bound NumericQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false NumericConfig numericConfig the NumericConfig that represents associated with the upper and lower bounds | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode<Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode>.ToString() Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode See Also NumericQueryNode AbstractRangeQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.PrefixWildcardQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.PrefixWildcardQueryNode.html",
    "title": "Class PrefixWildcardQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixWildcardQueryNode A PrefixWildcardQueryNode represents wildcardquery that matches abc* or *. This does not apply to phrases, this is a special case on the original lucene parser. TODO: refactor the code to remove this special case from the parser. and probably do it on a Processor Inheritance System.Object QueryNode FieldQueryNode WildcardQueryNode PrefixWildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members WildcardQueryNode.ToQueryString(IEscapeQuerySyntax) FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PrefixWildcardQueryNode : WildcardQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source PrefixWildcardQueryNode(FieldQueryNode) Declaration public PrefixWildcardQueryNode(FieldQueryNode fqn) Parameters Type Name Description FieldQueryNode fqn | Improve this Doc View Source PrefixWildcardQueryNode(String, ICharSequence, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name J2N.Text.ICharSequence text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source PrefixWildcardQueryNode(String, String, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source PrefixWildcardQueryNode(String, StringBuilder, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides WildcardQueryNode.CloneTree() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides WildcardQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.RegexpQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.RegexpQueryNode.html",
    "title": "Class RegexpQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RegexpQueryNode A RegexpQueryNode represents RegexpQuery query Examples: /[a-z]|[0-9]/ Inheritance System.Object QueryNode RegexpQueryNode Implements ITextableQueryNode IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class RegexpQueryNode : QueryNode, ITextableQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source RegexpQueryNode(String, ICharSequence, Int32, Int32) Declaration public RegexpQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name J2N.Text.ICharSequence text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source RegexpQueryNode(String, String, Int32, Int32) Declaration public RegexpQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source RegexpQueryNode(String, StringBuilder, Int32, Int32) Declaration public RegexpQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Text Declaration public virtual ICharSequence Text { get; set; } Property Value Type Description J2N.Text.ICharSequence Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() Declaration public virtual string GetFieldAsString() Returns Type Description System.String | Improve this Doc View Source TextToBytesRef() Declaration public virtual BytesRef TextToBytesRef() Returns Type Description BytesRef | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements ITextableQueryNode IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.StandardBooleanQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.StandardBooleanQueryNode.html",
    "title": "Class StandardBooleanQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardBooleanQueryNode A StandardBooleanQueryNode has the same behavior as BooleanQueryNode . It only indicates if the coord should be enabled or not for this boolean query. Inheritance System.Object QueryNode BooleanQueryNode StandardBooleanQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.ToString() BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardBooleanQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source StandardBooleanQueryNode(IList<IQueryNode>, Boolean) Declaration public StandardBooleanQueryNode(IList<IQueryNode> clauses, bool disableCoord) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses System.Boolean disableCoord Properties | Improve this Doc View Source DisableCoord Declaration public virtual bool DisableCoord { get; } Property Value Type Description System.Boolean Implements IQueryNode See Also Coord(Int32, Int32) BooleanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.TermRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.TermRangeQueryNode.html",
    "title": "Class TermRangeQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermRangeQueryNode This query node represents a range query composed by FieldQueryNode bounds, which means the bound values are strings. Inheritance System.Object QueryNode AbstractRangeQueryNode < FieldQueryNode > TermRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members AbstractRangeQueryNode<FieldQueryNode>.Field AbstractRangeQueryNode<FieldQueryNode>.LowerBound AbstractRangeQueryNode<FieldQueryNode>.UpperBound AbstractRangeQueryNode<FieldQueryNode>.IsLowerInclusive AbstractRangeQueryNode<FieldQueryNode>.IsUpperInclusive AbstractRangeQueryNode<FieldQueryNode>.SetBounds(FieldQueryNode, FieldQueryNode, Boolean, Boolean) AbstractRangeQueryNode<FieldQueryNode>.ToQueryString(IEscapeQuerySyntax) AbstractRangeQueryNode<FieldQueryNode>.ToString() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNode : AbstractRangeQueryNode<FieldQueryNode>, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source TermRangeQueryNode(FieldQueryNode, FieldQueryNode, Boolean, Boolean) Constructs a TermRangeQueryNode object using the given FieldQueryNode as its bounds. Declaration public TermRangeQueryNode(FieldQueryNode lower, FieldQueryNode upper, bool lowerInclusive, bool upperInclusive) Parameters Type Name Description FieldQueryNode lower the lower bound FieldQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode See Also FieldQueryNode AbstractRangeQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.WildcardQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.WildcardQueryNode.html",
    "title": "Class WildcardQueryNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WildcardQueryNode A WildcardQueryNode represents wildcard query This does not apply to phrases. Examples: a b c Fl?w? m?ke*g Inheritance System.Object QueryNode FieldQueryNode WildcardQueryNode PrefixWildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() 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.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source WildcardQueryNode(FieldQueryNode) Declaration public WildcardQueryNode(FieldQueryNode fqn) Parameters Type Name Description FieldQueryNode fqn | Improve this Doc View Source WildcardQueryNode(String, ICharSequence, Int32, Int32) Declaration public WildcardQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name J2N.Text.ICharSequence text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source WildcardQueryNode(String, String, Int32, Int32) Declaration public WildcardQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source WildcardQueryNode(String, StringBuilder, Int32, Int32) Declaration public WildcardQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.EscapeQuerySyntax.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.EscapeQuerySyntax.html",
    "title": "Class EscapeQuerySyntax | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EscapeQuerySyntax Implementation of IEscapeQuerySyntax for the standard lucene syntax. Inheritance System.Object EscapeQuerySyntax Implements IEscapeQuerySyntax 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.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class EscapeQuerySyntax : IEscapeQuerySyntax Methods | Improve this Doc View Source DiscardEscapeChar(String) Returns a string where the escape char has been removed, or kept only once if there was a double escape. Supports escaped unicode characters, e. g. translates A to A . Declaration public static UnescapedCharSequence DiscardEscapeChar(string input) Parameters Type Name Description System.String input Returns Type Description UnescapedCharSequence | Improve this Doc View Source Escape(ICharSequence, CultureInfo, EscapeQuerySyntaxType) Declaration public virtual ICharSequence Escape(ICharSequence text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description J2N.Text.ICharSequence text System.Globalization.CultureInfo locale EscapeQuerySyntaxType type Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source Escape(String, CultureInfo, EscapeQuerySyntaxType) Declaration public virtual string Escape(string text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description System.String text System.Globalization.CultureInfo locale EscapeQuerySyntaxType type Returns Type Description System.String Implements IEscapeQuerySyntax"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. Inheritance System.Object FastCharStream Implements ICharStream 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.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : ICharStream Constructors | Improve this Doc View Source FastCharStream(TextReader) Constructs from a System.IO.TextReader . Declaration public FastCharStream(TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetImage() Declaration public string GetImage() Returns Type Description System.String | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Parser <!-- 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. --> Lucene Query Parser. Lucene Query Parser The package org.apache.lucene.queryparser.flexible.standard.parser contains the query parser. This text parser only performs the syntax validation and creates an QueryNode tree from a query string. Classes EscapeQuerySyntax Implementation of IEscapeQuerySyntax for the standard lucene syntax. FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. LexicalToken ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method generateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. RegexpToken StandardSyntaxParser Parser for the standard Lucene syntax StandardSyntaxParserConstants Token literal values and constants. StandardSyntaxParserTokenManager Token Manager. Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Gets the column position of the character last read. Declaration [Obsolete] int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Line Gets the line number of the character last read. Declaration [Obsolete] int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetImage() Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string GetImage() Returns Type Description System.String | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = GetImage(); return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any System.IO.IOException . Declaration char ReadChar() Returns Type Description System.Char the next character from the selected input."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken 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.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = 2 Field Value Type Description System.Int32 | Improve this Doc View Source Range Lexical state. Declaration public const int Range = 1 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method generateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object System.Exception QueryNodeException QueryNodeParseException ParseException Implements System.Runtime.Serialization.ISerializable INLSException Inherited Members QueryNodeParseException.SetQuery(String) QueryNodeParseException.Query QueryNodeParseException.ErrorToken QueryNodeParseException.SetNonLocalizedMessage(IMessage) QueryNodeParseException.BeginLine QueryNodeParseException.BeginColumn QueryNodeException.m_message QueryNodeException.MessageObject QueryNodeException.Message QueryNodeException.GetLocalizedMessage() QueryNodeException.GetLocalizedMessage(CultureInfo) QueryNodeException.ToString() System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : QueryNodeParseException, ISerializable, INLSException Constructors | Improve this Doc View Source ParseException() The following constructors are for use by you for whatever purpose you can think of. Constructing the exception in this manner makes the exception behave in the normal way - i.e., as documented in the class \"Throwable\". The fields \"errorToken\", \"expectedTokenSequences\", and \"tokenImage\" do not contain relevant information. The JavaCC generated code does not use these constructors. Declaration public ParseException() | Improve this Doc View Source ParseException(IMessage) Constructor with message. Declaration public ParseException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method \"generateParseException\" in the generated parser. Calling this constructor generates a new object of this type with the fields \"currentToken\", \"expectedTokenSequences\", and \"tokenImage\" set. Declaration public ParseException(Token currentTokenVal, int[][] expectedTokenSequencesVal, string[] tokenImageVal) Parameters Type Name Description Token currentTokenVal System.Int32 [][] expectedTokenSequencesVal System.String [] tokenImageVal Fields | Improve this Doc View Source m_eol The end of line string for this machine. Declaration protected string m_eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token followng this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String [] Implements System.Runtime.Serialization.ISerializable INLSException"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken 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.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = 8 Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = 21 Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = 0 Field Value Type Description System.Int32 | Improve this Doc View Source ESCAPED_CHAR RegularExpression Id. Declaration public const int ESCAPED_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source FUZZY_SLOP RegularExpression Id. Declaration public const int FUZZY_SLOP = 24 Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = 13 Field Value Type Description System.Int32 | Improve this Doc View Source MINUS RegularExpression Id. Declaration public const int MINUS = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = 28 Field Value Type Description System.Int32 | Improve this Doc View Source OP_COLON RegularExpression Id. Declaration public const int OP_COLON = 15 Field Value Type Description System.Int32 | Improve this Doc View Source OP_EQUAL RegularExpression Id. Declaration public const int OP_EQUAL = 16 Field Value Type Description System.Int32 | Improve this Doc View Source OP_LESSTHAN RegularExpression Id. Declaration public const int OP_LESSTHAN = 17 Field Value Type Description System.Int32 | Improve this Doc View Source OP_LESSTHANEQ RegularExpression Id. Declaration public const int OP_LESSTHANEQ = 18 Field Value Type Description System.Int32 | Improve this Doc View Source OP_MORETHAN RegularExpression Id. Declaration public const int OP_MORETHAN = 19 Field Value Type Description System.Int32 | Improve this Doc View Source OP_MORETHANEQ RegularExpression Id. Declaration public const int OP_MORETHANEQ = 20 Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = 9 Field Value Type Description System.Int32 | Improve this Doc View Source PLUS RegularExpression Id. Declaration public const int PLUS = 11 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = 22 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED_CHAR RegularExpression Id. Declaration public const int QUOTED_CHAR = 6 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_GOOP RegularExpression Id. Declaration public const int RANGE_GOOP = 33 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_QUOTED RegularExpression Id. Declaration public const int RANGE_QUOTED = 32 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_TO RegularExpression Id. Declaration public const int RANGE_TO = 29 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_END RegularExpression Id. Declaration public const int RANGEEX_END = 31 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_START RegularExpression Id. Declaration public const int RANGEEX_START = 27 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_END RegularExpression Id. Declaration public const int RANGEIN_END = 30 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_START RegularExpression Id. Declaration public const int RANGEIN_START = 26 Field Value Type Description System.Int32 | Improve this Doc View Source REGEXPTERM RegularExpression Id. Declaration public const int REGEXPTERM = 25 Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = 14 Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = 23 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = 4 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_START_CHAR RegularExpression Id. Declaration public const int TERM_START_CHAR = 3 Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = 5 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParser.html",
    "title": "Class StandardSyntaxParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardSyntaxParser Parser for the standard Lucene syntax Inheritance System.Object StandardSyntaxParser Implements ISyntaxParser 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.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardSyntaxParser : ISyntaxParser Constructors | Improve this Doc View Source StandardSyntaxParser() Declaration public StandardSyntaxParser() | Improve this Doc View Source StandardSyntaxParser(ICharStream) Constructor with user supplied ICharStream . Declaration public StandardSyntaxParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source StandardSyntaxParser(StandardSyntaxParserTokenManager) Constructor with generated Token Manager. Declaration public StandardSyntaxParser(StandardSyntaxParserTokenManager tm) Parameters Type Name Description StandardSyntaxParserTokenManager tm Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public StandardSyntaxParserTokenManager TokenSource { get; set; } Property Value Type Description StandardSyntaxParserTokenManager Methods | Improve this Doc View Source Clause(String) Declaration public IQueryNode Clause(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source ConjQuery(String) Declaration public IQueryNode ConjQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Conjunction() Declaration public int Conjunction() Returns Type Description System.Int32 | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source DisjQuery(String) Declaration public IQueryNode DisjQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source ModClause(String) Declaration public IQueryNode ModClause(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Modifiers() Declaration public Modifier Modifiers() Returns Type Description Modifier | Improve this Doc View Source Parse(String, String) Parses a query string, returning a IQueryNode . Declaration public IQueryNode Parse(string query, string field) Parameters Type Name Description System.String query the query string to be parsed. System.String field Returns Type Description IQueryNode Exceptions Type Condition ParseException if the parsing fails | Improve this Doc View Source Query(String) Declaration public IQueryNode Query(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(StandardSyntaxParserTokenManager) Reinitialize. Declaration public void ReInit(StandardSyntaxParserTokenManager tm) Parameters Type Name Description StandardSyntaxParserTokenManager tm | Improve this Doc View Source Term(String) Declaration public IQueryNode Term(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source TopLevelQuery(String) Declaration public IQueryNode TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode Implements ISyntaxParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserConstants.html",
    "title": "Class StandardSyntaxParserConstants | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardSyntaxParserConstants Token literal values and constants. Inheritance System.Object StandardSyntaxParserConstants 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.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class StandardSyntaxParserConstants Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserTokenManager.html",
    "title": "Class StandardSyntaxParserTokenManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardSyntaxParserTokenManager Token Manager. Inheritance System.Object StandardSyntaxParserTokenManager 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.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardSyntaxParserTokenManager Constructors | Improve this Doc View Source StandardSyntaxParserTokenManager(ICharStream) Constructor. Declaration public StandardSyntaxParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source StandardSyntaxParserTokenManager(ICharStream, Int32) Constructor. Declaration public StandardSyntaxParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialize parser. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialize parser. Declaration public void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public void SetDebugStream(TextWriter ds) Parameters Type Name Description System.IO.TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token 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) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax [Serializable] public class Token Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind . Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object System.Exception TokenMgrError Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception, ISerializable Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Remarks Note: You can customize the lexical error message by modifying this method. Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AllowLeadingWildcardProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AllowLeadingWildcardProcessor.html",
    "title": "Class AllowLeadingWildcardProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AllowLeadingWildcardProcessor This processor verifies if ALLOW_LEADING_WILDCARD is defined in the QueryConfigHandler . If it is and leading wildcard is not allowed, it looks for every WildcardQueryNode contained in the query node tree and throws an exception if any of them has a leading wildcard ('*' or '?'). Inheritance System.Object QueryNodeProcessor AllowLeadingWildcardProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class AllowLeadingWildcardProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source AllowLeadingWildcardProcessor() Declaration public AllowLeadingWildcardProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ALLOW_LEADING_WILDCARD"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AnalyzerQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AnalyzerQueryNodeProcessor.html",
    "title": "Class AnalyzerQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzerQueryNodeProcessor This processor verifies if ANALYZER is defined in the QueryConfigHandler . If it is and the analyzer is not null , it looks for every FieldQueryNode that is not WildcardQueryNode , FuzzyQueryNode or IRangeQueryNode contained in the query node tree, then it applies the analyzer to that FieldQueryNode object. If the analyzer return only one term, the returned term is set to the FieldQueryNode and it's returned. If the analyzer return more than one term, a TokenizedPhraseQueryNode or MultiPhraseQueryNode is created, whether there is one or more terms at the same position, and it's returned. If no term is returned by the analyzer a NoTokenFoundQueryNode object is returned. Inheritance System.Object QueryNodeProcessor AnalyzerQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class AnalyzerQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source AnalyzerQueryNodeProcessor() Declaration public AnalyzerQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ANALYZER Analyzer TokenStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanQuery2ModifierNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanQuery2ModifierNodeProcessor.html",
    "title": "Class BooleanQuery2ModifierNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanQuery2ModifierNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. This is a variant of BooleanModifiersQueryNodeProcessor which ignores precedence. The StandardSyntaxParser knows the rules of precedence, but lucene does not. e.g. (A AND B OR C AND D) ist treated like (+A +B +C +D) . This processor walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For default BooleanQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Each BooleanQueryNode which direct parent is also a BooleanQueryNode is removed (to ignore the rules of precedence). Inheritance System.Object BooleanQuery2ModifierNodeProcessor Implements IQueryNodeProcessor 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQuery2ModifierNodeProcessor : IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanQuery2ModifierNodeProcessor() Declaration public BooleanQuery2ModifierNodeProcessor() Methods | Improve this Doc View Source FillChildrenBufferAndApplyModifiery(IQueryNode) Declaration protected virtual void FillChildrenBufferAndApplyModifiery(IQueryNode parent) Parameters Type Name Description IQueryNode parent | Improve this Doc View Source GetQueryConfigHandler() Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler | Improve this Doc View Source IsDefaultBooleanQueryNode(IQueryNode) Declaration protected virtual bool IsDefaultBooleanQueryNode(IQueryNode toTest) Parameters Type Name Description IQueryNode toTest Returns Type Description System.Boolean | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected virtual IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected virtual IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected virtual void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler | Improve this Doc View Source TagModifierButDoNotOverride(IQueryNode, Modifier) Declaration protected virtual void TagModifierButDoNotOverride(IQueryNode node, Modifier mod) Parameters Type Name Description IQueryNode node Modifier mod Implements IQueryNodeProcessor See Also DEFAULT_OPERATOR BooleanModifiersQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanSingleChildOptimizationQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanSingleChildOptimizationQueryNodeProcessor.html",
    "title": "Class BooleanSingleChildOptimizationQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanSingleChildOptimizationQueryNodeProcessor This processor removes every BooleanQueryNode that contains only one child and returns this child. If this child is ModifierQueryNode that was defined by the user. A modifier is not defined by the user when it's a BooleanModifierNode Inheritance System.Object QueryNodeProcessor BooleanSingleChildOptimizationQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanSingleChildOptimizationQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanSingleChildOptimizationQueryNodeProcessor() Declaration public BooleanSingleChildOptimizationQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ModifierQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BoostQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BoostQueryNodeProcessor.html",
    "title": "Class BoostQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostQueryNodeProcessor This processor iterates the query node tree looking for every IFieldableNode that has BOOST in its config. If there is, the boost is applied to that IFieldableNode . Inheritance System.Object QueryNodeProcessor BoostQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also BOOST QueryConfigHandler IFieldableNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.DefaultPhraseSlopQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.DefaultPhraseSlopQueryNodeProcessor.html",
    "title": "Class DefaultPhraseSlopQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultPhraseSlopQueryNodeProcessor This processor verifies if PHRASE_SLOP is defined in the QueryConfigHandler . If it is, it looks for every TokenizedPhraseQueryNode and MultiPhraseQueryNode that does not have any SlopQueryNode applied to it and creates an SlopQueryNode and apply to it. The new SlopQueryNode has the same slop value defined in the configuration. Inheritance System.Object QueryNodeProcessor DefaultPhraseSlopQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class DefaultPhraseSlopQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source DefaultPhraseSlopQueryNodeProcessor() Declaration public DefaultPhraseSlopQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected override void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Overrides QueryNodeProcessor.ProcessChildren(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also SlopQueryNode PHRASE_SLOP"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.FuzzyQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.FuzzyQueryNodeProcessor.html",
    "title": "Class FuzzyQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyQueryNodeProcessor This processor iterates the query node tree looking for every FuzzyQueryNode , when this kind of node is found, it checks on the query configuration for FUZZY_CONFIG , gets the fuzzy prefix length and default similarity from it and set to the fuzzy node. For more information about fuzzy prefix length check: FuzzyQuery . Inheritance System.Object QueryNodeProcessor FuzzyQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also FUZZY_CONFIG FuzzyQuery FuzzyQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.GroupQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.GroupQueryNodeProcessor.html",
    "title": "Class GroupQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GroupQueryNodeProcessor The ISyntaxParser generates query node trees that consider the boolean operator precedence, but Lucene current syntax does not support boolean precedence, so this processor remove all the precedence and apply the equivalent modifier according to the boolean operation defined on an specific query node. If there is a GroupQueryNode in the query node tree, the query node tree is not merged with the one above it. Example: TODO: describe a good example to show how this processor works Inheritance System.Object GroupQueryNodeProcessor Implements IQueryNodeProcessor 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax [Obsolete(\"Use BooleanQuery2ModifierNodeProcessor instead\")] public class GroupQueryNodeProcessor : IQueryNodeProcessor Constructors | Improve this Doc View Source GroupQueryNodeProcessor() Declaration public GroupQueryNodeProcessor() Methods | Improve this Doc View Source GetQueryConfigHandler() Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Implements IQueryNodeProcessor See Also StandardQueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Processors | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Processors <!-- 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. --> Lucene Query Node Processors. Lucene Query Node Processors The package org.apache.lucene.queryparser.flexible.standard.processors contains every processor needed to assembly a pipeline that modifies the query node tree according to the actual Lucene queries. These processors are already assembled correctly in the StandardQueryNodeProcessorPipeline. Classes AllowLeadingWildcardProcessor This processor verifies if ALLOW_LEADING_WILDCARD is defined in the QueryConfigHandler . If it is and leading wildcard is not allowed, it looks for every WildcardQueryNode contained in the query node tree and throws an exception if any of them has a leading wildcard ('*' or '?'). AnalyzerQueryNodeProcessor This processor verifies if ANALYZER is defined in the QueryConfigHandler . If it is and the analyzer is not null , it looks for every FieldQueryNode that is not WildcardQueryNode , FuzzyQueryNode or IRangeQueryNode contained in the query node tree, then it applies the analyzer to that FieldQueryNode object. If the analyzer return only one term, the returned term is set to the FieldQueryNode and it's returned. If the analyzer return more than one term, a TokenizedPhraseQueryNode or MultiPhraseQueryNode is created, whether there is one or more terms at the same position, and it's returned. If no term is returned by the analyzer a NoTokenFoundQueryNode object is returned. BooleanQuery2ModifierNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. This is a variant of BooleanModifiersQueryNodeProcessor which ignores precedence. The StandardSyntaxParser knows the rules of precedence, but lucene does not. e.g. (A AND B OR C AND D) ist treated like (+A +B +C +D) . This processor walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For default BooleanQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Each BooleanQueryNode which direct parent is also a BooleanQueryNode is removed (to ignore the rules of precedence). BooleanSingleChildOptimizationQueryNodeProcessor This processor removes every BooleanQueryNode that contains only one child and returns this child. If this child is ModifierQueryNode that was defined by the user. A modifier is not defined by the user when it's a BooleanModifierNode BoostQueryNodeProcessor This processor iterates the query node tree looking for every IFieldableNode that has BOOST in its config. If there is, the boost is applied to that IFieldableNode . DefaultPhraseSlopQueryNodeProcessor This processor verifies if PHRASE_SLOP is defined in the QueryConfigHandler . If it is, it looks for every TokenizedPhraseQueryNode and MultiPhraseQueryNode that does not have any SlopQueryNode applied to it and creates an SlopQueryNode and apply to it. The new SlopQueryNode has the same slop value defined in the configuration. FuzzyQueryNodeProcessor This processor iterates the query node tree looking for every FuzzyQueryNode , when this kind of node is found, it checks on the query configuration for FUZZY_CONFIG , gets the fuzzy prefix length and default similarity from it and set to the fuzzy node. For more information about fuzzy prefix length check: FuzzyQuery . GroupQueryNodeProcessor The ISyntaxParser generates query node trees that consider the boolean operator precedence, but Lucene current syntax does not support boolean precedence, so this processor remove all the precedence and apply the equivalent modifier according to the boolean operation defined on an specific query node. If there is a GroupQueryNode in the query node tree, the query node tree is not merged with the one above it. Example: TODO: describe a good example to show how this processor works LowercaseExpandedTermsQueryNodeProcessor This processor verifies if LOWERCASE_EXPANDED_TERMS is defined in the QueryConfigHandler . If it is and the expanded terms should be lower-cased, it looks for every WildcardQueryNode , FuzzyQueryNode and children of a IRangeQueryNode and lower-case its term. MatchAllDocsQueryNodeProcessor This processor converts every WildcardQueryNode that is \" : \" to MatchAllDocsQueryNode . MultiFieldQueryNodeProcessor This processor is used to expand terms so the query looks for the same term in different fields. It also boosts a query based on its field. This processor looks for every IFieldableNode contained in the query node tree. If a IFieldableNode is found, it checks if there is a MULTI_FIELDS defined in the QueryConfigHandler . If there is, the IFieldableNode is cloned N times and the clones are added to a BooleanQueryNode together with the original node. N is defined by the number of fields that it will be expanded to. The BooleanQueryNode is returned. MultiTermRewriteMethodProcessor This processor instates the default MultiTermQuery.RewriteMethod , CONSTANT_SCORE_AUTO_REWRITE_DEFAULT , for multi-term query nodes. NumericQueryNodeProcessor This processor is used to convert FieldQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every FieldQueryNode found. If NUMERIC_CONFIG is found, it considers that FieldQueryNode to be a numeric query and convert it to NumericRangeQueryNode with upper and lower inclusive and lower and upper equals to the value represented by the FieldQueryNode converted to System.Object representing a .NET numeric type. It means that field:1 is converted to field:[1 TO 1] . Note that FieldQueryNode s children of a IRangeQueryNode are ignored. NumericRangeQueryNodeProcessor This processor is used to convert TermRangeQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every TermRangeQueryNode found. If NUMERIC_CONFIG is found, it considers that TermRangeQueryNode to be a numeric range query and convert it to NumericRangeQueryNode . OpenRangeQueryNodeProcessor Processes TermRangeQuery s with open ranges. PhraseSlopQueryNodeProcessor This processor removes invalid SlopQueryNode objects in the query node tree. A SlopQueryNode is invalid if its child is neither a TokenizedPhraseQueryNode nor a MultiPhraseQueryNode . RemoveEmptyNonLeafQueryNodeProcessor This processor removes every IQueryNode that is not a leaf and has not children. If after processing the entire tree the root node is not a leaf and has no children, a MatchNoDocsQueryNode object is returned. This processor is used at the end of a pipeline to avoid invalid query node tree structures like a GroupQueryNode or ModifierQueryNode with no children. StandardQueryNodeProcessorPipeline This pipeline has all the processors needed to process a query node tree, generated by StandardSyntaxParser , already assembled. The order they are assembled affects the results. This processor pipeline was designed to work with StandardQueryConfigHandler . The result query node tree can be used to build a Query object using StandardQueryTreeBuilder . TermRangeQueryNodeProcessor This processors process TermRangeQueryNode s. It reads the lower and upper bounds value from the TermRangeQueryNode object and try to parse their values using a dateFormat . If the values cannot be parsed to a date value, it will only create the TermRangeQueryNode using the non-parsed values. If a LOCALE is defined in the QueryConfigHandler it will be used to parse the date, otherwise System.Globalization.CultureInfo.CurrentCulture will be used. If a DATE_RESOLUTION is defined and the DateTools.Resolution is not null it will also be used to parse the date value. WildcardQueryNodeProcessor The StandardSyntaxParser creates PrefixWildcardQueryNode nodes which have values containing the prefixed wildcard. However, Lucene PrefixQuery cannot contain the prefixed wildcard. So, this processor basically removed the prefixed wildcard from the PrefixWildcardQueryNode value."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.LowercaseExpandedTermsQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.LowercaseExpandedTermsQueryNodeProcessor.html",
    "title": "Class LowercaseExpandedTermsQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LowercaseExpandedTermsQueryNodeProcessor This processor verifies if LOWERCASE_EXPANDED_TERMS is defined in the QueryConfigHandler . If it is and the expanded terms should be lower-cased, it looks for every WildcardQueryNode , FuzzyQueryNode and children of a IRangeQueryNode and lower-case its term. Inheritance System.Object QueryNodeProcessor LowercaseExpandedTermsQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class LowercaseExpandedTermsQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source LowercaseExpandedTermsQueryNodeProcessor() Declaration public LowercaseExpandedTermsQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also LOWERCASE_EXPANDED_TERMS"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MatchAllDocsQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MatchAllDocsQueryNodeProcessor.html",
    "title": "Class MatchAllDocsQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchAllDocsQueryNodeProcessor This processor converts every WildcardQueryNode that is \" : \" to MatchAllDocsQueryNode . Inheritance System.Object QueryNodeProcessor MatchAllDocsQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source MatchAllDocsQueryNodeProcessor() Declaration public MatchAllDocsQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also MatchAllDocsQueryNode MatchAllDocsQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiFieldQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiFieldQueryNodeProcessor.html",
    "title": "Class MultiFieldQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiFieldQueryNodeProcessor This processor is used to expand terms so the query looks for the same term in different fields. It also boosts a query based on its field. This processor looks for every IFieldableNode contained in the query node tree. If a IFieldableNode is found, it checks if there is a MULTI_FIELDS defined in the QueryConfigHandler . If there is, the IFieldableNode is cloned N times and the clones are added to a BooleanQueryNode together with the original node. N is defined by the number of fields that it will be expanded to. The BooleanQueryNode is returned. Inheritance System.Object QueryNodeProcessor MultiFieldQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiFieldQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source MultiFieldQueryNodeProcessor() Declaration public MultiFieldQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected override void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Overrides QueryNodeProcessor.ProcessChildren(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also MULTI_FIELDS"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiTermRewriteMethodProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiTermRewriteMethodProcessor.html",
    "title": "Class MultiTermRewriteMethodProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermRewriteMethodProcessor This processor instates the default MultiTermQuery.RewriteMethod , CONSTANT_SCORE_AUTO_REWRITE_DEFAULT , for multi-term query nodes. Inheritance System.Object QueryNodeProcessor MultiTermRewriteMethodProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiTermRewriteMethodProcessor : QueryNodeProcessor, IQueryNodeProcessor Fields | Improve this Doc View Source TAG_ID Declaration public static readonly string TAG_ID Field Value Type Description System.String Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericQueryNodeProcessor.html",
    "title": "Class NumericQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericQueryNodeProcessor This processor is used to convert FieldQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every FieldQueryNode found. If NUMERIC_CONFIG is found, it considers that FieldQueryNode to be a numeric query and convert it to NumericRangeQueryNode with upper and lower inclusive and lower and upper equals to the value represented by the FieldQueryNode converted to System.Object representing a .NET numeric type. It means that field:1 is converted to field:[1 TO 1] . Note that FieldQueryNode s children of a IRangeQueryNode are ignored. Inheritance System.Object QueryNodeProcessor NumericQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NumericQueryNodeProcessor() Constructs a NumericQueryNodeProcessor object. Declaration public NumericQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also NUMERIC_CONFIG FieldQueryNode NumericConfig NumericQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericRangeQueryNodeProcessor.html",
    "title": "Class NumericRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeQueryNodeProcessor This processor is used to convert TermRangeQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every TermRangeQueryNode found. If NUMERIC_CONFIG is found, it considers that TermRangeQueryNode to be a numeric range query and convert it to NumericRangeQueryNode . Inheritance System.Object QueryNodeProcessor NumericRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NumericRangeQueryNodeProcessor() Constructs an empty NumericRangeQueryNode object. Declaration public NumericRangeQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also NUMERIC_CONFIG TermRangeQueryNode NumericConfig NumericRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.OpenRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.OpenRangeQueryNodeProcessor.html",
    "title": "Class OpenRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenRangeQueryNodeProcessor Processes TermRangeQuery s with open ranges. Inheritance System.Object QueryNodeProcessor OpenRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class OpenRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source OpenRangeQueryNodeProcessor() Declaration public OpenRangeQueryNodeProcessor() Fields | Improve this Doc View Source OPEN_RANGE_TOKEN Declaration public static readonly string OPEN_RANGE_TOKEN Field Value Type Description System.String Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.PhraseSlopQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.PhraseSlopQueryNodeProcessor.html",
    "title": "Class PhraseSlopQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhraseSlopQueryNodeProcessor This processor removes invalid SlopQueryNode objects in the query node tree. A SlopQueryNode is invalid if its child is neither a TokenizedPhraseQueryNode nor a MultiPhraseQueryNode . Inheritance System.Object QueryNodeProcessor PhraseSlopQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseSlopQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source PhraseSlopQueryNodeProcessor() Declaration public PhraseSlopQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also SlopQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.RemoveEmptyNonLeafQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.RemoveEmptyNonLeafQueryNodeProcessor.html",
    "title": "Class RemoveEmptyNonLeafQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RemoveEmptyNonLeafQueryNodeProcessor This processor removes every IQueryNode that is not a leaf and has not children. If after processing the entire tree the root node is not a leaf and has no children, a MatchNoDocsQueryNode object is returned. This processor is used at the end of a pipeline to avoid invalid query node tree structures like a GroupQueryNode or ModifierQueryNode with no children. Inheritance System.Object QueryNodeProcessor RemoveEmptyNonLeafQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class RemoveEmptyNonLeafQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source RemoveEmptyNonLeafQueryNodeProcessor() Declaration public RemoveEmptyNonLeafQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also IQueryNode MatchNoDocsQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.StandardQueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.StandardQueryNodeProcessorPipeline.html",
    "title": "Class StandardQueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardQueryNodeProcessorPipeline This pipeline has all the processors needed to process a query node tree, generated by StandardSyntaxParser , already assembled. The order they are assembled affects the results. This processor pipeline was designed to work with StandardQueryConfigHandler . The result query node tree can be used to build a Query object using StandardQueryTreeBuilder . Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline PrecedenceQueryNodeProcessorPipeline Implements IQueryNodeProcessor System.Collections.Generic.IList < IQueryNodeProcessor > System.Collections.Generic.ICollection < IQueryNodeProcessor > System.Collections.Generic.IEnumerable < IQueryNodeProcessor > System.Collections.IEnumerable Inherited Members QueryNodeProcessorPipeline.GetQueryConfigHandler() QueryNodeProcessorPipeline.Process(IQueryNode) QueryNodeProcessorPipeline.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessorPipeline.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Clear() QueryNodeProcessorPipeline.Contains(Object) QueryNodeProcessorPipeline.Item[Int32] QueryNodeProcessorPipeline.IndexOf(IQueryNodeProcessor) QueryNodeProcessorPipeline.GetEnumerator() QueryNodeProcessorPipeline.Remove(IQueryNodeProcessor) QueryNodeProcessorPipeline.RemoveAt(Int32) QueryNodeProcessorPipeline.RemoveRange(Int32, Int32) QueryNodeProcessorPipeline.Set(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Count QueryNodeProcessorPipeline.IsReadOnly QueryNodeProcessorPipeline.GetRange(Int32, Int32) QueryNodeProcessorPipeline.Insert(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Contains(IQueryNodeProcessor) QueryNodeProcessorPipeline.CopyTo(IQueryNodeProcessor[], Int32) QueryNodeProcessorPipeline.IEnumerable.GetEnumerator() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryNodeProcessorPipeline : QueryNodeProcessorPipeline, IQueryNodeProcessor, IList<IQueryNodeProcessor>, ICollection<IQueryNodeProcessor>, IEnumerable<IQueryNodeProcessor>, IEnumerable Constructors | Improve this Doc View Source StandardQueryNodeProcessorPipeline(QueryConfigHandler) Declaration public StandardQueryNodeProcessorPipeline(QueryConfigHandler queryConfig) Parameters Type Name Description QueryConfigHandler queryConfig Implements IQueryNodeProcessor System.Collections.Generic.IList<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable See Also StandardQueryTreeBuilder StandardQueryConfigHandler StandardSyntaxParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.TermRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.TermRangeQueryNodeProcessor.html",
    "title": "Class TermRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermRangeQueryNodeProcessor This processors process TermRangeQueryNode s. It reads the lower and upper bounds value from the TermRangeQueryNode object and try to parse their values using a dateFormat . If the values cannot be parsed to a date value, it will only create the TermRangeQueryNode using the non-parsed values. If a LOCALE is defined in the QueryConfigHandler it will be used to parse the date, otherwise System.Globalization.CultureInfo.CurrentCulture will be used. If a DATE_RESOLUTION is defined and the DateTools.Resolution is not null it will also be used to parse the date value. Inheritance System.Object QueryNodeProcessor TermRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source TermRangeQueryNodeProcessor() Declaration public TermRangeQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also DATE_RESOLUTION LOCALE TermRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.WildcardQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.WildcardQueryNodeProcessor.html",
    "title": "Class WildcardQueryNodeProcessor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WildcardQueryNodeProcessor The StandardSyntaxParser creates PrefixWildcardQueryNode nodes which have values containing the prefixed wildcard. However, Lucene PrefixQuery cannot contain the prefixed wildcard. So, this processor basically removed the prefixed wildcard from the PrefixWildcardQueryNode value. Inheritance System.Object QueryNodeProcessor WildcardQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() 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.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source WildcardQueryNodeProcessor() Declaration public WildcardQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also PrefixQuery PrefixWildcardQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.QueryParserUtil.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.QueryParserUtil.html",
    "title": "Class QueryParserUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserUtil This class defines utility methods to (help) parse query strings into Query objects. Inheritance System.Object QueryParserUtil 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.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class QueryParserUtil Methods | Improve this Doc View Source Escape(String) Returns a string where those characters that TextParser expects to be escaped are escaped by a preceding </code>. Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source Parse(String, String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(\"query\", fields, flags, analyzer); The code above would construct a query: (filename:query) +(contents:query) -(description:query) Declaration public static Query Parse(string query, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description System.String query Query string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition System.ArgumentException if the length of the fields array differs from the length of the flags array | Improve this Doc View Source Parse(String[], String[], Analyzer) Parses a query which searches on the fields specified. If x fields are specified, this effectively constructs: (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx) Declaration public static Query Parse(string[] queries, string[] fields, Analyzer analyzer) Parameters Type Name Description System.String [] queries Queries strings to parse System.String [] fields Fields to search on Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition System.ArgumentException if the length of the queries array differs from the length of the fields array | Improve this Doc View Source Parse(String[], String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] query = {\"query1\", \"query2\", \"query3\"}; string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(query, fields, flags, analyzer); The code above would construct a query: (filename:query1) +(contents:query2) -(description:query3) Declaration public static Query Parse(string[] queries, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description System.String [] queries Queries string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition System.ArgumentException if the length of the queries, fields, and flags array differ"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.StandardQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.StandardQueryParser.html",
    "title": "Class StandardQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StandardQueryParser This class is a helper that enables users to easily use the Lucene query parser. To construct a Query object from a query string, use the Parse(String, String) method: StandardQueryParser queryParserHelper = new StandardQueryParser(); Query query = queryParserHelper.Parse(\"a AND b\", \"defaultField\"); To change any configuration before parsing the query string do, for example: // the query config handler returned by StandardQueryParser is a // StandardQueryConfigHandler queryParserHelper.QueryConfigHandler.Analyzer = new WhitespaceAnalyzer(); The syntax for query strings is as follows (copied from the old QueryParser javadoc): A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation. The text parser used by this helper is a StandardSyntaxParser . The query node processor used by this helper is a StandardQueryNodeProcessorPipeline . The builder used by this helper is a StandardQueryTreeBuilder . Inheritance System.Object QueryParserHelper < Query > StandardQueryParser PrecedenceQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParserHelper<Query>.QueryNodeProcessor QueryParserHelper<Query>.SetQueryNodeProcessor(IQueryNodeProcessor) QueryParserHelper<Query>.SetSyntaxParser(ISyntaxParser) QueryParserHelper<Query>.SetQueryBuilder(IQueryBuilder<Query>) QueryParserHelper<Query>.QueryConfigHandler QueryParserHelper<Query>.QueryBuilder QueryParserHelper<Query>.SyntaxParser QueryParserHelper<Query>.SetQueryConfigHandler(QueryConfigHandler) 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.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryParser : QueryParserHelper<Query>, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source StandardQueryParser() Constructs a StandardQueryParser object. Declaration public StandardQueryParser() | Improve this Doc View Source StandardQueryParser(Analyzer) Constructs a StandardQueryParser object and sets an Analyzer to it. The same as: StandardQueryParser qp = new StandardQueryParser(); qp.QueryConfigHandler.Analyzer = analyzer; Declaration public StandardQueryParser(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer the analyzer to be used by this query parser helper Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery . Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Analyzer Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source DateResolution Gets the default DateTools.Resolution used for certain field when no DateTools.Resolution is defined for this field. Declaration public virtual DateTools.Resolution DateResolution { get; } Property Value Type Description DateTools.Resolution | Improve this Doc View Source DateResolutionMap Gets or Sets the field to map used to normalize each date field. Declaration public virtual IDictionary<string, DateTools.Resolution?> DateResolutionMap { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Nullable < DateTools.Resolution >> | Improve this Doc View Source DefaultOperator Gets or Sets the boolean operator of the QueryParser. In default mode ( OR ) terms without any modifiers are considered optional: for example capital of Hungary is equal to capital OR of OR Hungary . In AND mode terms are considered to be in conjunction: the above mentioned query is parsed as capital AND of AND Hungary Declaration public virtual StandardQueryConfigHandler.Operator DefaultOperator { get; set; } Property Value Type Description StandardQueryConfigHandler.Operator | Improve this Doc View Source EnablePositionIncrements Set to true to enable position increments in result query. When set, result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: false. Declaration public virtual bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FieldsBoost Gets or Sets the field to boost map used to set boost for each field. Declaration public virtual IDictionary<string, float?> FieldsBoost { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Nullable < System.Single >> | Improve this Doc View Source FuzzyMinSim Gets or Sets the minimum similarity for fuzzy queries. Default is defined on DefaultMinSimilarity . Declaration public virtual float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Gets or Sets the prefix length for fuzzy queries. Default is 0. Declaration public virtual int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Gets or Sets current locale, allowing access by subclasses. Used by date range parsing Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery . Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default, it uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT when creating a prefix, wildcard and range queries. This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any Exception due to too many listeners. However, if your application really needs to use the old-fashioned boolean queries expansion rewriting and the above points are not relevant then use this change the rewrite method. Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source NumericConfigMap Declaration public virtual IDictionary<string, NumericConfig> NumericConfigMap { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , NumericConfig > | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. NOTE: Setter is deprecated. Declaration public virtual int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source GetMultiFields() Returns the fields used to expand the query when the field for a certain query is null Declaration public virtual string[] GetMultiFields() Returns Type Description System.String [] the fields used to expand the query | Improve this Doc View Source Parse(String, String) Overrides Parse(String, String) so it casts the return object to Query . For more reference about this method, check Parse(String, String) . Declaration public override Query Parse(string query, string defaultField) Parameters Type Name Description System.String query the query string System.String defaultField the default field used by the text parser Returns Type Description Query the object built from the query Overrides Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper<Lucene.Net.Search.Query>.Parse(System.String, System.String) Exceptions Type Condition QueryNodeException if something wrong happens along the three phases | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Sets the default DateTools.Resolution used for certain field when no DateTools.Resolution is defined for this field. Declaration public virtual void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution the default DateTools.Resolution | Improve this Doc View Source SetDateResolution(IDictionary<String, Nullable<DateTools.Resolution>>) Sets the DateTools.Resolution used for each field Declaration [Obsolete(\"Use DateResolutionMap property instead.\")] public virtual void SetDateResolution(IDictionary<string, DateTools.Resolution?> dateRes) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.Nullable < DateTools.Resolution >> dateRes a collection that maps a field to its DateTools.Resolution | Improve this Doc View Source SetDefaultPhraseSlop(Int32) Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration [Obsolete(\"Use PhraseSlop property setter instead.\")] public virtual void SetDefaultPhraseSlop(int defaultPhraseSlop) Parameters Type Name Description System.Int32 defaultPhraseSlop | Improve this Doc View Source SetMultiFields(String[]) Set the fields a query should be expanded to when the field is null Declaration public virtual void SetMultiFields(string[] fields) Parameters Type Name Description System.String [] fields the fields used to expand the query | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements ICommonQueryParserConfiguration See Also StandardQueryParser StandardQueryConfigHandler StandardSyntaxParser StandardQueryNodeProcessorPipeline StandardQueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.html",
    "title": "Namespace Lucene.Net.QueryParsers.Simple | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Simple <!-- 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. --> A simple query parser for human-entered queries. Classes SimpleQueryParser SimpleQueryParser is used to parse human readable query syntax. The main idea behind this parser is that a person should be able to type whatever they want to represent a query, and this parser will do its best to interpret what to search for no matter how poorly composed the request may be. Tokens are considered to be any of a term, phrase, or subquery for the operations described below. Whitespace including ' ' '\\n' '\\r' and '\\t' and certain operators may be used to delimit tokens ( ) + | \" . Any errors in query syntax will be ignored and the parser will attempt to decipher what it can; however, this may mean odd or unexpected results. Query Operators ' + ' specifies AND operation: token1+token2 ' | ' specifies OR operation: token1|token2 ' - ' negates a single token: -token0 ' \" ' creates phrases of terms: \"term1 term2 ...\" ' ' at the end of terms specifies prefix query: term ' ~ N' at the end of terms specifies fuzzy query: term~1 ' ~ N' at the end of phrases specifies near query: \"term1 term2\"~5 ' ( ' and ' ) ' specifies precedence: token1 + (token2 | token3) The default operator is OR if no other operator is specified. For example, the following will OR token1 and token2 together: token1 token2 Normal operator precedence will be simple order from right to left. For example, the following will evaluate token1 OR token2 first, then AND with token3 : token1 | token2 + token3 Escaping An individual term may contain any possible character with certain characters requiring escaping using a ' </code>'. The following characters will need to be escaped in terms and phrases: + | \" ( ) ' </code> The ' - ' operator is a special case. On individual terms (not phrases) the first character of a term that is - must be escaped; however, any ' - ' characters beyond the first character do not need to be escaped. For example: -term1 -- Specifies NOT operation against term1 -term1 -- Searches for the term -term1 . term-1 -- Searches for the term term-1 . term-1 -- Searches for the term term-1 . The ' ' operator is a special case. On individual terms (not phrases) the last character of a term that is ' ' must be escaped; however, any ' ' characters before the last character do not need to be escaped: term1 -- Searches for the prefix term1 term1* -- Searches for the term term1 term1 -- Searches for the term term 1 term*1 -- Searches for the term term1 Note that above examples consider the terms before text processing. Enums Operator"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.Operator.html",
    "title": "Enum Operator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Operator Namespace : Lucene.Net.QueryParsers.Simple Assembly : Lucene.Net.QueryParser.dll Syntax [Flags] public enum Operator Fields Name Description AND_OPERATOR Enables AND operator (+) ESCAPE_OPERATOR Enables ESCAPE operator () FUZZY_OPERATOR Enables FUZZY operators: (~) on single terms NEAR_OPERATOR Enables NEAR operators: (~) on phrases NOT_OPERATOR Enables NOT operator (-) OR_OPERATOR Enables OR operator (|) PHRASE_OPERATOR Enables PHRASE operator (\") PRECEDENCE_OPERATORS Enables PRECEDENCE operators: ( and ) PREFIX_OPERATOR Enables PREFIX operator (*) WHITESPACE_OPERATOR Enables WHITESPACE operators: ' ' '\\n' '\\r' '\\t'"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.SimpleQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.SimpleQueryParser.html",
    "title": "Class SimpleQueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleQueryParser SimpleQueryParser is used to parse human readable query syntax. The main idea behind this parser is that a person should be able to type whatever they want to represent a query, and this parser will do its best to interpret what to search for no matter how poorly composed the request may be. Tokens are considered to be any of a term, phrase, or subquery for the operations described below. Whitespace including ' ' '\\n' '\\r' and '\\t' and certain operators may be used to delimit tokens ( ) + | \" . Any errors in query syntax will be ignored and the parser will attempt to decipher what it can; however, this may mean odd or unexpected results. Query Operators ' + ' specifies AND operation: token1+token2 ' | ' specifies OR operation: token1|token2 ' - ' negates a single token: -token0 ' \" ' creates phrases of terms: \"term1 term2 ...\" ' ' at the end of terms specifies prefix query: term ' ~ N' at the end of terms specifies fuzzy query: term~1 ' ~ N' at the end of phrases specifies near query: \"term1 term2\"~5 ' ( ' and ' ) ' specifies precedence: token1 + (token2 | token3) The default operator is OR if no other operator is specified. For example, the following will OR token1 and token2 together: token1 token2 Normal operator precedence will be simple order from right to left. For example, the following will evaluate token1 OR token2 first, then AND with token3 : token1 | token2 + token3 Escaping An individual term may contain any possible character with certain characters requiring escaping using a ' </code>'. The following characters will need to be escaped in terms and phrases: + | \" ( ) ' </code> The ' - ' operator is a special case. On individual terms (not phrases) the first character of a term that is - must be escaped; however, any ' - ' characters beyond the first character do not need to be escaped. For example: -term1 -- Specifies NOT operation against term1 -term1 -- Searches for the term -term1 . term-1 -- Searches for the term term-1 . term-1 -- Searches for the term term-1 . The ' ' operator is a special case. On individual terms (not phrases) the last character of a term that is ' ' must be escaped; however, any ' ' characters before the last character do not need to be escaped: term1 -- Searches for the prefix term1 term1* -- Searches for the term term1 term1 -- Searches for the term term 1 term*1 -- Searches for the term term1 Note that above examples consider the terms before text processing. Inheritance System.Object QueryBuilder SimpleQueryParser Inherited Members QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() 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.QueryParsers.Simple Assembly : Lucene.Net.QueryParser.dll Syntax public class SimpleQueryParser : QueryBuilder Constructors | Improve this Doc View Source SimpleQueryParser(Analyzer, IDictionary<String, Single>) Creates a new parser searching over multiple fields with different weights. Declaration public SimpleQueryParser(Analyzer analyzer, IDictionary<string, float> weights) Parameters Type Name Description Analyzer analyzer System.Collections.Generic.IDictionary < System.String , System.Single > weights | Improve this Doc View Source SimpleQueryParser(Analyzer, IDictionary<String, Single>, Operator) Creates a new parser with custom flags used to enable/disable certain features. Declaration public SimpleQueryParser(Analyzer analyzer, IDictionary<string, float> weights, Operator flags) Parameters Type Name Description Analyzer analyzer System.Collections.Generic.IDictionary < System.String , System.Single > weights Operator flags | Improve this Doc View Source SimpleQueryParser(Analyzer, String) Creates a new parser searching over a single field. Declaration public SimpleQueryParser(Analyzer analyzer, string field) Parameters Type Name Description Analyzer analyzer System.String field Fields | Improve this Doc View Source m_flags flags to the parser (to turn features on/off) Declaration protected readonly Operator m_flags Field Value Type Description Operator | Improve this Doc View Source m_weights Map of fields to query against with their weights Declaration protected readonly IDictionary<string, float> m_weights Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Single > Properties | Improve this Doc View Source DefaultOperator Gets or Sets the implicit operator setting, which will be either SHOULD or MUST . Declaration public virtual Occur DefaultOperator { get; set; } Property Value Type Description Occur Methods | Improve this Doc View Source NewDefaultQuery(String) Factory method to generate a standard query (no phrase or prefix operators). Declaration protected virtual Query NewDefaultQuery(string text) Parameters Type Name Description System.String text Returns Type Description Query | Improve this Doc View Source NewFuzzyQuery(String, Int32) Factory method to generate a fuzzy query. Declaration protected virtual Query NewFuzzyQuery(string text, int fuzziness) Parameters Type Name Description System.String text System.Int32 fuzziness Returns Type Description Query | Improve this Doc View Source NewPhraseQuery(String, Int32) Factory method to generate a phrase query with slop. Declaration protected virtual Query NewPhraseQuery(string text, int slop) Parameters Type Name Description System.String text System.Int32 slop Returns Type Description Query | Improve this Doc View Source NewPrefixQuery(String) Factory method to generate a prefix query. Declaration protected virtual Query NewPrefixQuery(string text) Parameters Type Name Description System.String text Returns Type Description Query | Improve this Doc View Source Parse(String) Parses the query text and returns parsed query (or null if empty) Declaration public Query Parse(string queryText) Parameters Type Name Description System.String queryText Returns Type Description Query | Improve this Doc View Source Simplify(BooleanQuery) Helper to simplify boolean queries with 0 or 1 clause Declaration protected virtual Query Simplify(BooleanQuery bq) Parameters Type Name Description BooleanQuery bq Returns Type Description Query"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. Inheritance System.Object FastCharStream Implements ICharStream 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.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : ICharStream Constructors | Improve this Doc View Source FastCharStream(TextReader) Constructs from a System.IO.TextReader . Declaration public FastCharStream(TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Declaration public string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Surround.Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Surround.Parser <!-- 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 package contains the QueryParser.jj source file for the Surround parser. Parsing the text of a query results in a SrndQuery in the org.apache.lucene.queryparser.surround.query package. Classes FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. LexicalToken ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. QueryParser This class is generated by JavaCC. The only method that clients should need to call is Parse(String) . This parser generates queries that make use of position information (Span queries). It provides positional operators ( w and n ) that accept a numeric distance, as well as boolean operators ( and , or , and not , wildcards ( /// and ? ), quoting (with \" ), and boosting (via ^ ). The operators (W, N, AND, OR, NOT) can be expressed lower-cased or upper-cased, and the non-unary operators (everything but NOT) support both infix (a AND b AND c) and prefix AND(a, b, c) notation. The W and N operators express a positional relationship among their operands. N is ordered, and W is unordered. The distance is 1 by default, meaning the operands are adjacent, or may be provided as a prefix from 2-99. So, for example, 3W(a, b) means that terms a and b must appear within three positions of each other, or in other words, up to two terms may appear between a and b. QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() QueryParserTokenManager Token Manager. RegexpToken Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Returns the column position of the character last read. Declaration [Obsolete] int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Returns the line number of the character last read. Declaration [Obsolete] int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = Image; return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any System.IO.IOException . Declaration char ReadChar() Returns Type Description System.Char"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken 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.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = 2 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object System.Exception ParseException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : Exception, ISerializable Constructors | Improve this Doc View Source ParseException() Declaration public ParseException() | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method \"GenerateParseException\" in the generated parser. Calling this constructor generates a new object of this type with the fields currentToken , expectedTokenSequences , and tokenImage set. Declaration public ParseException(Token currentToken, int[][] expectedTokenSequences, string[] tokenImage) Parameters Type Name Description Token currentToken System.Int32 [][] expectedTokenSequences System.String [] tokenImage | Improve this Doc View Source ParseException(String) Declaration public ParseException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParseException(String, Exception) Declaration public ParseException(string message, Exception innerException) Parameters Type Name Description System.String message System.Exception innerException Fields | Improve this Doc View Source eol The end of line string for this machine. Declaration protected static string eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token following this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String [] Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParser.html",
    "title": "Class QueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParser This class is generated by JavaCC. The only method that clients should need to call is Parse(String) . This parser generates queries that make use of position information (Span queries). It provides positional operators ( w and n ) that accept a numeric distance, as well as boolean operators ( and , or , and not , wildcards ( /// and ? ), quoting (with \" ), and boosting (via ^ ). The operators (W, N, AND, OR, NOT) can be expressed lower-cased or upper-cased, and the non-unary operators (everything but NOT) support both infix (a AND b AND c) and prefix AND(a, b, c) notation. The W and N operators express a positional relationship among their operands. N is ordered, and W is unordered. The distance is 1 by default, meaning the operands are adjacent, or may be provided as a prefix from 2-99. So, for example, 3W(a, b) means that terms a and b must appear within three positions of each other, or in other words, up to two terms may appear between a and b. Inheritance System.Object QueryParser 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.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParser Constructors | Improve this Doc View Source QueryParser() Declaration public QueryParser() | Improve this Doc View Source QueryParser(ICharStream) Constructor with user supplied ICharStream . Declaration public QueryParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParser(QueryParserTokenManager) Constructor with generated Token Manager. Declaration public QueryParser(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public QueryParserTokenManager TokenSource { get; set; } Property Value Type Description QueryParserTokenManager Methods | Improve this Doc View Source AllowedSuffix(String) Declaration protected virtual bool AllowedSuffix(string suffixed) Parameters Type Name Description System.String suffixed Returns Type Description System.Boolean | Improve this Doc View Source AllowedTruncation(String) Declaration protected virtual bool AllowedTruncation(string truncated) Parameters Type Name Description System.String truncated Returns Type Description System.Boolean | Improve this Doc View Source AndQuery() Declaration public SrndQuery AndQuery() Returns Type Description SrndQuery | Improve this Doc View Source CheckDistanceSubQueries(DistanceQuery, String) Declaration protected static void CheckDistanceSubQueries(DistanceQuery distq, string opName) Parameters Type Name Description DistanceQuery distq System.String opName | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source FieldsQuery() Declaration public SrndQuery FieldsQuery() Returns Type Description SrndQuery | Improve this Doc View Source FieldsQueryList() Declaration public IList<SrndQuery> FieldsQueryList() Returns Type Description System.Collections.Generic.IList < SrndQuery > | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetAndQuery(IList<SrndQuery>, Boolean, Token) Declaration protected virtual SrndQuery GetAndQuery(IList<SrndQuery> queries, bool infix, Token andToken) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix Token andToken Returns Type Description SrndQuery | Improve this Doc View Source GetDistanceQuery(IList<SrndQuery>, Boolean, Token, Boolean) Declaration protected virtual SrndQuery GetDistanceQuery(IList<SrndQuery> queries, bool infix, Token dToken, bool ordered) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix Token dToken System.Boolean ordered Returns Type Description SrndQuery | Improve this Doc View Source GetFieldsQuery(SrndQuery, IList<String>) Declaration protected virtual SrndQuery GetFieldsQuery(SrndQuery q, IList<string> fieldNames) Parameters Type Name Description SrndQuery q System.Collections.Generic.IList < System.String > fieldNames Returns Type Description SrndQuery | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetNotQuery(IList<SrndQuery>, Token) Declaration protected virtual SrndQuery GetNotQuery(IList<SrndQuery> queries, Token notToken) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries Token notToken Returns Type Description SrndQuery | Improve this Doc View Source GetOpDistance(String) Declaration protected static int GetOpDistance(string distanceOp) Parameters Type Name Description System.String distanceOp Returns Type Description System.Int32 | Improve this Doc View Source GetOrQuery(IList<SrndQuery>, Boolean, Token) Declaration protected virtual SrndQuery GetOrQuery(IList<SrndQuery> queries, bool infix, Token orToken) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix Token orToken Returns Type Description SrndQuery | Improve this Doc View Source GetPrefixQuery(String, Boolean) Declaration protected virtual SrndQuery GetPrefixQuery(string prefix, bool quoted) Parameters Type Name Description System.String prefix System.Boolean quoted Returns Type Description SrndQuery | Improve this Doc View Source GetTermQuery(String, Boolean) Declaration protected virtual SrndQuery GetTermQuery(string term, bool quoted) Parameters Type Name Description System.String term System.Boolean quoted Returns Type Description SrndQuery | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source GetTruncQuery(String) Declaration protected virtual SrndQuery GetTruncQuery(string truncated) Parameters Type Name Description System.String truncated Returns Type Description SrndQuery | Improve this Doc View Source NotQuery() Declaration public SrndQuery NotQuery() Returns Type Description SrndQuery | Improve this Doc View Source NQuery() Declaration public SrndQuery NQuery() Returns Type Description SrndQuery | Improve this Doc View Source OptionalFields() Declaration public IList<string> OptionalFields() Returns Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source OptionalWeights(SrndQuery) Declaration public void OptionalWeights(SrndQuery q) Parameters Type Name Description SrndQuery q | Improve this Doc View Source OrQuery() Declaration public SrndQuery OrQuery() Returns Type Description SrndQuery | Improve this Doc View Source Parse(String) Declaration public static SrndQuery Parse(string query) Parameters Type Name Description System.String query Returns Type Description SrndQuery | Improve this Doc View Source Parse2(String) Declaration public virtual SrndQuery Parse2(string query) Parameters Type Name Description System.String query Returns Type Description SrndQuery | Improve this Doc View Source PrefixOperatorQuery() Declaration public SrndQuery PrefixOperatorQuery() Returns Type Description SrndQuery | Improve this Doc View Source PrimaryQuery() Declaration public SrndQuery PrimaryQuery() Returns Type Description SrndQuery | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public virtual void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(QueryParserTokenManager) Reinitialize. Declaration public virtual void ReInit(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source SimpleTerm() Declaration public SrndQuery SimpleTerm() Returns Type Description SrndQuery | Improve this Doc View Source TopSrndQuery() Declaration public SrndQuery TopSrndQuery() Returns Type Description SrndQuery | Improve this Doc View Source WQuery() Declaration public SrndQuery WQuery() Returns Type Description SrndQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserConstants.html",
    "title": "Class QueryParserConstants | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() Inheritance System.Object QueryParserConstants 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.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class QueryParserConstants Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserTokenManager.html",
    "title": "Class QueryParserTokenManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryParserTokenManager Token Manager. Inheritance System.Object QueryParserTokenManager 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.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserTokenManager Constructors | Improve this Doc View Source QueryParserTokenManager(ICharStream) Constructor. Declaration public QueryParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParserTokenManager(ICharStream, Int32) Constructor. Declaration public QueryParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialize parser. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialize parser. Declaration public void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public virtual void SetDebugStream(TextWriter ds) Parameters Type Name Description System.IO.TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken 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.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = 9 Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = 17 Field Value Type Description System.Int32 | Improve this Doc View Source COLON RegularExpression Id. Declaration public const int COLON = 16 Field Value Type Description System.Int32 | Improve this Doc View Source COMMA RegularExpression Id. Declaration public const int COMMA = 15 Field Value Type Description System.Int32 | Improve this Doc View Source DISTOP_NUM RegularExpression Id. Declaration public const int DISTOP_NUM = 6 Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = 0 Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = 13 Field Value Type Description System.Int32 | Improve this Doc View Source N RegularExpression Id. Declaration public const int N = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = 23 Field Value Type Description System.Int32 | Improve this Doc View Source ONE_CHAR RegularExpression Id. Declaration public const int ONE_CHAR = 5 Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = 8 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = 19 Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = 14 Field Value Type Description System.Int32 | Improve this Doc View Source STAR RegularExpression Id. Declaration public const int STAR = 4 Field Value Type Description System.Int32 | Improve this Doc View Source SUFFIXTERM RegularExpression Id. Declaration public const int SUFFIXTERM = 20 Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = 22 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source TRUNCQUOTED RegularExpression Id. Declaration public const int TRUNCQUOTED = 18 Field Value Type Description System.Int32 | Improve this Doc View Source TRUNCTERM RegularExpression Id. Declaration public const int TRUNCTERM = 21 Field Value Type Description System.Int32 | Improve this Doc View Source W RegularExpression Id. Declaration public const int W = 11 Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = 3 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token 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) Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax [Serializable] public class Token Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object System.Exception TokenMgrError Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception, ISerializable Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean EOFSeen System.Int32 lexState System.Int32 errorLine System.Int32 errorColumn System.String errorAfter System.Char curChar System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Detailed error message Remarks You can customize the lexical error message by modifying this method. Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.AndQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.AndQuery.html",
    "title": "Class AndQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AndQuery Factory for conjunctions Inheritance System.Object SrndQuery ComposedQuery AndQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class AndQuery : ComposedQuery Constructors | Improve this Doc View Source AndQuery(IList<SrndQuery>, Boolean, String) Declaration public AndQuery(IList<SrndQuery> queries, bool inf, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean inf System.String opName Methods | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.BasicQueryFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.BasicQueryFactory.html",
    "title": "Class BasicQueryFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicQueryFactory Factory for creating basic term queries Inheritance System.Object BasicQueryFactory 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.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class BasicQueryFactory Constructors | Improve this Doc View Source BasicQueryFactory() Declaration public BasicQueryFactory() | Improve this Doc View Source BasicQueryFactory(Int32) Declaration public BasicQueryFactory(int maxBasicQueries) Parameters Type Name Description System.Int32 maxBasicQueries Properties | Improve this Doc View Source MaxBasicQueries Declaration public virtual int MaxBasicQueries { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NrQueriesMade Declaration public virtual int NrQueriesMade { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckMax() Declaration protected virtual void CheckMax() | Improve this Doc View Source Equals(Object) Two BasicQueryFactory's are equal when they generate the same types of basic queries, or both cannot generate queries anymore. 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 NewSpanTermQuery(Term) Declaration public virtual SpanTermQuery NewSpanTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description SpanTermQuery | Improve this Doc View Source NewTermQuery(Term) Declaration public virtual TermQuery NewTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description TermQuery | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.ComposedQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.ComposedQuery.html",
    "title": "Class ComposedQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ComposedQuery Base class for composite queries (such as AND/OR/NOT) Inheritance System.Object SrndQuery ComposedQuery AndQuery DistanceQuery NotQuery OrQuery Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ComposedQuery : SrndQuery Constructors | Improve this Doc View Source ComposedQuery(IList<SrndQuery>, Boolean, String) Declaration public ComposedQuery(IList<SrndQuery> qs, bool operatorInfix, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > qs System.Boolean operatorInfix System.String opName Fields | Improve this Doc View Source m_opName Declaration protected string m_opName Field Value Type Description System.String | Improve this Doc View Source m_queries Declaration protected IList<SrndQuery> m_queries Field Value Type Description System.Collections.Generic.IList < SrndQuery > Properties | Improve this Doc View Source BracketClose Declaration protected virtual string BracketClose { get; } Property Value Type Description System.String | Improve this Doc View Source BracketOpen Declaration protected virtual string BracketOpen { get; } Property Value Type Description System.String | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public override bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean Overrides SrndQuery.IsFieldsSubQueryAcceptable | Improve this Doc View Source IsOperatorInfix Declaration public virtual bool IsOperatorInfix { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NrSubQueries Declaration public virtual int NrSubQueries { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OperatorName Declaration public virtual string OperatorName { get; } Property Value Type Description System.String | Improve this Doc View Source PrefixSeparator Declaration protected virtual string PrefixSeparator { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetSubQueriesEnumerator() Declaration public virtual IEnumerator<SrndQuery> GetSubQueriesEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < SrndQuery > | Improve this Doc View Source GetSubQuery(Int32) Declaration public virtual SrndQuery GetSubQuery(int qn) Parameters Type Name Description System.Int32 qn Returns Type Description SrndQuery | Improve this Doc View Source InfixToString(StringBuilder) Declaration protected virtual void InfixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source MakeLuceneSubQueriesField(String, BasicQueryFactory) Declaration public virtual IList<Query> MakeLuceneSubQueriesField(string fn, BasicQueryFactory qf) Parameters Type Name Description System.String fn BasicQueryFactory qf Returns Type Description System.Collections.Generic.IList < Query > | Improve this Doc View Source PrefixToString(StringBuilder) Declaration protected virtual void PrefixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source Recompose(IList<SrndQuery>) Declaration protected virtual void Recompose(IList<SrndQuery> queries) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.DistanceQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.DistanceQuery.html",
    "title": "Class DistanceQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DistanceQuery Factory for NEAR queries Inheritance System.Object SrndQuery ComposedQuery DistanceQuery Implements IDistanceSubQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class DistanceQuery : ComposedQuery, IDistanceSubQuery Constructors | Improve this Doc View Source DistanceQuery(IList<SrndQuery>, Boolean, Int32, String, Boolean) Declaration public DistanceQuery(IList<SrndQuery> queries, bool infix, int opDistance, string opName, bool ordered) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix System.Int32 opDistance System.String opName System.Boolean ordered Properties | Improve this Doc View Source OpDistance Declaration public virtual int OpDistance { get; } Property Value Type Description System.Int32 | Improve this Doc View Source QueriesOrdered Declaration public virtual bool QueriesOrdered { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source GetSpanNearQuery(IndexReader, String, Single, BasicQueryFactory) Declaration public virtual Query GetSpanNearQuery(IndexReader reader, string fieldName, float boost, BasicQueryFactory qf) Parameters Type Name Description IndexReader reader System.String fieldName System.Single boost BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Implements IDistanceSubQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.FieldsQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.FieldsQuery.html",
    "title": "Class FieldsQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldsQuery Forms an OR query of the provided query across multiple fields. Inheritance System.Object SrndQuery FieldsQuery Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldsQuery : SrndQuery Constructors | Improve this Doc View Source FieldsQuery(SrndQuery, IList<String>, Char) Declaration public FieldsQuery(SrndQuery q, IList<string> fieldNames, char fieldOp) Parameters Type Name Description SrndQuery q System.Collections.Generic.IList < System.String > fieldNames System.Char fieldOp | Improve this Doc View Source FieldsQuery(SrndQuery, String, Char) Declaration public FieldsQuery(SrndQuery q, string fieldName, char fieldOp) Parameters Type Name Description SrndQuery q System.String fieldName System.Char fieldOp Properties | Improve this Doc View Source FieldNames Declaration public virtual IList<string> FieldNames { get; } Property Value Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source FieldOperator Declaration public virtual char FieldOperator { get; } Property Value Type Description System.Char | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public override bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean Overrides SrndQuery.IsFieldsSubQueryAcceptable Methods | Improve this Doc View Source FieldNamesToString(StringBuilder) Declaration protected virtual void FieldNamesToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) | Improve this Doc View Source MakeLuceneQueryNoBoost(BasicQueryFactory) Declaration public virtual Query MakeLuceneQueryNoBoost(BasicQueryFactory qf) Parameters Type Name Description BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.html",
    "title": "Namespace Lucene.Net.QueryParsers.Surround.Query | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Surround.Query <!-- 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 package contains SrndQuery and its subclasses. The parser in the org.apache.lucene.queryparser.surround.parser package normally generates a SrndQuery. For searching an org.apache.lucene.search.Query is provided by the SrndQuery.makeLuceneQueryField method. For this, TermQuery, BooleanQuery and SpanQuery are used from Lucene. Classes AndQuery Factory for conjunctions BasicQueryFactory Factory for creating basic term queries ComposedQuery Base class for composite queries (such as AND/OR/NOT) DistanceQuery Factory for NEAR queries FieldsQuery Forms an OR query of the provided query across multiple fields. NotQuery Factory for prohibited clauses OrQuery Factory for disjunctions SimpleTerm Base class for queries that expand to sets of simple terms. SpanNearClauseFactory SpanNearClauseFactory: Operations: create for a field name and an indexreader. add a weighted Term - this should add a corresponding SpanTermQuery, or increase the weight of an existing one. add a weighted subquery SpanNearQuery create a clause for SpanNearQuery from the things added above. For this, create an array of SpanQuery's from the added ones. The clause normally is a SpanOrQuery over the added subquery SpanNearQuery the SpanTermQuery's for the added Term's When it is necessary to suppress double subqueries as much as possible: GetHashCode() and Equals() on unweighted SpanQuery are needed (possibly via GetTerms(), the terms are individually hashable). Idem SpanNearQuery: hash on the subqueries and the slop. Evt. merge SpanNearQuery's by adding the weights of the corresponding subqueries. To be determined: Are SpanQuery weights handled correctly during search by Lucene? Should the resulting SpanOrQuery be sorted? Could other SpanQueries be added for use in this factory: SpanOrQuery: in principle yes, but it only has access to it's terms via getTerms(); are the corresponding weights available? SpanFirstQuery: treat similar to subquery SpanNearQuery. (ok?) SpanNotQuery: treat similar to subquery SpanNearQuery. (ok?) Factory for SpanOrQuery SrndPrefixQuery Query that matches string prefixes SrndQuery Lowest level base class for surround queries SrndTermQuery Simple single-term clause SrndTruncQuery Query that matches wildcards TooManyBasicQueries Exception thrown when BasicQueryFactory would exceed the limit of query clauses. Interfaces IDistanceSubQuery Interface for queries that can be nested as subqueries into a span near. SimpleTerm.IMatchingTermVisitor Callback to visit each matching term during \"rewrite\" in VisitMatchingTerm(Term)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.IDistanceSubQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.IDistanceSubQuery.html",
    "title": "Interface IDistanceSubQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IDistanceSubQuery Interface for queries that can be nested as subqueries into a span near. Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public interface IDistanceSubQuery Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() When DistanceSubQueryNotAllowed() returns non null, the reason why the subquery is not allowed as a distance subquery is returned. When DistanceSubQueryNotAllowed() returns null AddSpanQueries(SpanNearClauseFactory) can be used in the creation of the span near clause for the subquery. Declaration string DistanceSubQueryNotAllowed() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.NotQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.NotQuery.html",
    "title": "Class NotQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NotQuery Factory for prohibited clauses Inheritance System.Object SrndQuery ComposedQuery NotQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class NotQuery : ComposedQuery Constructors | Improve this Doc View Source NotQuery(IList<SrndQuery>, String) Declaration public NotQuery(IList<SrndQuery> queries, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.String opName Methods | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.OrQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.OrQuery.html",
    "title": "Class OrQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OrQuery Factory for disjunctions Inheritance System.Object SrndQuery ComposedQuery OrQuery Implements IDistanceSubQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class OrQuery : ComposedQuery, IDistanceSubQuery Constructors | Improve this Doc View Source OrQuery(IList<SrndQuery>, Boolean, String) Declaration public OrQuery(IList<SrndQuery> queries, bool infix, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix System.String opName Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Implements IDistanceSubQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.html",
    "title": "Class SimpleTerm | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleTerm Base class for queries that expand to sets of simple terms. Inheritance System.Object SrndQuery SimpleTerm SrndPrefixQuery SrndTermQuery SrndTruncQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SimpleTerm : SrndQuery, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SimpleTerm(Boolean) Declaration public SimpleTerm(bool q) Parameters Type Name Description System.Boolean q Properties | Improve this Doc View Source FieldOperator Declaration public virtual string FieldOperator { get; } Property Value Type Description System.String | Improve this Doc View Source Quote Declaration public virtual string Quote { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source CompareTo(SimpleTerm) Declaration [Obsolete(\"deprecated (March 2011) Not normally used, to be removed from Lucene 4.0. This class implementing Comparable is to be removed at the same time.\")] public int CompareTo(SimpleTerm ost) Parameters Type Name Description SimpleTerm ost Returns Type Description System.Int32 | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) | Improve this Doc View Source SuffixToString(StringBuilder) Declaration protected virtual void SuffixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString() | Improve this Doc View Source ToStringUnquoted() Declaration public abstract string ToStringUnquoted() Returns Type Description System.String | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public abstract void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.IMatchingTermVisitor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.IMatchingTermVisitor.html",
    "title": "Interface SimpleTerm.IMatchingTermVisitor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface SimpleTerm.IMatchingTermVisitor Callback to visit each matching term during \"rewrite\" in VisitMatchingTerm(Term) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public interface IMatchingTermVisitor Methods | Improve this Doc View Source VisitMatchingTerm(Term) Declaration void VisitMatchingTerm(Term t) Parameters Type Name Description Term t"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SpanNearClauseFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SpanNearClauseFactory.html",
    "title": "Class SpanNearClauseFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanNearClauseFactory SpanNearClauseFactory: Operations: create for a field name and an indexreader. add a weighted Term - this should add a corresponding SpanTermQuery, or increase the weight of an existing one. add a weighted subquery SpanNearQuery create a clause for SpanNearQuery from the things added above. For this, create an array of SpanQuery's from the added ones. The clause normally is a SpanOrQuery over the added subquery SpanNearQuery the SpanTermQuery's for the added Term's When it is necessary to suppress double subqueries as much as possible: GetHashCode() and Equals() on unweighted SpanQuery are needed (possibly via GetTerms(), the terms are individually hashable). Idem SpanNearQuery: hash on the subqueries and the slop. Evt. merge SpanNearQuery's by adding the weights of the corresponding subqueries. To be determined: Are SpanQuery weights handled correctly during search by Lucene? Should the resulting SpanOrQuery be sorted? Could other SpanQueries be added for use in this factory: SpanOrQuery: in principle yes, but it only has access to it's terms via getTerms(); are the corresponding weights available? SpanFirstQuery: treat similar to subquery SpanNearQuery. (ok?) SpanNotQuery: treat similar to subquery SpanNearQuery. (ok?) Factory for SpanOrQuery Inheritance System.Object SpanNearClauseFactory 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.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNearClauseFactory Constructors | Improve this Doc View Source SpanNearClauseFactory(IndexReader, String, BasicQueryFactory) Declaration public SpanNearClauseFactory(IndexReader reader, string fieldName, BasicQueryFactory qf) Parameters Type Name Description IndexReader reader System.String fieldName BasicQueryFactory qf Properties | Improve this Doc View Source BasicQueryFactory Declaration public virtual BasicQueryFactory BasicQueryFactory { get; } Property Value Type Description BasicQueryFactory | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FieldName Declaration public virtual string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source IndexReader Declaration public virtual IndexReader IndexReader { get; } Property Value Type Description IndexReader Methods | Improve this Doc View Source AddSpanQuery(Query) Declaration public virtual void AddSpanQuery(Query q) Parameters Type Name Description Query q | Improve this Doc View Source AddSpanQueryWeighted(SpanQuery, Single) Declaration protected virtual void AddSpanQueryWeighted(SpanQuery sq, float weight) Parameters Type Name Description SpanQuery sq System.Single weight | Improve this Doc View Source AddTermWeighted(Term, Single) Declaration public virtual void AddTermWeighted(Term t, float weight) Parameters Type Name Description Term t System.Single weight | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source MakeSpanClause() Declaration public virtual SpanQuery MakeSpanClause() Returns Type Description SpanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndPrefixQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndPrefixQuery.html",
    "title": "Class SrndPrefixQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SrndPrefixQuery Query that matches string prefixes Inheritance System.Object SrndQuery SimpleTerm SrndPrefixQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndPrefixQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndPrefixQuery(String, Boolean, Char) Declaration public SrndPrefixQuery(string prefix, bool quoted, char truncator) Parameters Type Name Description System.String prefix System.Boolean quoted System.Char truncator Properties | Improve this Doc View Source Prefix Declaration public virtual string Prefix { get; } Property Value Type Description System.String | Improve this Doc View Source SuffixOperator Declaration public virtual char SuffixOperator { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source GetLucenePrefixTerm(String) Declaration public virtual Term GetLucenePrefixTerm(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Term | Improve this Doc View Source SuffixToString(StringBuilder) Declaration protected override void SuffixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r Overrides SimpleTerm.SuffixToString(StringBuilder) | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndQuery.html",
    "title": "Class SrndQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SrndQuery Lowest level base class for surround queries Inheritance System.Object SrndQuery ComposedQuery FieldsQuery SimpleTerm 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.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SrndQuery Fields | Improve this Doc View Source TheEmptyLcnQuery An empty Lucene query Declaration public static readonly Query TheEmptyLcnQuery Field Value Type Description Query Properties | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public virtual bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsWeighted Declaration public virtual bool IsWeighted { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Weight Declaration public virtual float Weight { get; set; } Property Value Type Description System.Single | Improve this Doc View Source WeightOperator Declaration public virtual string WeightOperator { get; } Property Value Type Description System.String | Improve this Doc View Source WeightString Declaration public virtual string WeightString { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Clone() Shallow clone. Subclasses must override this if they need to clone any members deeply, Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Equals(Object) For subclasses of SrndQuery within the namespace Lucene.Net.QueryParsers.Surround.Query it is not necessary to override this method, ToString() 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() For subclasses of SrndQuery within the namespace Lucene.Net.QueryParsers.Surround.Query it is not necessary to override this method, ToString() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source MakeLuceneQueryField(String, BasicQueryFactory) Declaration public virtual Query MakeLuceneQueryField(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public abstract Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source ToString() This method is used by GetHashCode() and Equals(Object) , see LUCENE-2945. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source WeightToString(StringBuilder) Declaration protected virtual void WeightToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTermQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTermQuery.html",
    "title": "Class SrndTermQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SrndTermQuery Simple single-term clause Inheritance System.Object SrndQuery SimpleTerm SrndTermQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.SuffixToString(StringBuilder) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndTermQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndTermQuery(String, Boolean) Declaration public SrndTermQuery(string termText, bool quoted) Parameters Type Name Description System.String termText System.Boolean quoted Properties | Improve this Doc View Source TermText Declaration public virtual string TermText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetLuceneTerm(String) Declaration public virtual Term GetLuceneTerm(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Term | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTruncQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTruncQuery.html",
    "title": "Class SrndTruncQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SrndTruncQuery Query that matches wildcards Inheritance System.Object SrndQuery SimpleTerm SrndTruncQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.SuffixToString(StringBuilder) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndTruncQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndTruncQuery(String, Char, Char) Declaration public SrndTruncQuery(string truncated, char unlimited, char mask) Parameters Type Name Description System.String truncated System.Char unlimited System.Char mask Properties | Improve this Doc View Source Truncated Declaration public virtual string Truncated { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AppendRegExpForChar(Char, StringBuilder) Declaration protected virtual void AppendRegExpForChar(char c, StringBuilder re) Parameters Type Name Description System.Char c System.Text.StringBuilder re | Improve this Doc View Source MatchingChar(Char) Declaration protected virtual bool MatchingChar(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source TruncatedToPrefixAndPattern() Declaration protected virtual void TruncatedToPrefixAndPattern() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.TooManyBasicQueries.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.TooManyBasicQueries.html",
    "title": "Class TooManyBasicQueries | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TooManyBasicQueries Exception thrown when BasicQueryFactory would exceed the limit of query clauses. Inheritance System.Object System.Exception System.SystemException System.IO.IOException TooManyBasicQueries Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class TooManyBasicQueries : IOException, ISerializable Constructors | Improve this Doc View Source TooManyBasicQueries(Int32) Declaration public TooManyBasicQueries(int maxBasicQueries) Parameters Type Name Description System.Int32 maxBasicQueries Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanFilterBuilder.html",
    "title": "Class BooleanFilterBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanFilterBuilder Builder for BooleanFilter Inheritance System.Object BooleanFilterBuilder Implements IFilterBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanFilterBuilder : IFilterBuilder Constructors | Improve this Doc View Source BooleanFilterBuilder(IFilterBuilder) Declaration public BooleanFilterBuilder(IFilterBuilder factory) Parameters Type Name Description IFilterBuilder factory Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanQueryBuilder.html",
    "title": "Class BooleanQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanQueryBuilder Builder for BooleanQuery Inheritance System.Object BooleanQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source BooleanQueryBuilder(IQueryBuilder) Declaration public BooleanQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingQueryBuilder.html",
    "title": "Class BoostingQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostingQueryBuilder Builder for BoostingQuery Inheritance System.Object BoostingQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostingQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source BoostingQueryBuilder(IQueryBuilder) Declaration public BoostingQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingTermBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingTermBuilder.html",
    "title": "Class BoostingTermBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostingTermBuilder Builder for PayloadTermQuery Inheritance System.Object SpanBuilderBase BoostingTermBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostingTermBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.CachedFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.CachedFilterBuilder.html",
    "title": "Class CachedFilterBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CachedFilterBuilder Filters are cached in an LRU Cache keyed on the contained query or filter object. Using this will speed up overall performance for repeated uses of the same expensive query/filter. The sorts of queries/filters likely to benefit from caching need not necessarily be complex - e.g. simple TermQuerys with a large DF (document frequency) can be expensive on large indexes. A good example of this might be a term query on a field with only 2 possible values - \"true\" or \"false\". In a large index, querying or filtering on this field requires reading millions of document ids from disk which can more usefully be cached as a filter bitset. For Queries/Filters to be cached and reused the object must implement hashcode and equals methods correctly so that duplicate queries/filters can be detected in the cache. The CoreParser.maxNumCachedFilters property can be used to control the size of the LRU Cache established during the construction of CoreParser instances. Inheritance System.Object CachedFilterBuilder Implements IFilterBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class CachedFilterBuilder : IFilterBuilder Constructors | Improve this Doc View Source CachedFilterBuilder(QueryBuilderFactory, FilterBuilderFactory, Int32) Declaration public CachedFilterBuilder(QueryBuilderFactory queryFactory, FilterBuilderFactory filterFactory, int cacheSize) Parameters Type Name Description QueryBuilderFactory queryFactory FilterBuilderFactory filterFactory System.Int32 cacheSize Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ConstantScoreQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ConstantScoreQueryBuilder.html",
    "title": "Class ConstantScoreQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstantScoreQueryBuilder Builder for ConstantScoreQuery Inheritance System.Object ConstantScoreQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class ConstantScoreQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source ConstantScoreQueryBuilder(FilterBuilderFactory) Declaration public ConstantScoreQueryBuilder(FilterBuilderFactory filterFactory) Parameters Type Name Description FilterBuilderFactory filterFactory Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DisjunctionMaxQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DisjunctionMaxQueryBuilder.html",
    "title": "Class DisjunctionMaxQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DisjunctionMaxQueryBuilder Builder for DisjunctionMaxQuery Inheritance System.Object DisjunctionMaxQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DisjunctionMaxQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source DisjunctionMaxQueryBuilder(IQueryBuilder) Declaration public DisjunctionMaxQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DuplicateFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DuplicateFilterBuilder.html",
    "title": "Class DuplicateFilterBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DuplicateFilterBuilder Builder for DuplicateFilter Inheritance System.Object DuplicateFilterBuilder Implements IFilterBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DuplicateFilterBuilder : IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FilteredQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FilteredQueryBuilder.html",
    "title": "Class FilteredQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteredQueryBuilder Builder for FilteredQuery Inheritance System.Object FilteredQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FilteredQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source FilteredQueryBuilder(IFilterBuilder, IQueryBuilder) Declaration public FilteredQueryBuilder(IFilterBuilder filterFactory, IQueryBuilder queryFactory) Parameters Type Name Description IFilterBuilder filterFactory IQueryBuilder queryFactory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FuzzyLikeThisQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FuzzyLikeThisQueryBuilder.html",
    "title": "Class FuzzyLikeThisQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyLikeThisQueryBuilder Builder for FuzzyLikeThisQuery Inheritance System.Object FuzzyLikeThisQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyLikeThisQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source FuzzyLikeThisQueryBuilder(Analyzer) Declaration public FuzzyLikeThisQueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Xml.Builders | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Xml.Builders <!-- 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. --> XML Parser factories for different Lucene Query/Filters. Classes BooleanFilterBuilder Builder for BooleanFilter BooleanQueryBuilder Builder for BooleanQuery BoostingQueryBuilder Builder for BoostingQuery BoostingTermBuilder Builder for PayloadTermQuery CachedFilterBuilder Filters are cached in an LRU Cache keyed on the contained query or filter object. Using this will speed up overall performance for repeated uses of the same expensive query/filter. The sorts of queries/filters likely to benefit from caching need not necessarily be complex - e.g. simple TermQuerys with a large DF (document frequency) can be expensive on large indexes. A good example of this might be a term query on a field with only 2 possible values - \"true\" or \"false\". In a large index, querying or filtering on this field requires reading millions of document ids from disk which can more usefully be cached as a filter bitset. For Queries/Filters to be cached and reused the object must implement hashcode and equals methods correctly so that duplicate queries/filters can be detected in the cache. The CoreParser.maxNumCachedFilters property can be used to control the size of the LRU Cache established during the construction of CoreParser instances. ConstantScoreQueryBuilder Builder for ConstantScoreQuery DisjunctionMaxQueryBuilder Builder for DisjunctionMaxQuery DuplicateFilterBuilder Builder for DuplicateFilter FilteredQueryBuilder Builder for FilteredQuery FuzzyLikeThisQueryBuilder Builder for FuzzyLikeThisQuery LikeThisQueryBuilder Builder for MoreLikeThisQuery MatchAllDocsQueryBuilder Builder for MatchAllDocsQuery NumericRangeFilterBuilder Creates a NumericRangeFilter . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeFilter : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 If an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type , then the error will be silently ignored and the resulting filter will not match any documents. NumericRangeQueryBuilder Creates a NumericRangeQuery . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeQuery : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 A ParserException will be thrown if an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type . RangeFilterBuilder Builder for TermRangeFilter SpanBuilderBase Base class for building SpanQuery s SpanFirstBuilder Builder for SpanFirstQuery SpanNearBuilder Builder for SpanNearQuery SpanNotBuilder Builder for SpanNotQuery SpanOrBuilder Builder for SpanOrQuery SpanOrTermsBuilder Builder that analyzes the text into a SpanOrQuery SpanQueryBuilderFactory Factory for ISpanQueryBuilder s SpanTermBuilder Builder for SpanTermQuery TermQueryBuilder Builder for TermQuery TermsFilterBuilder Builder for TermsFilter TermsQueryBuilder Builds a BooleanQuery from all of the terms found in the XML element using the choice of analyzer UserInputQueryBuilder UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing: 1) Synchronizing access to \"Parse\" calls on a previously supplied QueryParser or.. 2) creating a new QueryParser object for each parse request Interfaces ISpanQueryBuilder Interface for retrieving a SpanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ISpanQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ISpanQueryBuilder.html",
    "title": "Interface ISpanQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ISpanQueryBuilder Interface for retrieving a SpanQuery Inherited Members IQueryBuilder.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface ISpanQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.LikeThisQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.LikeThisQueryBuilder.html",
    "title": "Class LikeThisQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LikeThisQueryBuilder Builder for MoreLikeThisQuery Inheritance System.Object LikeThisQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class LikeThisQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source LikeThisQueryBuilder(Analyzer, String[]) Declaration public LikeThisQueryBuilder(Analyzer analyzer, string[] defaultFieldNames) Parameters Type Name Description Analyzer analyzer System.String [] defaultFieldNames Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.MatchAllDocsQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.MatchAllDocsQueryBuilder.html",
    "title": "Class MatchAllDocsQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchAllDocsQueryBuilder Builder for MatchAllDocsQuery Inheritance System.Object MatchAllDocsQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeFilterBuilder.html",
    "title": "Class NumericRangeFilterBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeFilterBuilder Creates a NumericRangeFilter . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeFilter : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 If an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type , then the error will be silently ignored and the resulting filter will not match any documents. Inheritance System.Object NumericRangeFilterBuilder Implements IFilterBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeFilterBuilder : IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter | Improve this Doc View Source SetStrictMode(Boolean) Specifies how this NumericRangeFilterBuilder will handle errors. If this is set to true, GetFilter(XmlElement) will throw a ParserException if it is unable to parse the lowerTerm or upperTerm into the appropriate numeric type. If this is set to false, then this exception will be silently ignored and the resulting filter will not match any documents. Defaults to false. Declaration public void SetStrictMode(bool strictMode) Parameters Type Name Description System.Boolean strictMode Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeQueryBuilder.html",
    "title": "Class NumericRangeQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeQueryBuilder Creates a NumericRangeQuery . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeQuery : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 A ParserException will be thrown if an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type . Inheritance System.Object NumericRangeQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.RangeFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.RangeFilterBuilder.html",
    "title": "Class RangeFilterBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RangeFilterBuilder Builder for TermRangeFilter Inheritance System.Object RangeFilterBuilder Implements IFilterBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class RangeFilterBuilder : IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanBuilderBase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanBuilderBase.html",
    "title": "Class SpanBuilderBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanBuilderBase Base class for building SpanQuery s Inheritance System.Object SpanBuilderBase BoostingTermBuilder SpanFirstBuilder SpanNearBuilder SpanNotBuilder SpanOrBuilder SpanOrTermsBuilder SpanTermBuilder Implements ISpanQueryBuilder IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SpanBuilderBase : ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query | Improve this Doc View Source GetSpanQuery(XmlElement) LUCENENET specific - must provide declaration of GetSpanQuery to satisfy contract of ISpanQueryBuilder Declaration public abstract SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanFirstBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanFirstBuilder.html",
    "title": "Class SpanFirstBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanFirstBuilder Builder for SpanFirstQuery Inheritance System.Object SpanBuilderBase SpanFirstBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanFirstBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanFirstBuilder(ISpanQueryBuilder) Declaration public SpanFirstBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNearBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNearBuilder.html",
    "title": "Class SpanNearBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanNearBuilder Builder for SpanNearQuery Inheritance System.Object SpanBuilderBase SpanNearBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNearBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanNearBuilder(ISpanQueryBuilder) Declaration public SpanNearBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNotBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNotBuilder.html",
    "title": "Class SpanNotBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanNotBuilder Builder for SpanNotQuery Inheritance System.Object SpanBuilderBase SpanNotBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNotBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanNotBuilder(ISpanQueryBuilder) Declaration public SpanNotBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrBuilder.html",
    "title": "Class SpanOrBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanOrBuilder Builder for SpanOrQuery Inheritance System.Object SpanBuilderBase SpanOrBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanOrBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanOrBuilder(ISpanQueryBuilder) Declaration public SpanOrBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrTermsBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrTermsBuilder.html",
    "title": "Class SpanOrTermsBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanOrTermsBuilder Builder that analyzes the text into a SpanOrQuery Inheritance System.Object SpanBuilderBase SpanOrTermsBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanOrTermsBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanOrTermsBuilder(Analyzer) Declaration public SpanOrTermsBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanQueryBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanQueryBuilderFactory.html",
    "title": "Class SpanQueryBuilderFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanQueryBuilderFactory Factory for ISpanQueryBuilder s Inheritance System.Object SpanQueryBuilderFactory Implements ISpanQueryBuilder IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanQueryBuilderFactory : ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source AddBuilder(String, ISpanQueryBuilder) Declaration public virtual void AddBuilder(string nodeName, ISpanQueryBuilder builder) Parameters Type Name Description System.String nodeName ISpanQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public virtual SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanTermBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanTermBuilder.html",
    "title": "Class SpanTermBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanTermBuilder Builder for SpanTermQuery Inheritance System.Object SpanBuilderBase SpanTermBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanTermBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermQueryBuilder.html",
    "title": "Class TermQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermQueryBuilder Builder for TermQuery Inheritance System.Object TermQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsFilterBuilder.html",
    "title": "Class TermsFilterBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsFilterBuilder Builder for TermsFilter Inheritance System.Object TermsFilterBuilder Implements IFilterBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermsFilterBuilder : IFilterBuilder Constructors | Improve this Doc View Source TermsFilterBuilder(Analyzer) Declaration public TermsFilterBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetFilter(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.FilterBuilder#process(org.w3c.dom.Element) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsQueryBuilder.html",
    "title": "Class TermsQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsQueryBuilder Builds a BooleanQuery from all of the terms found in the XML element using the choice of analyzer Inheritance System.Object TermsQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermsQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source TermsQueryBuilder(Analyzer) Declaration public TermsQueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.UserInputQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.UserInputQueryBuilder.html",
    "title": "Class UserInputQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UserInputQueryBuilder UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing: 1) Synchronizing access to \"Parse\" calls on a previously supplied QueryParser or.. 2) creating a new QueryParser object for each parse request Inheritance System.Object UserInputQueryBuilder Implements IQueryBuilder 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.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class UserInputQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source UserInputQueryBuilder(QueryParser) This constructor has the disadvantage of not being able to change choice of default field name Declaration public UserInputQueryBuilder(QueryParser parser) Parameters Type Name Description QueryParser parser thread un-safe query parser | Improve this Doc View Source UserInputQueryBuilder(String, Analyzer) Declaration public UserInputQueryBuilder(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField Analyzer analyzer Methods | Improve this Doc View Source CreateQueryParser(String, Analyzer) Method to create a QueryParser - designed to be overridden Declaration protected virtual QueryParser CreateQueryParser(string fieldName, Analyzer analyzer) Parameters Type Name Description System.String fieldName Analyzer analyzer Returns Type Description QueryParser QueryParser | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CoreParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CoreParser.html",
    "title": "Class CoreParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CoreParser Assembles a IQueryBuilder which uses only core Lucene Query objects Inheritance System.Object CoreParser CorePlusExtensionsParser Implements IQueryBuilder 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.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class CoreParser : IQueryBuilder Constructors | Improve this Doc View Source CoreParser(Analyzer, QueryParser) Construct an XML parser that uses a single instance QueryParser for handling UserQuery tags - all parse operations are synchronised on this parser Declaration public CoreParser(Analyzer analyzer, QueryParser parser) Parameters Type Name Description Analyzer analyzer QueryParser parser A QueryParser which will be synchronized on during parse calls. | Improve this Doc View Source CoreParser(String, Analyzer) Constructs an XML parser that creates a QueryParser for each UserQuery request. Declaration public CoreParser(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField The default field name used by QueryParser s constructed for UserQuery tags Analyzer analyzer | Improve this Doc View Source CoreParser(String, Analyzer, QueryParser) Declaration protected CoreParser(string defaultField, Analyzer analyzer, QueryParser parser) Parameters Type Name Description System.String defaultField Analyzer analyzer QueryParser parser Fields | Improve this Doc View Source m_analyzer Declaration protected Analyzer m_analyzer Field Value Type Description Analyzer | Improve this Doc View Source m_filterFactory Declaration protected FilterBuilderFactory m_filterFactory Field Value Type Description FilterBuilderFactory | Improve this Doc View Source m_parser Declaration protected QueryParser m_parser Field Value Type Description QueryParser | Improve this Doc View Source m_queryFactory Declaration protected QueryBuilderFactory m_queryFactory Field Value Type Description QueryBuilderFactory | Improve this Doc View Source maxNumCachedFilters Declaration public static int maxNumCachedFilters Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddFilterBuilder(String, IFilterBuilder) Declaration public virtual void AddFilterBuilder(string nodeName, IFilterBuilder builder) Parameters Type Name Description System.String nodeName IFilterBuilder builder | Improve this Doc View Source AddQueryBuilder(String, IQueryBuilder) Declaration public virtual void AddQueryBuilder(string nodeName, IQueryBuilder builder) Parameters Type Name Description System.String nodeName IQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query | Improve this Doc View Source Parse(Stream) Declaration public virtual Query Parse(Stream xmlStream) Parameters Type Name Description System.IO.Stream xmlStream Returns Type Description Query | Improve this Doc View Source Parse(TextReader) Declaration public virtual Query Parse(TextReader xmlTextReader) Parameters Type Name Description System.IO.TextReader xmlTextReader Returns Type Description Query | Improve this Doc View Source Parse(XmlDocument) Declaration public virtual Query Parse(XmlDocument xmlDocument) Parameters Type Name Description System.Xml.XmlDocument xmlDocument Returns Type Description Query | Improve this Doc View Source Parse(XmlReader) Declaration public virtual Query Parse(XmlReader xmlReader) Parameters Type Name Description System.Xml.XmlReader xmlReader Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CorePlusExtensionsParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CorePlusExtensionsParser.html",
    "title": "Class CorePlusExtensionsParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CorePlusExtensionsParser Assembles a QueryBuilder which uses Query objects from Lucene's sandbox and queries modules in addition to core queries. Inheritance System.Object CoreParser CorePlusExtensionsParser Implements IQueryBuilder Inherited Members CoreParser.m_analyzer CoreParser.m_parser CoreParser.m_queryFactory CoreParser.m_filterFactory CoreParser.maxNumCachedFilters CoreParser.Parse(Stream) CoreParser.Parse(TextReader) CoreParser.Parse(XmlReader) CoreParser.Parse(XmlDocument) CoreParser.AddQueryBuilder(String, IQueryBuilder) CoreParser.AddFilterBuilder(String, IFilterBuilder) CoreParser.GetQuery(XmlElement) 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.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class CorePlusExtensionsParser : CoreParser, IQueryBuilder Constructors | Improve this Doc View Source CorePlusExtensionsParser(Analyzer, QueryParser) Construct an XML parser that uses a single instance QueryParser for handling UserQuery tags - all parse operations are synchronized on this parser Declaration public CorePlusExtensionsParser(Analyzer analyzer, QueryParser parser) Parameters Type Name Description Analyzer analyzer QueryParser parser A QueryParser which will be synchronized on during parse calls. | Improve this Doc View Source CorePlusExtensionsParser(String, Analyzer) Constructs an XML parser that creates a QueryParser for each UserQuery request. Declaration public CorePlusExtensionsParser(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField The default field name used by QueryParser s constructed for UserQuery tags Analyzer analyzer Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.DOMUtils.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.DOMUtils.html",
    "title": "Class DOMUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DOMUtils Helper methods for parsing XML Inheritance System.Object DOMUtils 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.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class DOMUtils Methods | Improve this Doc View Source GetAttribute(XmlElement, String, Boolean) Declaration public static bool GetAttribute(XmlElement element, string attributeName, bool deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.Boolean deflt Returns Type Description System.Boolean | Improve this Doc View Source GetAttribute(XmlElement, String, Int32) Declaration public static int GetAttribute(XmlElement element, string attributeName, int deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.Int32 deflt Returns Type Description System.Int32 | Improve this Doc View Source GetAttribute(XmlElement, String, Single) Declaration public static float GetAttribute(XmlElement element, string attributeName, float deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.Single deflt Returns Type Description System.Single | Improve this Doc View Source GetAttribute(XmlElement, String, String) Declaration public static string GetAttribute(XmlElement element, string attributeName, string deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.String deflt Returns Type Description System.String | Improve this Doc View Source GetAttributeOrFail(XmlElement, String) Declaration public static string GetAttributeOrFail(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.String | Improve this Doc View Source GetAttributeWithInheritance(XmlElement, String) Returns an attribute value from this node, or first parent node with this attribute defined Declaration public static string GetAttributeWithInheritance(XmlElement element, string attributeName) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName Returns Type Description System.String A non-zero-length value if defined, otherwise null | Improve this Doc View Source GetAttributeWithInheritanceOrFail(XmlElement, String) Declaration public static string GetAttributeWithInheritanceOrFail(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.String | Improve this Doc View Source GetChildByTagName(XmlElement, String) Convenience method where there is only one child System.Xml.XmlElement of a given name Declaration public static XmlElement GetChildByTagName(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetChildByTagOrFail(XmlElement, String) Declaration public static XmlElement GetChildByTagOrFail(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetChildTextByTagName(XmlElement, String) Convenience method where there is only one child System.Xml.XmlElement of a given name Declaration public static string GetChildTextByTagName(XmlElement e, string tagName) Parameters Type Name Description System.Xml.XmlElement e System.String tagName Returns Type Description System.String | Improve this Doc View Source GetFirstChildElement(XmlElement) Declaration public static XmlElement GetFirstChildElement(XmlElement element) Parameters Type Name Description System.Xml.XmlElement element Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetFirstChildOrFail(XmlElement) Declaration public static XmlElement GetFirstChildOrFail(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetNonBlankTextOrFail(XmlElement) Declaration public static string GetNonBlankTextOrFail(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description System.String | Improve this Doc View Source GetText(XmlNode) Declaration public static string GetText(XmlNode e) Parameters Type Name Description System.Xml.XmlNode e Returns Type Description System.String | Improve this Doc View Source InsertChild(XmlElement, String, String) Convenience method to append a new child with text Declaration public static XmlElement InsertChild(XmlElement parent, string tagName, string text) Parameters Type Name Description System.Xml.XmlElement parent System.String tagName System.String text Returns Type Description System.Xml.XmlElement | Improve this Doc View Source LoadXML(Stream) Helper method to parse an XML file into a DOM tree, given a System.IO.Stream . Declaration public static XmlDocument LoadXML(Stream input) Parameters Type Name Description System.IO.Stream input reader of the XML file to be parsed Returns Type Description System.Xml.XmlDocument an System.Xml.XmlDocument object | Improve this Doc View Source LoadXML(TextReader) Helper method to parse an XML file into a DOM tree, given a System.IO.TextReader . Declaration public static XmlDocument LoadXML(TextReader input) Parameters Type Name Description System.IO.TextReader input reader of the XML file to be parsed Returns Type Description System.Xml.XmlDocument an System.Xml.XmlDocument object | Improve this Doc View Source LoadXML(XmlReader) Helper method to parse an XML file into a DOM tree, given an System.Xml.XmlReader . Declaration public static XmlDocument LoadXML(XmlReader input) Parameters Type Name Description System.Xml.XmlReader input reader of the XML file to be parsed Returns Type Description System.Xml.XmlDocument an System.Xml.XmlDocument object"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.FilterBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.FilterBuilderFactory.html",
    "title": "Class FilterBuilderFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterBuilderFactory Factory for IFilterBuilder Inheritance System.Object FilterBuilderFactory Implements IFilterBuilder 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.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class FilterBuilderFactory : IFilterBuilder Methods | Improve this Doc View Source AddBuilder(String, IFilterBuilder) Declaration public virtual void AddBuilder(string nodeName, IFilterBuilder builder) Parameters Type Name Description System.String nodeName IFilterBuilder builder | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement n) Parameters Type Name Description System.Xml.XmlElement n Returns Type Description Filter | Improve this Doc View Source GetFilterBuilder(String) Declaration public virtual IFilterBuilder GetFilterBuilder(string nodeName) Parameters Type Name Description System.String nodeName Returns Type Description IFilterBuilder Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.html",
    "title": "Namespace Lucene.Net.QueryParsers.Xml | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Xml <!-- 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. --> Parser that produces Lucene Query objects from XML streams. Classes CoreParser Assembles a IQueryBuilder which uses only core Lucene Query objects CorePlusExtensionsParser Assembles a QueryBuilder which uses Query objects from Lucene's sandbox and queries modules in addition to core queries. DOMUtils Helper methods for parsing XML FilterBuilderFactory Factory for IFilterBuilder ParserException Thrown when the xml queryparser encounters invalid syntax/configuration. QueryBuilderFactory Factory for IQueryBuilder QueryTemplateManager Provides utilities for turning query form input (such as from a web page or Swing gui) into Lucene XML queries by using XSL templates. This approach offers a convenient way of externalizing and changing how user input is turned into Lucene queries. Database applications often adopt similar practices by externalizing SQL in template files that can be easily changed/optimized by a DBA. The static methods can be used on their own or by creating an instance of this class you can store and re-use compiled stylesheets for fast use (e.g. in a server environment) LUCENENET (.NET Core): This is not compiled this because .NET Standard does not currently support XSL Transform. Interfaces IFilterBuilder Interface for building Filter s IQueryBuilder Implemented by objects that produce Lucene Query objects from XML streams. Implementations are expected to be thread-safe so that they can be used to simultaneously parse multiple XML documents."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IFilterBuilder.html",
    "title": "Interface IFilterBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFilterBuilder Interface for building Filter s Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IQueryBuilder.html",
    "title": "Interface IQueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IQueryBuilder Implemented by objects that produce Lucene Query objects from XML streams. Implementations are expected to be thread-safe so that they can be used to simultaneously parse multiple XML documents. Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.ParserException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.ParserException.html",
    "title": "Class ParserException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParserException Thrown when the xml queryparser encounters invalid syntax/configuration. Inheritance System.Object System.Exception ParserException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class ParserException : Exception, ISerializable Constructors | Improve this Doc View Source ParserException() Declaration public ParserException() | Improve this Doc View Source ParserException(Exception) Declaration public ParserException(Exception cause) Parameters Type Name Description System.Exception cause | Improve this Doc View Source ParserException(String) Declaration public ParserException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParserException(String, Exception) Declaration public ParserException(string message, Exception cause) Parameters Type Name Description System.String message System.Exception cause Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryBuilderFactory.html",
    "title": "Class QueryBuilderFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryBuilderFactory Factory for IQueryBuilder Inheritance System.Object QueryBuilderFactory Implements IQueryBuilder 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.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryBuilderFactory : IQueryBuilder Methods | Improve this Doc View Source AddBuilder(String, IQueryBuilder) Declaration public virtual void AddBuilder(string nodeName, IQueryBuilder builder) Parameters Type Name Description System.String nodeName IQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement n) Parameters Type Name Description System.Xml.XmlElement n Returns Type Description Query | Improve this Doc View Source GetQueryBuilder(String) Declaration public virtual IQueryBuilder GetQueryBuilder(string nodeName) Parameters Type Name Description System.String nodeName Returns Type Description IQueryBuilder Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryTemplateManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryTemplateManager.html",
    "title": "Class QueryTemplateManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryTemplateManager Provides utilities for turning query form input (such as from a web page or Swing gui) into Lucene XML queries by using XSL templates. This approach offers a convenient way of externalizing and changing how user input is turned into Lucene queries. Database applications often adopt similar practices by externalizing SQL in template files that can be easily changed/optimized by a DBA. The static methods can be used on their own or by creating an instance of this class you can store and re-use compiled stylesheets for fast use (e.g. in a server environment) LUCENENET (.NET Core): This is not compiled this because .NET Standard does not currently support XSL Transform. Inheritance System.Object QueryTemplateManager 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.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryTemplateManager Constructors | Improve this Doc View Source QueryTemplateManager() Declaration public QueryTemplateManager() | Improve this Doc View Source QueryTemplateManager(Stream) Declaration public QueryTemplateManager(Stream xslIs) Parameters Type Name Description System.IO.Stream xslIs Methods | Improve this Doc View Source AddDefaultQueryTemplate(Stream) Declaration public virtual void AddDefaultQueryTemplate(Stream xslIs) Parameters Type Name Description System.IO.Stream xslIs | Improve this Doc View Source AddQueryTemplate(String, Stream) Declaration public virtual void AddQueryTemplate(string name, Stream xslIs) Parameters Type Name Description System.String name System.IO.Stream xslIs | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>) Declaration public virtual XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties Returns Type Description System.Xml.XmlDocument | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>, Stream) Slow means of constructing query - parses stylesheet from input stream Declaration public static XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties, Stream xslIs) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.IO.Stream xslIs Returns Type Description System.Xml.XmlDocument | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>, String) Declaration public virtual XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties, string queryTemplateName) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.String queryTemplateName Returns Type Description System.Xml.XmlDocument | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>, XslCompiledTransform) Fast means of constructing query using a cached,precompiled stylesheet Declaration public static XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties, XslCompiledTransform template) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.Xml.Xsl.XslCompiledTransform template Returns Type Description System.Xml.XmlDocument | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>) Declaration public virtual string GetQueryAsXmlString(IDictionary<string, string> formProperties) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties Returns Type Description System.String | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>, Stream) Slow means of constructing query parsing a stylesheet from an input stream Declaration public static string GetQueryAsXmlString(IDictionary<string, string> formProperties, Stream xslIs) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.IO.Stream xslIs Returns Type Description System.String | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>, String) Declaration public virtual string GetQueryAsXmlString(IDictionary<string, string> formProperties, string queryTemplateName) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.String queryTemplateName Returns Type Description System.String | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>, XslCompiledTransform) Fast means of constructing query using a precompiled stylesheet Declaration public static string GetQueryAsXmlString(IDictionary<string, string> formProperties, XslCompiledTransform template) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.Xml.Xsl.XslCompiledTransform template Returns Type Description System.String | Improve this Doc View Source GetTemplates(Stream) Parses a query stylesheet for repeated use Declaration public static XslCompiledTransform GetTemplates(Stream xslIs) Parameters Type Name Description System.IO.Stream xslIs Returns Type Description System.Xml.Xsl.XslCompiledTransform | Improve this Doc View Source TransformCriteria(IDictionary<String, String>, Stream, Stream) Slower transformation using an uncompiled stylesheet (suitable for development environment) Declaration public static void TransformCriteria(IDictionary<string, string> formProperties, Stream xslIs, Stream result) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.IO.Stream xslIs System.IO.Stream result | Improve this Doc View Source TransformCriteria(IDictionary<String, String>, XslCompiledTransform, Stream) Fast transformation using a pre-compiled stylesheet (suitable for production environments) Declaration public static void TransformCriteria(IDictionary<string, string> formProperties, XslCompiledTransform transformer, Stream result) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > formProperties System.Xml.Xsl.XslCompiledTransform transformer System.IO.Stream result"
  },
  "api/Lucene.Net.QueryParser/overview.html": {
    "href": "api/Lucene.Net.QueryParser/overview.html",
    "title": "Lucene.Net.QueryParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.QueryParser <!-- 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. --> Apache Lucene QueryParsers. This module provides a number of queryparsers: Classic Analyzing Complex Phrase Extendable Flexible Surround XML Classic A Simple Lucene QueryParser implemented with JavaCC. Analyzing QueryParser that passes Fuzzy-, Prefix-, Range-, and WildcardQuerys through the given analyzer. Complex Phrase QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\" Extendable Extendable QueryParser provides a simple and flexible extension mechanism by overloading query field names. Flexible This project contains the new Lucene query parser implementation, which matches the syntax of the core QueryParser but offers a more modular architecture to enable customization. It's currently divided in 2 main packages: * Lucene.Net.QueryParsers.Flexible.Core : it contains the query parser API classes, which should be extended by query parser implementations. * Lucene.Net.QueryParsers.Flexible.Standard : it contains the current Lucene query parser implementation using the new query parser API. Features Full support for boolean logic (not enabled) QueryNode Trees - support for several syntaxes, that can be converted into similar syntax QueryNode trees. QueryNode Processors - Optimize, validate, rewrite the QueryNode trees Processors Pipelines - Select your favorite Processor and build a processor pipeline, to implement the features you need Config Interfaces - Allow the consumer of the Query Parser to implement a diff Config Handler Objects to suite their needs. Standard Builders - convert QueryNode's into several lucene representations. Supported conversion is using a 2.4 compatible logic QueryNode tree's can be converted to a lucene 2.4 syntax string, using toQueryString Design This new query parser was designed to have very generic architecture, so that it can be easily used for different products with varying query syntaxes. This code is much more flexible and extensible than the Lucene query parser in 2.4.X. The new query parser goal is to separate syntax and semantics of a query. E.g. 'a AND b', '+a +b', 'AND(a,b)' could be different syntaxes for the same query. It distinguishes the semantics of the different query components, e.g. whether and how to tokenize/lemmatize/normalize the different terms or which Query objects to create for the terms. It allows to write a parser with a new syntax, while reusing the underlying semantics, as quickly as possible. The query parser has three layers and its core is what we call the QueryNode tree. It is a tree that initially represents the syntax of the original query, e.g. for 'a AND b': AND / \\ A B The three layers are: QueryParser This layer is the text parsing layer which simply transforms the query text string into a QueryNode tree. Every text parser must implement the interface <xref:Lucene.Net.QueryParsers.Flexible.Core.Parser.SyntaxParser>. Lucene default implementations implements it using JavaCC. QueryNodeProcessor The query node processors do most of the work. It is in fact a configurable chain of processors. Each processors can walk the tree and modify nodes or even the tree's structure. That makes it possible to e.g. do query optimization before the query is executed or to tokenize terms. QueryBuilder The third layer is a configurable map of builders, which map QueryNode types to its specific builder that will transform the QueryNode into Lucene Query object. Furthermore, the query parser uses flexible configuration objects. It also uses message classes that allow to attach resource bundles. This makes it possible to translate messages, which is an important feature of a query parser. This design allows to develop different query syntaxes very quickly. StandardQueryParser and QueryParserWrapper The classic Lucene query parser is located under Lucene.Net.QueryParsers.Classic . To make it simpler to use the new query parser the class StandardQueryParser may be helpful, specially for people that do not want to extend the Query Parser. It uses the default Lucene query processors, text parser and builders, so you don't need to worry about dealing with those. StandardQueryParser usage: StandardQueryParser qpHelper = new StandardQueryParser(); StandardQueryConfigHandler config = qpHelper.getQueryConfigHandler(); config.setAllowLeadingWildcard(true); config.setAnalyzer(new WhitespaceAnalyzer()); Query query = qpHelper.parse(\"apache AND lucene\", \"defaultField\"); Surround A QueryParser that supports the Span family of queries as well as pre and infix notation. XML A QueryParser that produces Lucene Query objects from XML streams."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.html",
    "title": "Namespace Lucene.Net.Replicator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator <!-- 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. --> Files replication framework The Replicator allows replicating files between a server and client(s). Producers publish revisions and consumers update to the latest revision available. ReplicationClient is a helper utility for performing the update operation. It can be invoked either manually or periodically by [starting an update thread](ReplicationClient.html#startUpdateThread(long, java.lang.String)). HttpReplicator can be used to replicate revisions by consumers that reside on a different node than the producer. The replication framework supports replicating any type of files, with built-in support for a single search index as well as an index and taxonomy pair. For a single index, the application should publish an IndexRevision and set IndexReplicationHandler on the client. For an index and taxonomy pair, the application should publish an IndexAndTaxonomyRevision and set IndexAndTaxonomyReplicationHandler on the client. When the replication client detects that there is a newer revision available, it copies the files of the revision and then invokes the handler to complete the operation (e.g. copy the files to the index directory, fsync them, reopen an index reader etc.). By default, only files that do not exist in the handler's current revision files are copied, however this can be overridden by extending the client. An example usage of the Replicator: // ++++++++++++++ SERVER SIDE ++++++++++++++ // IndexWriter publishWriter; // the writer used for indexing Replicator replicator = new LocalReplicator(); replicator.publish(new IndexRevision(publishWriter)); // ++++++++++++++ CLIENT SIDE ++++++++++++++ // // either LocalReplictor, or HttpReplicator if client and server are on different nodes Replicator replicator; // callback invoked after handler finished handling the revision and e.g. can reopen the reader. Callable callback = null; // can also be null if no callback is needed ReplicationHandler handler = new IndexReplicationHandler(indexDir, callback); SourceDirectoryFactory factory = new PerSessionDirectoryFactory(workDir); ReplicationClient client = new ReplicationClient(replicator, handler, factory); // invoke client manually client.updateNow(); // or, periodically client.startUpdateThread(100); // check for update every 100 milliseconds Classes IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A DirectoryTaxonomyWriter which sets the underlying IndexWriter 's IndexDeletionPolicy to SnapshotDeletionPolicy . IndexInputStream A System.IO.Stream which wraps an IndexInput . IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Directory and then touches the index with IndexWriter to make sure any unused files are deleted. IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current IndexCommit . To ensure the files are not deleted by IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified. RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Interfaces IReplicationHandler Handler for revisions obtained by the client. IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. ISourceDirectoryFactory Resolves a session and source into a Directory to use for copying the session files to."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.html",
    "title": "Namespace Lucene.Net.Replicator.Http.Abstractions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http.Abstractions Interfaces IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. IReplicationService Contract for a replication service."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html",
    "title": "Interface IReplicationRequest | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationRequest Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Path Provides the requested path which mapps to a replication operation. Declaration string Path { get; } Property Value Type Description System.String Methods | Improve this Doc View Source QueryParam(String) Returns the requested query parameter or null if not present. Declaration string QueryParam(string name) Parameters Type Name Description System.String name the name of the requested parameter Returns Type Description System.String the value of the requested parameter or null if not present Remarks May though execeptions if the same parameter is provided multiple times, consult the documentation for the specific implementation."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html",
    "title": "Interface IReplicationResponse | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationResponse Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Body The response content. Declaration Stream Body { get; } Property Value Type Description System.IO.Stream | Improve this Doc View Source StatusCode Gets or sets the http status code of the response. Declaration int StatusCode { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Flush() Flushes the reponse to the underlying response stream. Declaration void Flush()"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html",
    "title": "Interface IReplicationService | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IReplicationService Contract for a replication service. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationService Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response Exceptions Type Condition System.InvalidOperationException required parameters are missing"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.html",
    "title": "Namespace Lucene.Net.Replicator.Http | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http <!-- 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. --> HTTP replication implementation Classes HttpClientBase Base class for Http clients. HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Enums ReplicationService.ReplicationAction Actions supported by the ReplicationService ."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpClientBase.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpClientBase.html",
    "title": "Class HttpClientBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HttpClientBase Base class for Http clients. Inheritance System.Object HttpClientBase HttpReplicator 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.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public abstract class HttpClientBase : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpClientBase(String, Int32, String, HttpMessageHandler) Creates a new HttpClientBase with the given host, port and path. Declaration protected HttpClientBase(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host The host that the client should retrieve data from. System.Int32 port The port to be used to connect on. System.String path The path to the replicator on the host. System.Net.Http.HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests, defaults to null . Remarks The host, port and path parameters are normalized to http://{host}:{port}{path} , if path is null or empty it defaults to / . A System.Net.Http.HttpMessageHandler is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal System.Net.Http.HttpClient will default to use a System.Net.Http.HttpClientHandler . | Improve this Doc View Source HttpClientBase(String, HttpClient) Creates a new HttpClientBase with the given url and System.Net.Http.HttpClient . Declaration protected HttpClientBase(string url, HttpClient client) Parameters Type Name Description System.String url System.Net.Http.HttpClient client The System.Net.Http.HttpClient to use make remote http calls. Remarks This allows full controll over how the System.Net.Http.HttpClient is created, prefer the HttpClientBase(String, HttpMessageHandler) over this unless you know you need the control of the System.Net.Http.HttpClient . | Improve this Doc View Source HttpClientBase(String, HttpMessageHandler) Creates a new HttpClientBase with the given url . Declaration protected HttpClientBase(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url The full url, including with host, port and path. System.Net.Http.HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests. Remarks A System.Net.Http.HttpMessageHandler is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal System.Net.Http.HttpClient will default to use a System.Net.Http.HttpClientHandler . Fields | Improve this Doc View Source DEFAULT_CONNECTION_TIMEOUT Default connection timeout for this client, in milliseconds. ConnectionTimeout Declaration public const int DEFAULT_CONNECTION_TIMEOUT = 1000 Field Value Type Description System.Int32 Properties | Improve this Doc View Source ConnectionTimeout Gets or Sets the connection timeout for this client, in milliseconds. This setting is used to modify System.Net.Http.HttpClient.Timeout . Declaration public virtual int ConnectionTimeout { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source IsDisposed Returns true if this instance was Dispose(Boolean) ed, otherwise returns false . Note that if you override Dispose(Boolean) , you must call Dispose(Boolean) on the base class, in order for this instance to be properly disposed. Declaration public bool IsDisposed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Url The URL to execute requests against. Declaration protected string Url { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Dispose() Disposes this HttpClientBase . This disposes the underlying System.Net.Http.HttpClient . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this HttpClientBase . When called with true , this disposes the underlying System.Net.Http.HttpClient . Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Boolean, Func<T>) Do a specific action and validate after the action that the status is still OK, and if not, attempt to extract the actual server side exception. Optionally release the response at exit, depending on consume parameter. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, bool consume, Func<T> call) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Boolean consume System.Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Func<T>) Calls the overload DoAction<T>(HttpResponseMessage, Boolean, Func<T>) passing true to consume. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, Func<T> call) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if this client is already disposed. Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException client is already disposed. | Improve this Doc View Source ExecuteGet(String, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecuteGet(string request, params string[] parameters) Parameters Type Name Description System.String request System.String [] parameters Returns Type Description System.Net.Http.HttpResponseMessage | Improve this Doc View Source ExecutePost(String, Object, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecutePost(string request, object entity, params string[] parameters) Parameters Type Name Description System.String request System.Object entity System.String [] parameters Returns Type Description System.Net.Http.HttpResponseMessage | Improve this Doc View Source ResponseInputStream(HttpResponseMessage) Internal utility: input stream of the provided response. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ResponseInputStream(HttpResponseMessage, Boolean) Internal utility: input stream of the provided response, which optionally consumes the response's resources when the input stream is exhausted. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response, bool consume) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Boolean consume Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ThrowKnownError(HttpResponseMessage) Throws an exception for any errors. Declaration protected virtual void ThrowKnownError(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Exceptions Type Condition System.IO.IOException IO Error happened at the server, check inner exception for details. System.Net.Http.HttpRequestException Unknown error received from the server. | Improve this Doc View Source VerifyStatus(HttpResponseMessage) Internal: Verifies the response status and if not successful throws an exception. Declaration protected virtual void VerifyStatus(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Exceptions Type Condition System.IO.IOException IO Error happened at the server, check inner exception for details. System.Net.Http.HttpRequestException Unknown error received from the server. Implements System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpReplicator.html",
    "title": "Class HttpReplicator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . Inheritance System.Object HttpClientBase HttpReplicator Implements IReplicator System.IDisposable Inherited Members HttpClientBase.DEFAULT_CONNECTION_TIMEOUT HttpClientBase.Url HttpClientBase.ConnectionTimeout HttpClientBase.EnsureOpen() HttpClientBase.VerifyStatus(HttpResponseMessage) HttpClientBase.ThrowKnownError(HttpResponseMessage) HttpClientBase.ExecutePost(String, Object, String[]) HttpClientBase.ExecuteGet(String, String[]) HttpClientBase.ResponseInputStream(HttpResponseMessage) HttpClientBase.ResponseInputStream(HttpResponseMessage, Boolean) HttpClientBase.IsDisposed HttpClientBase.DoAction<T>(HttpResponseMessage, Func<T>) HttpClientBase.DoAction<T>(HttpResponseMessage, Boolean, Func<T>) HttpClientBase.Dispose(Boolean) HttpClientBase.Dispose() 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.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class HttpReplicator : HttpClientBase, IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpReplicator(String, Int32, String, HttpMessageHandler) Creates a new HttpReplicator with the given host, port and path. HttpClientBase(String, Int32, String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host System.Int32 port System.String path System.Net.Http.HttpMessageHandler messageHandler | Improve this Doc View Source HttpReplicator(String, HttpClient) Creates a new HttpReplicator with the given url and System.Net.Http.HttpClient . HttpClientBase(String, HttpClient) for more details. Declaration public HttpReplicator(string url, HttpClient client) Parameters Type Name Description System.String url System.Net.Http.HttpClient client | Improve this Doc View Source HttpReplicator(String, HttpMessageHandler) Creates a new HttpReplicator with the given url. HttpClientBase(String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url System.Net.Http.HttpMessageHandler messageHandler Methods | Improve this Doc View Source CheckForUpdate(String) Checks for updates at the remote host. Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | Improve this Doc View Source ObtainFile(String, String, String) Obtains the given file from it's source at the remote host. Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Publish(IRevision) Not supported. Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision Exceptions Type Condition System.NotSupportedException this replicator implementation does not support remote publishing of revisions | Improve this Doc View Source Release(String) Releases a session obtained from the remote host. Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Implements IReplicator System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.html",
    "title": "Class ReplicationService | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Inheritance System.Object ReplicationService Implements IReplicationService 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.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationService : IReplicationService Remarks This service is written using abstractions over requests and responses which makes it easy to integrate into any hosting framework. See the Lucene.Net.Replicator.AspNetCore for an example of an implementation for the AspNetCore Framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationService(IReadOnlyDictionary<String, IReplicator>, String) Declaration public ReplicationService(IReadOnlyDictionary<string, IReplicator> replicators, string context = \"/replicate\") Parameters Type Name Description System.Collections.Generic.IReadOnlyDictionary < System.String , IReplicator > replicators System.String context Fields | Improve this Doc View Source JSON_SERIALIZER_SETTINGS Json Serializer Settings to use when serializing and deserializing errors. Declaration public static readonly JsonSerializerSettings JSON_SERIALIZER_SETTINGS Field Value Type Description Newtonsoft.Json.JsonSerializerSettings | Improve this Doc View Source REPLICATE_FILENAME_PARAM Request parameter name for providing the file's name. Declaration public const string REPLICATE_FILENAME_PARAM = \"filename\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SESSION_ID_PARAM Request parameter name for providing a session ID. Declaration public const string REPLICATE_SESSION_ID_PARAM = \"sessionid\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SOURCE_PARAM Request parameter name for providing the file's source. Declaration public const string REPLICATE_SOURCE_PARAM = \"source\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_VERSION_PARAM Request parameter name for providing the revision version. Declaration public const string REPLICATE_VERSION_PARAM = \"version\" Field Value Type Description System.String | Improve this Doc View Source REPLICATION_CONTEXT The default context path for the ReplicationService . Declaration public const string REPLICATION_CONTEXT = \"/replicate\" Field Value Type Description System.String Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration public virtual void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response Exceptions Type Condition System.InvalidOperationException required parameters are missing Implements IReplicationService"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html",
    "title": "Enum ReplicationService.ReplicationAction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum ReplicationService.ReplicationAction Actions supported by the ReplicationService . Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public enum ReplicationAction Fields Name Description OBTAIN RELEASE UPDATE"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html",
    "title": "Class IndexAndTaxonomyReplicationHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. Inheritance System.Object IndexAndTaxonomyReplicationHandler Implements IReplicationHandler 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyReplicationHandler : IReplicationHandler Remarks NOTE: If you intend to recreate a taxonomy index, you should make sure to reopen an IndexSearcher and TaxonomyReader pair via the provided callback, to guarantee that both indexes are in sync. This handler does not prevent replicating such index and taxonomy pairs, and if they are reopened by a different thread, unexpected errors can occur, as well as inconsistency between the taxonomy and index readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyReplicationHandler(Directory, Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexAndTaxonomyReplicationHandler(Directory indexDirectory, Directory taxonomyDirectory, Func<bool?> callback) Parameters Type Name Description Directory indexDirectory Directory taxonomyDirectory System.Func < System.Nullable < System.Boolean >> callback Exceptions Type Condition System.IO.IOException Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default InfoStream . Declaration public const string INFO_STREAM_COMPONENT = \"IndexAndTaxonomyReplicationHandler\" Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles System.Collections.Generic.IDictionary < System.String , Directory > sourceDirectory Implements IReplicationHandler See Also IndexReplicationHandler"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.html",
    "title": "Class IndexAndTaxonomyRevision | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. Inheritance System.Object IndexAndTaxonomyRevision Implements IRevision System.IComparable < IRevision > 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyRevision : IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyRevision(IndexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter) Constructor over the given IndexWriter . Uses the last IndexCommit found in the Directory managed by the given writer. Declaration public IndexAndTaxonomyRevision(IndexWriter indexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter) Parameters Type Name Description IndexWriter indexWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter Exceptions Type Condition System.IO.IOException Fields | Improve this Doc View Source INDEX_SOURCE Declaration public const string INDEX_SOURCE = \"index\" Field Value Type Description System.String | Improve this Doc View Source TAXONOMY_SOURCE Declaration public const string TAXONOMY_SOURCE = \"taxonomy\" Field Value Type Description System.String Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Compares this IndexAndTaxonomyRevision to the given Lucene.Net.Replicator.IndexAndTaxonomyRevision.version . Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release() Declaration public virtual void Release() Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RevisionFiles(IndexCommit, IndexCommit) Returns a map of the revision files from the given IndexCommit s of the search and taxonomy indexes. Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description IndexCommit indexCommit IndexCommit taxonomyCommit Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RevisionVersion(IndexCommit, IndexCommit) Returns a System.String representation of a revision's version from the given IndexCommit s of the search and taxonomy indexes. Declaration public static string RevisionVersion(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description IndexCommit indexCommit IndexCommit taxonomyCommit Returns Type Description System.String a System.String representation of a revision's version from the given IndexCommit s of the search and taxonomy indexes. Implements IRevision System.IComparable<T> See Also IndexRevision"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html",
    "title": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A DirectoryTaxonomyWriter which sets the underlying IndexWriter 's IndexDeletionPolicy to SnapshotDeletionPolicy . Inheritance System.Object DirectoryTaxonomyWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter Implements ITaxonomyWriter System.IDisposable ITwoPhaseCommit Inherited Members DirectoryTaxonomyWriter.INDEX_EPOCH DirectoryTaxonomyWriter.Unlock(Directory) DirectoryTaxonomyWriter.DefaultTaxonomyWriterCache() DirectoryTaxonomyWriter.Dispose() DirectoryTaxonomyWriter.CloseResources() DirectoryTaxonomyWriter.FindCategory(FacetLabel) DirectoryTaxonomyWriter.AddCategory(FacetLabel) DirectoryTaxonomyWriter.EnsureOpen() DirectoryTaxonomyWriter.Commit() DirectoryTaxonomyWriter.SetCommitData(IDictionary<String, String>) DirectoryTaxonomyWriter.CommitData DirectoryTaxonomyWriter.PrepareCommit() DirectoryTaxonomyWriter.Count DirectoryTaxonomyWriter.SetCacheMissesUntilFill(Int32) DirectoryTaxonomyWriter.GetParent(Int32) DirectoryTaxonomyWriter.AddTaxonomy(Directory, DirectoryTaxonomyWriter.IOrdinalMap) DirectoryTaxonomyWriter.Rollback() DirectoryTaxonomyWriter.ReplaceTaxonomy(Directory) DirectoryTaxonomyWriter.Directory DirectoryTaxonomyWriter.TaxonomyEpoch 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SnapshotDirectoryTaxonomyWriter : DirectoryTaxonomyWriter, ITaxonomyWriter, IDisposable, ITwoPhaseCommit Constructors | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode) DirectoryTaxonomyWriter(Directory, OpenMode) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode = OpenMode.CREATE_OR_APPEND) Parameters Type Name Description Directory directory OpenMode openMode Exceptions Type Condition System.IO.IOException | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) DirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode, ITaxonomyWriterCache cache) Parameters Type Name Description Directory directory OpenMode openMode ITaxonomyWriterCache cache Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source DeletionPolicy Gets the SnapshotDeletionPolicy used by the underlying IndexWriter . Declaration public virtual SnapshotDeletionPolicy DeletionPolicy { get; } Property Value Type Description SnapshotDeletionPolicy | Improve this Doc View Source IndexWriter Gets the IndexWriter used by this DirectoryTaxonomyWriter . Declaration public virtual IndexWriter IndexWriter { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source CreateIndexWriterConfig(OpenMode) Declaration protected override IndexWriterConfig CreateIndexWriterConfig(OpenMode openMode) Parameters Type Name Description OpenMode openMode Returns Type Description IndexWriterConfig Overrides DirectoryTaxonomyWriter.CreateIndexWriterConfig(OpenMode) | Improve this Doc View Source OpenIndexWriter(Directory, IndexWriterConfig) Declaration protected override IndexWriter OpenIndexWriter(Directory directory, IndexWriterConfig config) Parameters Type Name Description Directory directory IndexWriterConfig config Returns Type Description IndexWriter Overrides DirectoryTaxonomyWriter.OpenIndexWriter(Directory, IndexWriterConfig) Implements ITaxonomyWriter System.IDisposable ITwoPhaseCommit"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexInputStream.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexInputStream.html",
    "title": "Class IndexInputStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexInputStream A System.IO.Stream which wraps an IndexInput . Inheritance System.Object System.MarshalByRefObject System.IO.Stream IndexInputStream Implements System.IDisposable Inherited Members System.IO.Stream.Null System.IO.Stream.BeginRead(System.Byte[], System.Int32, System.Int32, System.AsyncCallback, System.Object) System.IO.Stream.BeginWrite(System.Byte[], System.Int32, System.Int32, System.AsyncCallback, System.Object) System.IO.Stream.Close() System.IO.Stream.CopyTo(System.IO.Stream) System.IO.Stream.CopyTo(System.IO.Stream, System.Int32) System.IO.Stream.CopyToAsync(System.IO.Stream) System.IO.Stream.CopyToAsync(System.IO.Stream, System.Int32) System.IO.Stream.CopyToAsync(System.IO.Stream, System.Int32, System.Threading.CancellationToken) System.IO.Stream.CreateWaitHandle() System.IO.Stream.Dispose() System.IO.Stream.EndRead(System.IAsyncResult) System.IO.Stream.EndWrite(System.IAsyncResult) System.IO.Stream.FlushAsync() System.IO.Stream.FlushAsync(System.Threading.CancellationToken) System.IO.Stream.ObjectInvariant() System.IO.Stream.ReadAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.ReadAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.Stream.ReadByte() System.IO.Stream.Synchronized(System.IO.Stream) System.IO.Stream.WriteAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.WriteAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.Stream.WriteByte(System.Byte) System.IO.Stream.CanTimeout System.IO.Stream.ReadTimeout System.IO.Stream.WriteTimeout System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexInputStream : Stream, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexInputStream(IndexInput) Declaration public IndexInputStream(IndexInput input) Parameters Type Name Description IndexInput input Properties | Improve this Doc View Source CanRead Declaration public override bool CanRead { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanRead | Improve this Doc View Source CanSeek Declaration public override bool CanSeek { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanSeek | Improve this Doc View Source CanWrite Declaration public override bool CanWrite { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanWrite | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides System.IO.Stream.Length | Improve this Doc View Source Position Declaration public override long Position { get; set; } Property Value Type Description System.Int64 Overrides System.IO.Stream.Position Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.Stream.Dispose(System.Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides System.IO.Stream.Flush() | Improve this Doc View Source Read(Byte[], Int32, Int32) Declaration public override int Read(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count Returns Type Description System.Int32 Overrides System.IO.Stream.Read(System.Byte[], System.Int32, System.Int32) | Improve this Doc View Source Seek(Int64, SeekOrigin) Declaration public override long Seek(long offset, SeekOrigin origin) Parameters Type Name Description System.Int64 offset System.IO.SeekOrigin origin Returns Type Description System.Int64 Overrides System.IO.Stream.Seek(System.Int64, System.IO.SeekOrigin) | Improve this Doc View Source SetLength(Int64) Declaration public override void SetLength(long value) Parameters Type Name Description System.Int64 value Overrides System.IO.Stream.SetLength(System.Int64) | Improve this Doc View Source Write(Byte[], Int32, Int32) Declaration public override void Write(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count Overrides System.IO.Stream.Write(System.Byte[], System.Int32, System.Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexReplicationHandler.html",
    "title": "Class IndexReplicationHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Directory and then touches the index with IndexWriter to make sure any unused files are deleted. Inheritance System.Object IndexReplicationHandler Implements IReplicationHandler 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexReplicationHandler : IReplicationHandler Remarks NOTE: This handler assumes that IndexWriter is not opened by another process on the index directory. In fact, opening an IndexWriter on the same directory to which files are copied can lead to undefined behavior, where some or all the files will be deleted, override other files or simply create a mess. When you replicate an index, it is best if the index is never modified by IndexWriter , except the one that is open on the source index, from which you replicate. This handler notifies the application via a provided when an updated index commit was made available for it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexReplicationHandler(Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexReplicationHandler(Directory indexDirectory, Func<bool?> callback) Parameters Type Name Description Directory indexDirectory System.Func < System.Nullable < System.Boolean >> callback Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default InfoStream . Declaration public const string INFO_STREAM_COMPONENT = \"IndexReplicationHandler\" Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source CleanupFilesOnFailure(Directory, IList<String>) Cleanup the index directory by deleting all given files. Called when file copy or sync failed. Declaration public static void CleanupFilesOnFailure(Directory directory, IList<string> files) Parameters Type Name Description Directory directory System.Collections.Generic.IList < System.String > files | Improve this Doc View Source CleanupOldIndexFiles(Directory, String) Cleans up the index directory from old index files. This method uses the last commit found by GetLastCommit(Directory) . If it matches the expected segmentsFile , then all files not referenced by this commit point are deleted. Declaration public static void CleanupOldIndexFiles(Directory directory, string segmentsFile) Parameters Type Name Description Directory directory System.String segmentsFile Remarks NOTE: This method does a best effort attempt to clean the index directory. It suppresses any exceptions that occur, as this can be retried the next time. | Improve this Doc View Source CopyFiles(Directory, Directory, IList<String>) Copies the provided list of files from the source Directory to the target Directory , if they are not the same. Declaration public static void CopyFiles(Directory source, Directory target, IList<string> files) Parameters Type Name Description Directory source Directory target System.Collections.Generic.IList < System.String > files Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetLastCommit(Directory) Returns the last IndexCommit found in the Directory , or null if there are no commits. Declaration public static IndexCommit GetLastCommit(Directory directory) Parameters Type Name Description Directory directory Returns Type Description IndexCommit Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetSegmentsFile(IList<String>, Boolean) Verifies that the last file is segments_N and fails otherwise. It also removes and returns the file from the list, because it needs to be handled last, after all files. This is important in order to guarantee that if a reader sees the new segments_N, all other segment files are already on stable storage. The reason why the code fails instead of putting segments_N file last is that this indicates an error in the IRevision implementation. Declaration public static string GetSegmentsFile(IList<string> files, bool allowEmpty) Parameters Type Name Description System.Collections.Generic.IList < System.String > files System.Boolean allowEmpty Returns Type Description System.String | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles System.Collections.Generic.IDictionary < System.String , Directory > sourceDirectory | Improve this Doc View Source WriteSegmentsGen(String, Directory) Writes SEGMENTS_GEN file to the directory, reading the generation from the given segmentsFile . If it is null , this method deletes segments.gen from the directory. Declaration public static void WriteSegmentsGen(string segmentsFile, Directory directory) Parameters Type Name Description System.String segmentsFile Directory directory Implements IReplicationHandler"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexRevision.html",
    "title": "Class IndexRevision | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current IndexCommit . To ensure the files are not deleted by IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). Inheritance System.Object IndexRevision Implements IRevision System.IComparable < IRevision > 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) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexRevision : IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexRevision(IndexWriter) Constructor over the given IndexWriter . Uses the last IndexCommit found in the Directory managed by the given writer. Declaration public IndexRevision(IndexWriter writer) Parameters Type Name Description IndexWriter writer Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Release() Declaration public virtual void Release() | Improve this Doc View Source RevisionFiles(IndexCommit) Returns a singleton map of the revision files from the given IndexCommit . Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source RevisionVersion(IndexCommit) Returns a string representation of a revision's version from the given IndexCommit Declaration public static string RevisionVersion(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IRevision System.IComparable<T>"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicationHandler.html",
    "title": "Interface IReplicationHandler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IReplicationHandler Handler for revisions obtained by the client. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationHandler Properties | Improve this Doc View Source CurrentRevisionFiles Returns the current revision version held by the handler. Declaration IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Returns the current revision files held by the handler. Declaration string CurrentVersion { get; } Property Value Type Description System.String Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Called when a new revision was obtained and is available (i.e. all needed files were successfully copied). Declaration void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version The version of the IRevision that was copied System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles The files contained by this IRevision System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles The files that were actually copied System.Collections.Generic.IDictionary < System.String , Directory > sourceDirectory A mapping from a source of files to the Directory they were copied into Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicator.html",
    "title": "Interface IReplicator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . Inherited Members System.IDisposable.Dispose() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicator : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Methods | Improve this Doc View Source CheckForUpdate(String) Check whether the given version is up-to-date and returns a SessionToken which can be used for fetching the revision files, otherwise returns null . Declaration SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken Remarks NOTE: When the returned session token is no longer needed, you should call Release(String) so that the session resources can be reclaimed, including the revision files. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ObtainFile(String, String, String) Returns an System.IO.Stream for the requested file and source in the context of the given Id . Declaration Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream Remarks NOTE: It is the caller's responsibility to call System.IDisposable.Dispose() on the returned stream. Exceptions Type Condition SessionExpiredException The specified session has already expired | Improve this Doc View Source Publish(IRevision) Publish a new IRevision for consumption by clients. It is the caller's responsibility to verify that the revision files exist and can be read by clients. When the revision is no longer needed, it will be Release(String) d by the replicator. Declaration void Publish(IRevision revision) Parameters Type Name Description IRevision revision The IRevision to publish. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release(String) Notify that the specified SessionToken is no longer needed by the caller. Declaration void Release(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IRevision.html",
    "title": "Interface IRevision | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. Inherited Members System.IComparable<Lucene.Net.Replicator.IRevision>.CompareTo(Lucene.Net.Replicator.IRevision) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IRevision : IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Properties | Improve this Doc View Source SourceFiles Returns the files that comprise this revision, as a mapping from a source to a list of files. Declaration IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Returns a string representation of the version of this revision. The version is used by CompareTo(String) as well as to serialize/deserialize revision information. Therefore it must be self descriptive as well as be able to identify one revision from another. Declaration string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(String) Compares the revision to the given version string. Behaves like System.IComparable<T>.CompareTo(T) Declaration int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Returns a System.IO.Stream for the given fileName and source . It is the caller's respnsibility to dispose the System.IO.Stream when it has been consumed. Declaration Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release() Called when this revision can be safely released, i.e. where there are no more references to it. Declaration void Release() Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ISourceDirectoryFactory.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ISourceDirectoryFactory.html",
    "title": "Interface ISourceDirectoryFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ISourceDirectoryFactory Resolves a session and source into a Directory to use for copying the session files to. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface ISourceDirectoryFactory Methods | Improve this Doc View Source CleanupSession(String) Called to denote that the replication actions for this session were finished and the directory is no longer needed. Declaration void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetDirectory(String, String) Returns the Directory to use for the given session and source. Implementations may e.g. return different directories for different sessions, or the same directory for all sessions. In that case, it is advised to clean the directory before it is used for a new session. Declaration Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Directory Exceptions Type Condition System.IO.IOException See Also CleanupSession(String)"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.LocalReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.LocalReplicator.html",
    "title": "Class LocalReplicator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . Inheritance System.Object LocalReplicator Implements IReplicator 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class LocalReplicator : IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields | Improve this Doc View Source DEFAULT_SESSION_EXPIRATION_THRESHOLD Threshold for expiring inactive sessions. Defaults to 30 minutes. Declaration public const long DEFAULT_SESSION_EXPIRATION_THRESHOLD = 1800000L Field Value Type Description System.Int64 Properties | Improve this Doc View Source ExpirationThreshold Gets or sets the expiration threshold in milliseconds. If a replication session is inactive this long it is automatically expired, and further attempts to operate within this session will throw a SessionExpiredException . Declaration public virtual long ExpirationThreshold { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CheckForUpdate(String) Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | 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 EnsureOpen() Ensure that replicator is still open, or throw System.ObjectDisposedException otherwise. Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException This replicator has already been disposed. | Improve this Doc View Source ObtainFile(String, String, String) Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Publish(IRevision) Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision | Improve this Doc View Source Release(String) Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.InvalidOperationException Implements IReplicator System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.PerSessionDirectoryFactory.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.PerSessionDirectoryFactory.html",
    "title": "Class PerSessionDirectoryFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. Inheritance System.Object PerSessionDirectoryFactory Implements ISourceDirectoryFactory 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class PerSessionDirectoryFactory : ISourceDirectoryFactory Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source PerSessionDirectoryFactory(String) Constructor with the given sources mapping. Declaration public PerSessionDirectoryFactory(string workingDirectory) Parameters Type Name Description System.String workingDirectory Methods | Improve this Doc View Source CleanupSession(String) Declaration public virtual void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId | Improve this Doc View Source GetDirectory(String, String) Declaration public virtual Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Directory Implements ISourceDirectoryFactory"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ReplicationClient.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ReplicationClient.html",
    "title": "Class ReplicationClient | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified. Inheritance System.Object ReplicationClient 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) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationClient : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationClient(IReplicator, IReplicationHandler, ISourceDirectoryFactory) Constructor. Declaration public ReplicationClient(IReplicator replicator, IReplicationHandler handler, ISourceDirectoryFactory factory) Parameters Type Name Description IReplicator replicator The IReplicator used for checking for updates IReplicationHandler handler The IReplicationHandler notified when new revisions are ready ISourceDirectoryFactory factory The ISourceDirectoryFactory for returning a Directory for a given source and session Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component name to use with IsEnabled(String) Declaration public const string INFO_STREAM_COMPONENT = \"ReplicationThread\" Field Value Type Description System.String Properties | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream | Improve this Doc View Source IsUpdateThreadAlive Returns true if the update thread is alive. The update thread is alive if it has been StartUpdateThread(Int64, String) and not StopUpdateThread() , as well as didn't hit an error which caused it to terminate (i.e. HandleUpdateException(Exception) threw the exception further). Declaration public virtual bool IsUpdateThreadAlive { get; } Property Value Type Description System.Boolean Methods | 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 EnsureOpen() Throws System.ObjectDisposedException if the client has already been disposed. Declaration protected void EnsureOpen() | Improve this Doc View Source HandleUpdateException(Exception) Called when an exception is hit by the replication thread. The default implementation prints the full stacktrace to the InfoStream set in InfoStream , or the Default one. You can override to log the exception elsewhere. Declaration protected virtual void HandleUpdateException(Exception exception) Parameters Type Name Description System.Exception exception Remarks NOTE: If you override this method to throw the exception further, the replication thread will be terminated. The only way to restart it is to call StopUpdateThread() followed by StartUpdateThread(Int64, String) . | Improve this Doc View Source RequiredFiles(IDictionary<String, IList<RevisionFile>>) Returns the files required for replication. By default, this method returns all files that exist in the new revision, but not in the handler. Declaration protected virtual IDictionary<string, IList<RevisionFile>> RequiredFiles(IDictionary<string, IList<RevisionFile>> newRevisionFiles) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> newRevisionFiles Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source StartUpdateThread(Int64, String) Start the update thread with the specified interval in milliseconds. For debugging purposes, you can optionally set the name to set on Lucene.Net.Replicator.ReplicationClient.ReplicationThread.Name . If you pass null , a default name will be set. Declaration public virtual void StartUpdateThread(long intervalMillis, string threadName) Parameters Type Name Description System.Int64 intervalMillis System.String threadName Exceptions Type Condition System.InvalidOperationException if the thread has already been started | Improve this Doc View Source StopUpdateThread() Stop the update thread. If the update thread is not running, silently does nothing. This method returns after the update thread has stopped. Declaration public virtual void StopUpdateThread() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UpdateNow() Executes the update operation immediately, regardless if an update thread is running or not. Declaration public virtual void UpdateNow() Exceptions Type Condition System.IO.IOException Implements System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.RevisionFile.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.RevisionFile.html",
    "title": "Class RevisionFile | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). Inheritance System.Object RevisionFile Implements System.IEquatable < RevisionFile > 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.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class RevisionFile : IEquatable<RevisionFile> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source RevisionFile(String, Int64) Constructor with the given file name and optionally length. Declaration public RevisionFile(string fileName, long length = -1L) Parameters Type Name Description System.String fileName The name of the file System.Int64 length Optional, the length of the file. Properties | Improve this Doc View Source FileName Gets the name of the file. Declaration public string FileName { get; } Property Value Type Description System.String | Improve this Doc View Source Length Gets or sets the length of the file denoted by FileName . Declaration public long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Equals(RevisionFile) Declaration public virtual bool Equals(RevisionFile other) Parameters Type Name Description RevisionFile 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() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IEquatable<T>"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionExpiredException.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionExpiredException.html",
    "title": "Class SessionExpiredException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. Inheritance System.Object System.Exception System.SystemException System.IO.IOException SessionExpiredException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SessionExpiredException : IOException, ISerializable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionExpiredException() Declaration public SessionExpiredException() | Improve this Doc View Source SessionExpiredException(String) Declaration public SessionExpiredException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SessionExpiredException(String, Exception) Declaration public SessionExpiredException(string message, Exception inner) Parameters Type Name Description System.String message System.Exception inner Implements System.Runtime.Serialization.ISerializable See Also DEFAULT_SESSION_EXPIRATION_THRESHOLD ExpirationThreshold"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionToken.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionToken.html",
    "title": "Class SessionToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Inheritance System.Object SessionToken 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) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public sealed class SessionToken Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionToken(IDataInput) Constructor which deserializes from the given J2N.IO.IDataInput . Declaration public SessionToken(IDataInput reader) Parameters Type Name Description J2N.IO.IDataInput reader Exceptions Type Condition System.IO.IOException | Improve this Doc View Source SessionToken(String, IRevision) Constructor with the given id and revision . Declaration public SessionToken(string id, IRevision revision) Parameters Type Name Description System.String id IRevision revision Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source Id Id of this session. Should be passed when releasing the session, thereby acknowledging the IReplicator that this session is no longer in use. Declaration public string Id { get; } Property Value Type Description System.String See Also Release ( System.String ) | Improve this Doc View Source SourceFiles SourceFiles Declaration public IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Version Declaration public string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Serialize(DataOutputStream) Serialize the token data for communication between server and client. Declaration public void Serialize(DataOutputStream writer) Parameters Type Name Description J2N.IO.DataOutputStream writer Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also CheckForUpdate ( System.String ) Release ( System.String ) DEFAULT_SESSION_EXPIRATION_THRESHOLD"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.DuplicateFilter.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.DuplicateFilter.html",
    "title": "Class DuplicateFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DuplicateFilter Filter to remove duplicate values from search results. WARNING: for this to work correctly, you may have to wrap your reader as it cannot current deduplicate across different index segments. Inheritance System.Object Filter DuplicateFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class DuplicateFilter : Filter Constructors | Improve this Doc View Source DuplicateFilter(String) Declaration public DuplicateFilter(string fieldName) Parameters Type Name Description System.String fieldName | Improve this Doc View Source DuplicateFilter(String, KeepMode, ProcessingMode) Declaration public DuplicateFilter(string fieldName, KeepMode keepMode, ProcessingMode processingMode) Parameters Type Name Description System.String fieldName KeepMode keepMode ProcessingMode processingMode Properties | Improve this Doc View Source FieldName Declaration public virtual string FieldName { get; set; } Property Value Type Description System.String | Improve this Doc View Source KeepMode Declaration public KeepMode KeepMode { get; set; } Property Value Type Description KeepMode | Improve this Doc View Source ProcessingMode Declaration public ProcessingMode ProcessingMode { get; set; } Property Value Type Description ProcessingMode Methods | 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 GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() See Also SlowCompositeReaderWrapper"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.FuzzyLikeThisQuery.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.FuzzyLikeThisQuery.html",
    "title": "Class FuzzyLikeThisQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyLikeThisQuery Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms. In effect this mixes the behaviour of FuzzyQuery and MoreLikeThis but with special consideration of fuzzy scoring factors. This generally produces good results for queries where users may provide details in a number of fields and have no knowledge of boolean query syntax and also want a degree of fuzzy matching and a fast query. For each source term the fuzzy variants are held in a BooleanQuery with no coord factor (because we are not looking for matches on multiple variants in any one doc). Additionally, a specialized TermQuery is used for variants and does not use that variant term's IDF because this would favour rarer terms eg misspellings. Instead, all variants use the same IDF ranking (the one for the source query term) and this is factored into the variant's boost. If the source query term does not exist in the index the average IDF of the variants is used. Inheritance System.Object Query FuzzyLikeThisQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class FuzzyLikeThisQuery : Query Constructors | Improve this Doc View Source FuzzyLikeThisQuery(Int32, Analyzer) Declaration public FuzzyLikeThisQuery(int maxNumTerms, Analyzer analyzer) Parameters Type Name Description System.Int32 maxNumTerms The total number of terms clauses that will appear once rewritten as a BooleanQuery Analyzer analyzer Properties | Improve this Doc View Source IgnoreTF Declaration public virtual bool IgnoreTF { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddTerms(String, String, Single, Int32) Adds user input for \"fuzzification\" Declaration public virtual void AddTerms(string queryString, string fieldName, float minSimilarity, int prefixLength) Parameters Type Name Description System.String queryString The string which will be parsed by the analyzer and for which fuzzy variants will be parsed System.String fieldName The minimum similarity of the term variants (see FuzzyTermsEnum ) System.Single minSimilarity Length of required common prefix on variant terms (see FuzzyTermsEnum ) System.Int32 prefixLength | 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 Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) (non-Javadoc) 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)"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.html",
    "title": "Namespace Lucene.Net.Sandbox.Queries | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Sandbox.Queries <!-- 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. --> Additional queries (some may have caveats or limitations) Classes DuplicateFilter Filter to remove duplicate values from search results. WARNING: for this to work correctly, you may have to wrap your reader as it cannot current deduplicate across different index segments. FuzzyLikeThisQuery Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms. In effect this mixes the behaviour of FuzzyQuery and MoreLikeThis but with special consideration of fuzzy scoring factors. This generally produces good results for queries where users may provide details in a number of fields and have no knowledge of boolean query syntax and also want a degree of fuzzy matching and a fast query. For each source term the fuzzy variants are held in a BooleanQuery with no coord factor (because we are not looking for matches on multiple variants in any one doc). Additionally, a specialized TermQuery is used for variants and does not use that variant term's IDF because this would favour rarer terms eg misspellings. Instead, all variants use the same IDF ranking (the one for the source query term) and this is factored into the variant's boost. If the source query term does not exist in the index the average IDF of the variants is used. SlowFuzzyQuery Implements the classic fuzzy search query. The similarity measurement is based on the Levenshtein (edit distance) algorithm. Note that, unlike FuzzyQuery , this query will silently allow for a (possibly huge) number of edit distances in comparisons, and may be extremely slow (comparing every term in the index). SlowFuzzyTermsEnum Potentially slow fuzzy TermsEnum for enumerating all terms that are similar to the specified filter term. If the minSimilarity or maxEdits is greater than the Automaton's allowable range, this backs off to the classic (brute force) fuzzy terms enum method by calling GetAutomatonEnum(Int32, BytesRef) . Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. SortedSetSortField SortField for SortedSetDocValues . A SortedSetDocValues contains multiple values for a field, so sorting with this technique \"selects\" a value as the representative sort value for the document. By default, the minimum value in the set is selected as the sort value, but this can be customized. Selectors other than the default do have some limitations (see below) to ensure that all selections happen in constant-time for performance. Like sorting by string, this also supports sorting missing values as first or last, via MissingValue . Limitations: Fields containing System.Int32.MaxValue or more unique values are unsupported. Selectors other than the default MIN require optional codec support. However several codecs provided by Lucene, including the current default codec, support this. Enums KeepMode KeepMode determines which document id to consider as the master, all others being identified as duplicates. Selecting the \"first occurrence\" can potentially save on IO. ProcessingMode \"Full\" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates. \"Fast\" processing sets all bits to true then unsets all duplicate docs found for the given field. This approach avoids the need to read DocsEnum for terms that are seen to have a document frequency of exactly \"1\" (i.e. no duplicates). While a potentially faster approach , the downside is that bitsets produced will include bits set for documents that do not actually contain the field given. Selector Selects a value from the document's set to use as the sort value"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.KeepMode.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.KeepMode.html",
    "title": "Enum KeepMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum KeepMode KeepMode determines which document id to consider as the master, all others being identified as duplicates. Selecting the \"first occurrence\" can potentially save on IO. Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public enum KeepMode Fields Name Description KM_USE_FIRST_OCCURRENCE KM_USE_LAST_OCCURRENCE"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.ProcessingMode.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.ProcessingMode.html",
    "title": "Enum ProcessingMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum ProcessingMode \"Full\" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates. \"Fast\" processing sets all bits to true then unsets all duplicate docs found for the given field. This approach avoids the need to read DocsEnum for terms that are seen to have a document frequency of exactly \"1\" (i.e. no duplicates). While a potentially faster approach , the downside is that bitsets produced will include bits set for documents that do not actually contain the field given. Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public enum ProcessingMode Fields Name Description PM_FAST_INVALIDATION \"Fast\" processing sets all bits to true then unsets all duplicate docs found for the given field. This approach avoids the need to read DocsEnum for terms that are seen to have a document frequency of exactly \"1\" (i.e. no duplicates). While a potentially faster approach , the downside is that bitsets produced will include bits set for documents that do not actually contain the field given. PM_FULL_VALIDATION \"Full\" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates."
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.Selector.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.Selector.html",
    "title": "Enum Selector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Selector Selects a value from the document's set to use as the sort value Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public enum Selector Fields Name Description MAX Selects the maximum value in the set MIDDLE_MAX Selects the middle value in the set. If the set has an even number of values, the higher of the middle two is chosen MIDDLE_MIN Selects the middle value in the set. If the set has an even number of values, the lower of the middle two is chosen. MIN Selects the minimum value in the set"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyQuery.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyQuery.html",
    "title": "Class SlowFuzzyQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SlowFuzzyQuery Implements the classic fuzzy search query. The similarity measurement is based on the Levenshtein (edit distance) algorithm. Note that, unlike FuzzyQuery , this query will silently allow for a (possibly huge) number of edit distances in comparisons, and may be extremely slow (comparing every term in the index). Inheritance System.Object Query MultiTermQuery SlowFuzzyQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax [Obsolete(\"Use FuzzyQuery instead.\")] public class SlowFuzzyQuery : MultiTermQuery Constructors | Improve this Doc View Source SlowFuzzyQuery(Term) Calls SlowFuzzyQuery(Term, Single) . Declaration public SlowFuzzyQuery(Term term) Parameters Type Name Description Term term | Improve this Doc View Source SlowFuzzyQuery(Term, Single) Calls SlowFuzzyQuery(Term, Single) . Declaration public SlowFuzzyQuery(Term term, float minimumSimilarity) Parameters Type Name Description Term term System.Single minimumSimilarity | Improve this Doc View Source SlowFuzzyQuery(Term, Single, Int32) Calls SlowFuzzyQuery(Term, Single) . Declaration public SlowFuzzyQuery(Term term, float minimumSimilarity, int prefixLength) Parameters Type Name Description Term term System.Single minimumSimilarity System.Int32 prefixLength | Improve this Doc View Source SlowFuzzyQuery(Term, Single, Int32, Int32) Create a new SlowFuzzyQuery that will match terms with a similarity of at least minimumSimilarity to term . If a prefixLength > 0 is specified, a common prefix of that length is also required. Declaration public SlowFuzzyQuery(Term term, float minimumSimilarity, int prefixLength, int maxExpansions) Parameters Type Name Description Term term the term to search for System.Single minimumSimilarity a value between 0 and 1 to set the required similarity between the query term and the matching terms. For example, for a minimumSimilarity of 0.5 a term of the same length as the query term is considered similar to the query term if the edit distance between both terms is less than length(term)*0.5 Alternatively, if minimumSimilarity is >= 1f, it is interpreted as a pure Levenshtein edit distance. For example, a value of 2f will match all terms within an edit distance of 2 from the query term. Edit distances specified in this way may not be fractional. System.Int32 prefixLength length of common (non-fuzzy) prefix System.Int32 maxExpansions the maximum number of terms to match. If this number is greater than MaxClauseCount when the query is rewritten, then the maxClauseCount will be used instead. Exceptions Type Condition System.ArgumentException if minimumSimilarity is >= 1 or < 0 or if prefixLength < 0 Fields | Improve this Doc View Source defaultMaxExpansions Declaration public static readonly int defaultMaxExpansions Field Value Type Description System.Int32 | Improve this Doc View Source defaultMinSimilarity Declaration public static readonly float defaultMinSimilarity Field Value Type Description System.Single | Improve this Doc View Source defaultPrefixLength Declaration public static readonly int defaultPrefixLength Field Value Type Description System.Int32 | Improve this Doc View Source m_term Declaration protected Term m_term Field Value Type Description Term Properties | Improve this Doc View Source MinSimilarity Gets the minimum similarity that is required for this query to match. Returns float value between 0.0 and 1.0. Declaration public virtual float MinSimilarity { get; } Property Value Type Description System.Single | Improve this Doc View Source PrefixLength Gets the non-fuzzy prefix length. This is the number of characters at the start of a term that must be identical (not fuzzy) to the query term if the query is to match that term. Declaration public virtual int PrefixLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Term Gets the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | 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 MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | 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)"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyTermsEnum.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyTermsEnum.html",
    "title": "Class SlowFuzzyTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SlowFuzzyTermsEnum Potentially slow fuzzy TermsEnum for enumerating all terms that are similar to the specified filter term. If the minSimilarity or maxEdits is greater than the Automaton's allowable range, this backs off to the classic (brute force) fuzzy terms enum method by calling GetAutomatonEnum(Int32, BytesRef) . Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FuzzyTermsEnum SlowFuzzyTermsEnum Implements IBytesRefIterator Inherited Members FuzzyTermsEnum.m_minSimilarity FuzzyTermsEnum.m_scaleFactor FuzzyTermsEnum.m_termLength FuzzyTermsEnum.m_maxEdits FuzzyTermsEnum.m_raw FuzzyTermsEnum.m_terms FuzzyTermsEnum.m_termText FuzzyTermsEnum.m_realPrefixLength FuzzyTermsEnum.GetAutomatonEnum(Int32, BytesRef) FuzzyTermsEnum.SetEnum(TermsEnum) FuzzyTermsEnum.Next() FuzzyTermsEnum.DocFreq FuzzyTermsEnum.TotalTermFreq FuzzyTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FuzzyTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FuzzyTermsEnum.SeekExact(BytesRef, TermState) FuzzyTermsEnum.GetTermState() FuzzyTermsEnum.Comparer FuzzyTermsEnum.Ord FuzzyTermsEnum.SeekExact(BytesRef) FuzzyTermsEnum.SeekCeil(BytesRef) FuzzyTermsEnum.SeekExact(Int64) FuzzyTermsEnum.Term FuzzyTermsEnum.MinSimilarity FuzzyTermsEnum.ScaleFactor TermsEnum.Attributes TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY 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.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax [Obsolete(\"Use FuzzyTermsEnum instead.\")] public class SlowFuzzyTermsEnum : FuzzyTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source SlowFuzzyTermsEnum(Terms, AttributeSource, Term, Single, Int32) Declaration public SlowFuzzyTermsEnum(Terms terms, AttributeSource atts, Term term, float minSimilarity, int prefixLength) Parameters Type Name Description Terms terms AttributeSource atts Term term System.Single minSimilarity System.Int32 prefixLength Methods | Improve this Doc View Source MaxEditDistanceChanged(BytesRef, Int32, Boolean) Declaration protected override void MaxEditDistanceChanged(BytesRef lastTerm, int maxEdits, bool init) Parameters Type Name Description BytesRef lastTerm System.Int32 maxEdits System.Boolean init Overrides FuzzyTermsEnum.MaxEditDistanceChanged(BytesRef, Int32, Boolean) Implements IBytesRefIterator"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SortedSetSortField.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SortedSetSortField.html",
    "title": "Class SortedSetSortField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedSetSortField SortField for SortedSetDocValues . A SortedSetDocValues contains multiple values for a field, so sorting with this technique \"selects\" a value as the representative sort value for the document. By default, the minimum value in the set is selected as the sort value, but this can be customized. Selectors other than the default do have some limitations (see below) to ensure that all selections happen in constant-time for performance. Like sorting by string, this also supports sorting missing values as first or last, via MissingValue . Limitations: Fields containing System.Int32.MaxValue or more unique values are unsupported. Selectors other than the default MIN require optional codec support. However several codecs provided by Lucene, including the current default codec, support this. Inheritance System.Object SortField SortedSetSortField Inherited Members SortField.FIELD_SCORE SortField.FIELD_DOC SortField.m_missingValue SortField.STRING_FIRST SortField.STRING_LAST SortField.Field SortField.Type SortField.Parser SortField.IsReverse SortField.ComparerSource SortField.BytesComparer SortField.Rewrite(IndexSearcher) SortField.NeedsScores System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class SortedSetSortField : SortField Constructors | Improve this Doc View Source SortedSetSortField(String, Boolean) Creates a sort, possibly in reverse, by the minimum value in the set for the document. Declaration public SortedSetSortField(string field, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Must not be null. System.Boolean reverse True if natural order should be reversed. | Improve this Doc View Source SortedSetSortField(String, Boolean, Selector) Creates a sort, possibly in reverse, specifying how the sort value from the document's set is selected. Declaration public SortedSetSortField(string field, bool reverse, Selector selector) Parameters Type Name Description System.String field Name of field to sort by. Must not be null. System.Boolean reverse True if natural order should be reversed. Selector selector custom selector for choosing the sort value from the set. NOTE: selectors other than MIN require optional codec support. Properties | Improve this Doc View Source MissingValue Set how missing values (the empty set) are sorted. Note that this must be STRING_FIRST or STRING_LAST . Declaration public override object MissingValue { get; set; } Property Value Type Description System.Object Overrides SortField.MissingValue | Improve this Doc View Source Selector Returns the selector in use for this sort Declaration public Selector Selector { get; } Property Value Type Description Selector Methods | 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 SortField.Equals(Object) | Improve this Doc View Source GetComparer(Int32, Int32) Declaration public override FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits System.Int32 sortPos Returns Type Description FieldComparer Overrides SortField.GetComparer(Int32, Int32) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SortField.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SortField.ToString()"
  },
  "api/Lucene.Net.Sandbox/overview.html": {
    "href": "api/Lucene.Net.Sandbox/overview.html",
    "title": "Lucene.Net.Sandbox | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.Sandbox <!-- 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. --> Sandbox"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.DisjointSpatialFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.DisjointSpatialFilter.html",
    "title": "Class DisjointSpatialFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DisjointSpatialFilter A Spatial Filter implementing IsDisjointTo in terms of a SpatialStrategy 's support for Intersects . A document is considered disjoint if it has spatial data that does not intersect with the query shape. Another way of looking at this is that it's a way to invert a query shape. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter DisjointSpatialFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Spatial Assembly : Lucene.Net.Spatial.dll Syntax public class DisjointSpatialFilter : Filter Constructors | Improve this Doc View Source DisjointSpatialFilter(SpatialStrategy, SpatialArgs, String) Declaration public DisjointSpatialFilter(SpatialStrategy strategy, SpatialArgs args, string field) Parameters Type Name Description SpatialStrategy strategy Needed to compute intersects SpatialArgs args Used in spatial intersection System.String field This field is used to determine which docs have spatial data via GetDocsWithField(AtomicReader, String) . Passing null will assume all docs have spatial data. Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.html",
    "title": "Namespace Lucene.Net.Spatial | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial <!-- 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. --> The Spatial Module for Apache Lucene The spatial module is new to Lucene 4, replacing the old \"contrib\" module that came before it. The principle interface to the module is a SpatialStrategy which encapsulates an approach to indexing and searching based on shapes. Different Strategies have different features and performance profiles, which are documented at each Strategy implementation class level. For some sample code showing how to use the API, see SpatialExample.java in the tests. The spatial module uses Spatial4j heavily. Spatial4j is an ASL licensed library with these capabilities: * Provides shape implementations, namely point, rectangle, and circle. Both geospatial contexts and plain 2D Euclidean/Cartesian contexts are supported. With an additional dependency, it adds polygon and other geometry shape support via integration with JTS Topology Suite . This includes dateline wrap support. * Shape parsing and serialization, including Well-Known Text (WKT) (via JTS). * Distance and other spatial related math calculations. Historical note: The new spatial module was once known as Lucene Spatial Playground (LSP) as an external project. In ~March 2012, LSP split into this new module as part of Lucene and Spatial4j externally. A large chunk of the LSP implementation originated as SOLR-2155 which uses trie/prefix-tree algorithms with a geohash encoding. That approach is implemented in RecursivePrefixTreeStrategy today. Classes DisjointSpatialFilter A Spatial Filter implementing IsDisjointTo in terms of a SpatialStrategy 's support for Intersects . A document is considered disjoint if it has spatial data that does not intersect with the query shape. Another way of looking at this is that it's a way to invert a query shape. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialStrategy The SpatialStrategy encapsulates an approach to indexing and searching based on shapes. Different implementations will support different features. A strategy should document these common elements: Can it index more than one shape per field? What types of shapes can be indexed? What types of query shapes can be used? What types of query operations are supported? This might vary per shape. Does it use the FieldCache , or some other type of cache? When? If a strategy only supports certain shapes at index or query time, then in general it will throw an exception if given an incompatible one. It will not be coerced into compatibility. Note that a SpatialStrategy is not involved with the Lucene stored field values of shapes, which is immaterial to indexing and search. Thread-safe. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser.html",
    "title": "Class AbstractPrefixTreeFilter.BaseTermsEnumTraverser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractPrefixTreeFilter.BaseTermsEnumTraverser Holds transient state and docid collecting utility methods as part of traversing a TermsEnum . Inheritance System.Object AbstractPrefixTreeFilter.BaseTermsEnumTraverser AbstractVisitingPrefixTreeFilter.VisitorTemplate 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class BaseTermsEnumTraverser Constructors | Improve this Doc View Source BaseTermsEnumTraverser(AbstractPrefixTreeFilter, AtomicReaderContext, IBits) Declaration public BaseTermsEnumTraverser(AbstractPrefixTreeFilter outerInstance, AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AbstractPrefixTreeFilter outerInstance AtomicReaderContext context IBits acceptDocs Fields | Improve this Doc View Source m_acceptDocs Declaration protected IBits m_acceptDocs Field Value Type Description IBits | Improve this Doc View Source m_context Declaration protected readonly AtomicReaderContext m_context Field Value Type Description AtomicReaderContext | Improve this Doc View Source m_docsEnum Declaration protected DocsEnum m_docsEnum Field Value Type Description DocsEnum | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 | Improve this Doc View Source m_outerInstance Declaration protected readonly AbstractPrefixTreeFilter m_outerInstance Field Value Type Description AbstractPrefixTreeFilter | Improve this Doc View Source m_termsEnum Declaration protected TermsEnum m_termsEnum Field Value Type Description TermsEnum Methods | Improve this Doc View Source CollectDocs(FixedBitSet) Declaration protected virtual void CollectDocs(FixedBitSet bitSet) Parameters Type Name Description FixedBitSet bitSet"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.html",
    "title": "Class AbstractPrefixTreeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractPrefixTreeFilter Base class for Lucene Filters on SpatialPrefixTree fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter ContainsPrefixTreeFilter Inherited Members Filter.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class AbstractPrefixTreeFilter : Filter Constructors | Improve this Doc View Source AbstractPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32) Declaration public AbstractPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel Fields | Improve this Doc View Source m_detailLevel Declaration protected readonly int m_detailLevel Field Value Type Description System.Int32 | Improve this Doc View Source m_fieldName Declaration protected readonly string m_fieldName Field Value Type Description System.String | Improve this Doc View Source m_grid Declaration protected readonly SpatialPrefixTree m_grid Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_queryShape Declaration protected readonly IShape m_queryShape Field Value Type Description Spatial4n.Core.Shapes.IShape Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.html",
    "title": "Class AbstractVisitingPrefixTreeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter Traverses a SpatialPrefixTree indexed field, using the template & visitor design patterns for subclasses to guide the traversal and collect matching documents. Subclasses implement GetDocIdSet(AtomicReaderContext, IBits) by instantiating a custom AbstractVisitingPrefixTreeFilter.VisitorTemplate subclass (i.e. an anonymous inner class) and implement the required methods. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter IntersectsPrefixTreeFilter WithinPrefixTreeFilter Inherited Members AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class AbstractVisitingPrefixTreeFilter : AbstractPrefixTreeFilter Constructors | Improve this Doc View Source AbstractVisitingPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32) Declaration public AbstractVisitingPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel Fields | Improve this Doc View Source m_prefixGridScanLevel Declaration protected readonly int m_prefixGridScanLevel Field Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VisitorTemplate.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VisitorTemplate.html",
    "title": "Class AbstractVisitingPrefixTreeFilter.VisitorTemplate | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter.VisitorTemplate An abstract class designed to make it easy to implement predicates or other operations on a SpatialPrefixTree indexed field. An instance of this class is not designed to be re-used across AtomicReaderContext instances so simply create a new one for each call to, say a GetDocIdSet(AtomicReaderContext, IBits) . The GetDocIdSet() method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it calls Start() so a subclass can set up a return value, like an FixedBitSet . Then it starts the traversal process, calling FindSubCellsToVisit(Cell) which by default finds the top cells that intersect queryShape . If there isn't an indexed cell for a corresponding cell returned for this method then it's short-circuited until it finds one, at which point Visit(Cell) is called. At some depths, of the tree, the algorithm switches to a scanning mode that calls VisitScanned(Cell) for each leaf cell found. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractPrefixTreeFilter.BaseTermsEnumTraverser AbstractVisitingPrefixTreeFilter.VisitorTemplate Inherited Members AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_outerInstance AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_context AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_acceptDocs AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_maxDoc AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_termsEnum AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_docsEnum AbstractPrefixTreeFilter.BaseTermsEnumTraverser.CollectDocs(FixedBitSet) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class VisitorTemplate : AbstractPrefixTreeFilter.BaseTermsEnumTraverser Constructors | Improve this Doc View Source VisitorTemplate(AbstractVisitingPrefixTreeFilter, AtomicReaderContext, IBits, Boolean) Declaration public VisitorTemplate(AbstractVisitingPrefixTreeFilter outerInstance, AtomicReaderContext context, IBits acceptDocs, bool hasIndexedLeaves) Parameters Type Name Description AbstractVisitingPrefixTreeFilter outerInstance AtomicReaderContext context IBits acceptDocs System.Boolean hasIndexedLeaves Fields | Improve this Doc View Source m_hasIndexedLeaves Declaration protected readonly bool m_hasIndexedLeaves Field Value Type Description System.Boolean Methods | Improve this Doc View Source FindSubCellsToVisit(Cell) Called when doing a divide & conquer to find the next intersecting cells of the query shape that are beneath cell . cell is guaranteed to have an intersection and thus this must return some number of nodes. Declaration protected virtual IEnumerator<Cell> FindSubCellsToVisit(Cell cell) Parameters Type Name Description Cell cell Returns Type Description System.Collections.Generic.IEnumerator < Cell > | Improve this Doc View Source Finish() Called last to return the result. Declaration protected abstract DocIdSet Finish() Returns Type Description DocIdSet Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetDocIdSet() Declaration public virtual DocIdSet GetDocIdSet() Returns Type Description DocIdSet | Improve this Doc View Source PostSiblings(AbstractVisitingPrefixTreeFilter.VNode) Declaration protected virtual void PostSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode) Parameters Type Name Description AbstractVisitingPrefixTreeFilter.VNode vNode | Improve this Doc View Source PreSiblings(AbstractVisitingPrefixTreeFilter.VNode) Declaration protected virtual void PreSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode) Parameters Type Name Description AbstractVisitingPrefixTreeFilter.VNode vNode | Improve this Doc View Source Scan(Int32) Scans ( termsEnum.Next() ) terms until a term is found that does not start with curVNode's cell. If it finds a leaf cell or a cell at level scanDetailLevel then it calls VisitScanned(Cell) . Declaration protected virtual void Scan(int scanDetailLevel) Parameters Type Name Description System.Int32 scanDetailLevel Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Start() Called first to setup things. Declaration protected abstract void Start() Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Visit(Cell) Visit an indexed cell returned from FindSubCellsToVisit(Cell) . Declaration protected abstract bool Visit(Cell cell) Parameters Type Name Description Cell cell An intersecting cell. Returns Type Description System.Boolean true to descend to more levels. It is an error to return true if cell.Level == detailLevel Exceptions Type Condition System.IO.IOException | Improve this Doc View Source VisitLeaf(Cell) Called after visit() returns true and an indexed leaf cell is found. Declaration protected abstract void VisitLeaf(Cell cell) Parameters Type Name Description Cell cell Remarks Called after Visit() returns true and an indexed leaf cell is found. An indexed leaf cell means associated documents generally won't be found at further detail levels. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source VisitScanned(Cell) The cell is either indexed as a leaf or is the last level of detail. It might not even intersect the query shape, so be sure to check for that. Declaration protected abstract void VisitScanned(Cell cell) Parameters Type Name Description Cell cell Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VNode.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VNode.html",
    "title": "Class AbstractVisitingPrefixTreeFilter.VNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter.VNode A Visitor node/cell found via the query shape for AbstractVisitingPrefixTreeFilter.VisitorTemplate . Sometimes these are reset(cell). It's like a LinkedList node but forms a tree. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractVisitingPrefixTreeFilter.VNode 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class VNode"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.ContainsPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.ContainsPrefixTreeFilter.html",
    "title": "Class ContainsPrefixTreeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ContainsPrefixTreeFilter Finds docs where its indexed shape Contains the query shape. For use on RecursivePrefixTreeStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter ContainsPrefixTreeFilter Inherited Members AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class ContainsPrefixTreeFilter : AbstractPrefixTreeFilter Constructors | Improve this Doc View Source ContainsPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Boolean) Declaration public ContainsPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, bool multiOverlappingIndexedShapes) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Boolean multiOverlappingIndexedShapes Fields | Improve this Doc View Source m_multiOverlappingIndexedShapes If the spatial data for a document is comprised of multiple overlapping or adjacent parts, it might fail to match a query shape when doing the CONTAINS predicate when the sum of those shapes contain the query shape but none do individually. Set this to false to increase performance if you don't care about that circumstance (such as if your indexed data doesn't even have such conditions). See LUCENE-5062. Declaration protected readonly bool m_multiOverlappingIndexedShapes Field Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.html",
    "title": "Namespace Lucene.Net.Spatial.Prefix | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Prefix <!-- 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. --> Prefix Tree Strategy Classes AbstractPrefixTreeFilter Base class for Lucene Filters on SpatialPrefixTree fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractPrefixTreeFilter.BaseTermsEnumTraverser Holds transient state and docid collecting utility methods as part of traversing a TermsEnum . AbstractVisitingPrefixTreeFilter Traverses a SpatialPrefixTree indexed field, using the template & visitor design patterns for subclasses to guide the traversal and collect matching documents. Subclasses implement GetDocIdSet(AtomicReaderContext, IBits) by instantiating a custom AbstractVisitingPrefixTreeFilter.VisitorTemplate subclass (i.e. an anonymous inner class) and implement the required methods. This is a Lucene.NET INTERNAL API, use at your own risk AbstractVisitingPrefixTreeFilter.VisitorTemplate An abstract class designed to make it easy to implement predicates or other operations on a SpatialPrefixTree indexed field. An instance of this class is not designed to be re-used across AtomicReaderContext instances so simply create a new one for each call to, say a GetDocIdSet(AtomicReaderContext, IBits) . The GetDocIdSet() method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it calls Start() so a subclass can set up a return value, like an FixedBitSet . Then it starts the traversal process, calling FindSubCellsToVisit(Cell) which by default finds the top cells that intersect queryShape . If there isn't an indexed cell for a corresponding cell returned for this method then it's short-circuited until it finds one, at which point Visit(Cell) is called. At some depths, of the tree, the algorithm switches to a scanning mode that calls VisitScanned(Cell) for each leaf cell found. This is a Lucene.NET INTERNAL API, use at your own risk AbstractVisitingPrefixTreeFilter.VNode A Visitor node/cell found via the query shape for AbstractVisitingPrefixTreeFilter.VisitorTemplate . Sometimes these are reset(cell). It's like a LinkedList node but forms a tree. This is a Lucene.NET INTERNAL API, use at your own risk ContainsPrefixTreeFilter Finds docs where its indexed shape Contains the query shape. For use on RecursivePrefixTreeStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk IntersectsPrefixTreeFilter A Filter matching documents that have an Spatial4n.Core.Shapes.SpatialRelation.INTERSECTS (i.e. not DISTINCT) relationship with a provided query shape. This is a Lucene.NET INTERNAL API, use at your own risk PointPrefixTreeFieldCacheProvider Implementation of ShapeFieldCacheProvider<T> designed for PrefixTreeStrategy s. Note, due to the fragmented representation of Shapes in these Strategies, this implementation can only retrieve the central Spatial4n.Core.Shapes.IPoint of the original Shapes. This is a Lucene.NET INTERNAL API, use at your own risk PrefixTreeStrategy An abstract SpatialStrategy based on SpatialPrefixTree . The two subclasses are RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy . This strategy is most effective as a fast approximate spatial search filter. Characteristics: Can index any shape; however only RecursivePrefixTreeStrategy can effectively search non-point shapes. Can index a variable number of shapes per field value. This strategy can do it via multiple calls to CreateIndexableFields(IShape) for a document or by giving it some sort of Shape aggregate (e.g. NTS WKT MultiPoint). The shape's boundary is approximated to a grid precision. Can query with any shape. The shape's boundary is approximated to a grid precision. Only Intersects is supported. If only points are indexed then this is effectively equivalent to IsWithin. The strategy supports MakeDistanceValueSource(IPoint, Double) even for multi-valued data, so long as the indexed data is all points; the behavior is undefined otherwise. However, it will likely be removed in the future in lieu of using another strategy with a more scalable implementation. Use of this call is the only circumstance in which a cache is used. The cache is simple but as such it doesn't scale to large numbers of points nor is it real-time-search friendly. Implementation: The SpatialPrefixTree does most of the work, for example returning a list of terms representing grids of various sizes for a supplied shape. An important configuration item is DistErrPct which balances shape precision against scalability. See those docs. This is a Lucene.NET INTERNAL API, use at your own risk RecursivePrefixTreeStrategy A PrefixTreeStrategy which uses AbstractVisitingPrefixTreeFilter . This strategy has support for searching non-point shapes (note: not tested). Even a query shape with distErrPct=0 (fully precise to the grid) should have good performance for typical data, unless there is a lot of indexed data coincident with the shape's edge. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermQueryPrefixTreeStrategy A basic implementation of PrefixTreeStrategy using a large TermsFilter of all the cells from GetCells(IShape, Int32, Boolean, Boolean) . It only supports the search of indexed Point shapes. The precision of query shapes (DistErrPct) is an important factor in using this Strategy. If the precision is too precise then it will result in many terms which will amount to a slower query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WithinPrefixTreeFilter Finds docs where its indexed shape is IsWithin the query shape. It works by looking at cells outside of the query shape to ensure documents there are excluded. By default, it will examine all cells, and it's fairly slow. If you know that the indexed shapes are never comprised of multiple disjoint parts (which also means it is not multi-valued), then you can pass SpatialPrefixTree.GetDistanceForLevel(maxLevels) as the queryBuffer constructor parameter to minimally look this distance beyond the query shape's edge. Even if the indexed shapes are sometimes comprised of multiple disjoint parts, you might want to use this option with a large buffer as a faster approximation with minimal false-positives. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.html",
    "title": "Class IntersectsPrefixTreeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IntersectsPrefixTreeFilter A Filter matching documents that have an Spatial4n.Core.Shapes.SpatialRelation.INTERSECTS (i.e. not DISTINCT) relationship with a provided query shape. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter IntersectsPrefixTreeFilter Inherited Members AbstractVisitingPrefixTreeFilter.m_prefixGridScanLevel AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class IntersectsPrefixTreeFilter : AbstractVisitingPrefixTreeFilter Constructors | Improve this Doc View Source IntersectsPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32, Boolean) Declaration public IntersectsPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel, bool hasIndexedLeaves) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel System.Boolean hasIndexedLeaves Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractVisitingPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetHashCode() LUCENENET specific: need to override GetHashCode to prevent a compiler warning and realistically, the hash code should work similarly to Equals. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractVisitingPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PointPrefixTreeFieldCacheProvider.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PointPrefixTreeFieldCacheProvider.html",
    "title": "Class PointPrefixTreeFieldCacheProvider | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PointPrefixTreeFieldCacheProvider Implementation of ShapeFieldCacheProvider<T> designed for PrefixTreeStrategy s. Note, due to the fragmented representation of Shapes in these Strategies, this implementation can only retrieve the central Spatial4n.Core.Shapes.IPoint of the original Shapes. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ShapeFieldCacheProvider < Spatial4n.Core.Shapes.IPoint > PointPrefixTreeFieldCacheProvider Inherited Members ShapeFieldCacheProvider<IPoint>.m_defaultSize ShapeFieldCacheProvider<IPoint>.m_shapeField ShapeFieldCacheProvider<IPoint>.GetCache(AtomicReader) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class PointPrefixTreeFieldCacheProvider : ShapeFieldCacheProvider<IPoint> Constructors | Improve this Doc View Source PointPrefixTreeFieldCacheProvider(SpatialPrefixTree, String, Int32) Declaration public PointPrefixTreeFieldCacheProvider(SpatialPrefixTree grid, string shapeField, int defaultSize) Parameters Type Name Description SpatialPrefixTree grid System.String shapeField System.Int32 defaultSize Methods | Improve this Doc View Source ReadShape(BytesRef) Declaration protected override IPoint ReadShape(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description Spatial4n.Core.Shapes.IPoint Overrides Lucene.Net.Spatial.Util.ShapeFieldCacheProvider<Spatial4n.Core.Shapes.IPoint>.ReadShape(Lucene.Net.Util.BytesRef)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PrefixTreeStrategy.html",
    "title": "Class PrefixTreeStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixTreeStrategy An abstract SpatialStrategy based on SpatialPrefixTree . The two subclasses are RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy . This strategy is most effective as a fast approximate spatial search filter. Characteristics: Can index any shape; however only RecursivePrefixTreeStrategy can effectively search non-point shapes. Can index a variable number of shapes per field value. This strategy can do it via multiple calls to CreateIndexableFields(IShape) for a document or by giving it some sort of Shape aggregate (e.g. NTS WKT MultiPoint). The shape's boundary is approximated to a grid precision. Can query with any shape. The shape's boundary is approximated to a grid precision. Only Intersects is supported. If only points are indexed then this is effectively equivalent to IsWithin. The strategy supports MakeDistanceValueSource(IPoint, Double) even for multi-valued data, so long as the indexed data is all points; the behavior is undefined otherwise. However, it will likely be removed in the future in lieu of using another strategy with a more scalable implementation. Use of this call is the only circumstance in which a cache is used. The cache is simple but as such it doesn't scale to large numbers of points nor is it real-time-search friendly. Implementation: The SpatialPrefixTree does most of the work, for example returning a list of terms representing grids of various sizes for a supplied shape. An important configuration item is DistErrPct which balances shape precision against scalability. See those docs. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy RecursivePrefixTreeStrategy TermQueryPrefixTreeStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeFilter(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class PrefixTreeStrategy : SpatialStrategy Constructors | Improve this Doc View Source PrefixTreeStrategy(SpatialPrefixTree, String, Boolean) Declaration public PrefixTreeStrategy(SpatialPrefixTree grid, string fieldName, bool simplifyIndexedCells) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName System.Boolean simplifyIndexedCells Fields | Improve this Doc View Source FIELD_TYPE Indexed, tokenized, not stored. Declaration public static readonly FieldType FIELD_TYPE Field Value Type Description FieldType | Improve this Doc View Source m_defaultFieldValuesArrayLen Declaration protected int m_defaultFieldValuesArrayLen Field Value Type Description System.Int32 | Improve this Doc View Source m_distErrPct Declaration protected double m_distErrPct Field Value Type Description System.Double | Improve this Doc View Source m_grid Declaration protected readonly SpatialPrefixTree m_grid Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_simplifyIndexedCells Declaration protected readonly bool m_simplifyIndexedCells Field Value Type Description System.Boolean Properties | Improve this Doc View Source DefaultFieldValuesArrayLen A memory hint used by MakeDistanceValueSource(IPoint) for how big the initial size of each Document's array should be. The default is 2. Set this to slightly more than the default expected number of points per document. Declaration public virtual int DefaultFieldValuesArrayLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DistErrPct The default measure of shape precision affecting shapes at index and query times. Declaration public virtual double DistErrPct { get; set; } Property Value Type Description System.Double Remarks The default measure of shape precision affecting shapes at index and query times. Points don't use this as they are always indexed at the configured maximum precision ( MaxLevels ); this applies to all other shapes. Specific shapes at index and query time can use something different than this default value. If you don't set a default then the default is DEFAULT_DISTERRPCT -- 2.5%. See Also DistErrPct | Improve this Doc View Source Grid Declaration public virtual SpatialPrefixTree Grid { get; } Property Value Type Description SpatialPrefixTree Methods | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source CreateIndexableFields(IShape, Double) Declaration public virtual Field[] CreateIndexableFields(IShape shape, double distErr) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape System.Double distErr Returns Type Description Field [] | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.RecursivePrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.RecursivePrefixTreeStrategy.html",
    "title": "Class RecursivePrefixTreeStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RecursivePrefixTreeStrategy A PrefixTreeStrategy which uses AbstractVisitingPrefixTreeFilter . This strategy has support for searching non-point shapes (note: not tested). Even a query shape with distErrPct=0 (fully precise to the grid) should have good performance for typical data, unless there is a lot of indexed data coincident with the shape's edge. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy RecursivePrefixTreeStrategy Inherited Members PrefixTreeStrategy.m_grid PrefixTreeStrategy.m_simplifyIndexedCells PrefixTreeStrategy.m_defaultFieldValuesArrayLen PrefixTreeStrategy.m_distErrPct PrefixTreeStrategy.DefaultFieldValuesArrayLen PrefixTreeStrategy.DistErrPct PrefixTreeStrategy.CreateIndexableFields(IShape) PrefixTreeStrategy.CreateIndexableFields(IShape, Double) PrefixTreeStrategy.FIELD_TYPE PrefixTreeStrategy.MakeDistanceValueSource(IPoint, Double) PrefixTreeStrategy.Grid SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class RecursivePrefixTreeStrategy : PrefixTreeStrategy Constructors | Improve this Doc View Source RecursivePrefixTreeStrategy(SpatialPrefixTree, String) Declaration public RecursivePrefixTreeStrategy(SpatialPrefixTree grid, string fieldName) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName Fields | Improve this Doc View Source m_multiOverlappingIndexedShapes See m_multiOverlappingIndexedShapes . Declaration protected bool m_multiOverlappingIndexedShapes Field Value Type Description System.Boolean | Improve this Doc View Source m_pointsOnly True if only indexed points shall be supported. See Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.hasIndexedLeaves . Declaration protected bool m_pointsOnly Field Value Type Description System.Boolean Properties | Improve this Doc View Source PrefixGridScanLevel Sets the grid level [1-maxLevels] at which indexed terms are scanned brute-force instead of by grid decomposition. By default this is maxLevels - 4. The final level, maxLevels, is always scanned. Value can be 1 to maxLevels. Declaration public virtual int PrefixGridScanLevel { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SpatialStrategy.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.TermQueryPrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.TermQueryPrefixTreeStrategy.html",
    "title": "Class TermQueryPrefixTreeStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermQueryPrefixTreeStrategy A basic implementation of PrefixTreeStrategy using a large TermsFilter of all the cells from GetCells(IShape, Int32, Boolean, Boolean) . It only supports the search of indexed Point shapes. The precision of query shapes (DistErrPct) is an important factor in using this Strategy. If the precision is too precise then it will result in many terms which will amount to a slower query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy TermQueryPrefixTreeStrategy Inherited Members PrefixTreeStrategy.m_grid PrefixTreeStrategy.m_simplifyIndexedCells PrefixTreeStrategy.m_defaultFieldValuesArrayLen PrefixTreeStrategy.m_distErrPct PrefixTreeStrategy.DefaultFieldValuesArrayLen PrefixTreeStrategy.DistErrPct PrefixTreeStrategy.CreateIndexableFields(IShape) PrefixTreeStrategy.CreateIndexableFields(IShape, Double) PrefixTreeStrategy.FIELD_TYPE PrefixTreeStrategy.MakeDistanceValueSource(IPoint, Double) PrefixTreeStrategy.Grid SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class TermQueryPrefixTreeStrategy : PrefixTreeStrategy Constructors | Improve this Doc View Source TermQueryPrefixTreeStrategy(SpatialPrefixTree, String) Declaration public TermQueryPrefixTreeStrategy(SpatialPrefixTree grid, string fieldName) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName Methods | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.Cell.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.Cell.html",
    "title": "Class Cell | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Cell Represents a grid cell. These are not necessarily thread-safe, although new Cell(\"\") (world cell) must be. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Cell Implements System.IComparable < Cell > 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.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class Cell : IComparable<Cell> Constructors | Improve this Doc View Source Cell(SpatialPrefixTree, Byte[], Int32, Int32) Declaration protected Cell(SpatialPrefixTree outerInstance, byte[] bytes, int off, int len) Parameters Type Name Description SpatialPrefixTree outerInstance System.Byte [] bytes System.Int32 off System.Int32 len | Improve this Doc View Source Cell(SpatialPrefixTree, String) Declaration protected Cell(SpatialPrefixTree outerInstance, string token) Parameters Type Name Description SpatialPrefixTree outerInstance System.String token Fields | Improve this Doc View Source LEAF_BYTE Declaration public const byte LEAF_BYTE = 43 Field Value Type Description System.Byte | Improve this Doc View Source m_leaf Always false for points. Declaration protected bool m_leaf Field Value Type Description System.Boolean Remarks Always false for points. Otherwise, indicate no further sub-cells are going to be provided because shapeRel is WITHIN or maxLevels or a detailLevel is hit. | Improve this Doc View Source m_outerInstance LUCENENET specific - we need to set the SpatialPrefixTree before calling overridden members of this class, just in case those overridden members require it. This is not possible from the subclass because the constructor of the base class runs first. So we need to move the reference here and also set it before running the normal constructor logic. Declaration protected readonly SpatialPrefixTree m_outerInstance Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_shapeRel When set via GetSubCells(IShape) , it is the relationship between this cell and the given shape filter. Declaration protected SpatialRelation m_shapeRel Field Value Type Description Spatial4n.Core.Shapes.SpatialRelation Properties | Improve this Doc View Source Center Declaration public virtual IPoint Center { get; } Property Value Type Description Spatial4n.Core.Shapes.IPoint | Improve this Doc View Source IsLeaf For points, this is always false. Declaration public virtual bool IsLeaf { get; } Property Value Type Description System.Boolean Remarks For points, this is always false. Otherwise this is true if there are no further cells with this prefix for the shape (always true at maxLevels). | Improve this Doc View Source Level Declaration public virtual int Level { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Shape Declaration public abstract IShape Shape { get; } Property Value Type Description Spatial4n.Core.Shapes.IShape | Improve this Doc View Source ShapeRel Declaration public virtual SpatialRelation ShapeRel { get; } Property Value Type Description Spatial4n.Core.Shapes.SpatialRelation | Improve this Doc View Source SubCellsSize GetSubCells() .Count -- usually a constant. Should be >=2 Declaration public abstract int SubCellsSize { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TokenString Note: doesn't contain a trailing leaf byte. Declaration public virtual string TokenString { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(Cell) Declaration public virtual int CompareTo(Cell o) Parameters Type Name Description Cell o 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 GetSubCell(IPoint) Performant implementations are expected to implement this efficiently by considering the current cell's boundary. Declaration public abstract Cell GetSubCell(IPoint p) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p Returns Type Description Cell Remarks Performant implementations are expected to implement this efficiently by considering the current cell's boundary. Precondition: Never called when Level == maxLevel. Precondition: this.Shape.Relate(p) != SpatialRelation.DISJOINT. | Improve this Doc View Source GetSubCells() Gets the cells at the next grid cell level that cover this cell. Declaration protected abstract ICollection<Cell> GetSubCells() Returns Type Description System.Collections.Generic.ICollection < Cell > A set of cells (no dups), sorted, modifiable, not empty, not null. Remarks Gets the cells at the next grid cell level that cover this cell. Precondition: Never called when Level == maxLevel. | Improve this Doc View Source GetSubCells(IShape) Like GetSubCells() but with the results filtered by a shape. If that shape is a Spatial4n.Core.Shapes.IPoint then it must call GetSubCell(IPoint) . The returned cells should have ShapeRel set to their relation with shapeFilter . In addition, IsLeaf must be true when that relation is Spatial4n.Core.Shapes.SpatialRelation.WITHIN . Precondition: Never called when Level == maxLevel. Declaration public virtual ICollection<Cell> GetSubCells(IShape shapeFilter) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shapeFilter an optional filter for the returned cells. Returns Type Description System.Collections.Generic.ICollection < Cell > A set of cells (no dups), sorted. Not Modifiable. | Improve this Doc View Source GetTokenBytes() Note: doesn't contain a trailing leaf byte. Declaration public virtual byte[] GetTokenBytes() Returns Type Description System.Byte [] | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public virtual void Reset(byte[] bytes, int off, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len | Improve this Doc View Source SetLeaf() Note: not supported at level 0. Declaration public virtual void SetLeaf() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.Factory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.Factory.html",
    "title": "Class GeohashPrefixTree.Factory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GeohashPrefixTree.Factory Factory for creating GeohashPrefixTree instances with useful defaults Inheritance System.Object SpatialPrefixTreeFactory GeohashPrefixTree.Factory Inherited Members SpatialPrefixTreeFactory.PREFIX_TREE SpatialPrefixTreeFactory.MAX_LEVELS SpatialPrefixTreeFactory.MAX_DIST_ERR SpatialPrefixTreeFactory.m_args SpatialPrefixTreeFactory.m_ctx SpatialPrefixTreeFactory.m_maxLevels SpatialPrefixTreeFactory.MakeSPT(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.Init(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.InitMaxLevels() 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.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class Factory : SpatialPrefixTreeFactory Methods | Improve this Doc View Source GetLevelForDistance(Double) Declaration protected override int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 Overrides SpatialPrefixTreeFactory.GetLevelForDistance(Double) | Improve this Doc View Source NewSPT() Declaration protected override SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree Overrides SpatialPrefixTreeFactory.NewSPT()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.html",
    "title": "Class GeohashPrefixTree | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GeohashPrefixTree A SpatialPrefixTree based on Geohashes . Uses Spatial4n.Core.Util.GeohashUtils to do all the geohash work. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTree GeohashPrefixTree Inherited Members SpatialPrefixTree.m_maxLevels SpatialPrefixTree.m_ctx SpatialPrefixTree.SpatialContext SpatialPrefixTree.MaxLevels SpatialPrefixTree.ToString() SpatialPrefixTree.GetDistanceForLevel(Int32) SpatialPrefixTree.WorldCell SpatialPrefixTree.GetCell(Byte[], Int32, Int32, Cell) SpatialPrefixTree.GetCells(IShape, Int32, Boolean, Boolean) SpatialPrefixTree.GetCells(IPoint, Int32, Boolean) SpatialPrefixTree.CellsToTokenStrings(ICollection<Cell>) 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.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class GeohashPrefixTree : SpatialPrefixTree Constructors | Improve this Doc View Source GeohashPrefixTree(SpatialContext, Int32) Declaration public GeohashPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Int32 maxLevels Properties | Improve this Doc View Source MaxLevelsPossible Any more than this and there's no point (double lat & lon are the same). Declaration public static int MaxLevelsPossible { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetCell(IPoint, Int32) Declaration protected override Cell GetCell(IPoint p, int level) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 level Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(IPoint, Int32) | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public override Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(Byte[], Int32, Int32) | Improve this Doc View Source GetCell(String) Declaration public override Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(String) | Improve this Doc View Source GetLevelForDistance(Double) Declaration public override int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist Returns Type Description System.Int32 Overrides SpatialPrefixTree.GetLevelForDistance(Double)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.html",
    "title": "Namespace Lucene.Net.Spatial.Prefix.Tree | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Prefix.Tree <!-- 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. --> The Spatial Prefix package supports spatial indexing by index-time tokens where adding characters to a string gives greater resolution. Potential Implementations include: http://en.wikipedia.org/wiki/Quadtree http://en.wikipedia.org/wiki/Geohash http://healpix.jpl.nasa.gov/ Classes Cell Represents a grid cell. These are not necessarily thread-safe, although new Cell(\"\") (world cell) must be. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GeohashPrefixTree A SpatialPrefixTree based on Geohashes . Uses Spatial4n.Core.Util.GeohashUtils to do all the geohash work. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GeohashPrefixTree.Factory Factory for creating GeohashPrefixTree instances with useful defaults QuadPrefixTree A SpatialPrefixTree which uses a quad tree in which an indexed term will be generated for each cell, 'A', 'B', 'C', 'D'. This is a Lucene.NET EXPERIMENTAL API, use at your own risk QuadPrefixTree.Factory Factory for creating QuadPrefixTree instances with useful defaults SpatialPrefixTree A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. SpatialPrefixTreeFactory Abstract Factory for creating SpatialPrefixTree instances with useful defaults and passed on configurations defined in a System.Collections.Generic.IDictionary<TKey, TValue> . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.Factory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.Factory.html",
    "title": "Class QuadPrefixTree.Factory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QuadPrefixTree.Factory Factory for creating QuadPrefixTree instances with useful defaults Inheritance System.Object SpatialPrefixTreeFactory QuadPrefixTree.Factory Inherited Members SpatialPrefixTreeFactory.PREFIX_TREE SpatialPrefixTreeFactory.MAX_LEVELS SpatialPrefixTreeFactory.MAX_DIST_ERR SpatialPrefixTreeFactory.m_args SpatialPrefixTreeFactory.m_ctx SpatialPrefixTreeFactory.m_maxLevels SpatialPrefixTreeFactory.MakeSPT(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.Init(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.InitMaxLevels() 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.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class Factory : SpatialPrefixTreeFactory Methods | Improve this Doc View Source GetLevelForDistance(Double) Declaration protected override int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 Overrides SpatialPrefixTreeFactory.GetLevelForDistance(Double) | Improve this Doc View Source NewSPT() Declaration protected override SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree Overrides SpatialPrefixTreeFactory.NewSPT()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.html",
    "title": "Class QuadPrefixTree | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QuadPrefixTree A SpatialPrefixTree which uses a quad tree in which an indexed term will be generated for each cell, 'A', 'B', 'C', 'D'. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTree QuadPrefixTree Inherited Members SpatialPrefixTree.m_maxLevels SpatialPrefixTree.m_ctx SpatialPrefixTree.SpatialContext SpatialPrefixTree.MaxLevels SpatialPrefixTree.ToString() SpatialPrefixTree.GetDistanceForLevel(Int32) SpatialPrefixTree.WorldCell SpatialPrefixTree.GetCell(Byte[], Int32, Int32, Cell) SpatialPrefixTree.GetCells(IShape, Int32, Boolean, Boolean) SpatialPrefixTree.GetCells(IPoint, Int32, Boolean) SpatialPrefixTree.CellsToTokenStrings(ICollection<Cell>) 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.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class QuadPrefixTree : SpatialPrefixTree Constructors | Improve this Doc View Source QuadPrefixTree(SpatialContext) Declaration public QuadPrefixTree(SpatialContext ctx) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx | Improve this Doc View Source QuadPrefixTree(SpatialContext, IRectangle, Int32) Declaration public QuadPrefixTree(SpatialContext ctx, IRectangle bounds, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx Spatial4n.Core.Shapes.IRectangle bounds System.Int32 maxLevels | Improve this Doc View Source QuadPrefixTree(SpatialContext, Int32) Declaration public QuadPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Int32 maxLevels Fields | Improve this Doc View Source DEFAULT_MAX_LEVELS Declaration public const int DEFAULT_MAX_LEVELS = 12 Field Value Type Description System.Int32 | Improve this Doc View Source MAX_LEVELS_POSSIBLE Declaration public const int MAX_LEVELS_POSSIBLE = 50 Field Value Type Description System.Int32 Properties | Improve this Doc View Source GridH Declaration public double GridH { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source GetCell(IPoint, Int32) Declaration protected override Cell GetCell(IPoint p, int level) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 level Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(IPoint, Int32) | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public override Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(Byte[], Int32, Int32) | Improve this Doc View Source GetCell(String) Declaration public override Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(String) | Improve this Doc View Source GetLevelForDistance(Double) Declaration public override int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist Returns Type Description System.Int32 Overrides SpatialPrefixTree.GetLevelForDistance(Double) | Improve this Doc View Source PrintInfo(TextWriter) Declaration public virtual void PrintInfo(TextWriter out) Parameters Type Name Description System.IO.TextWriter out"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTree.html",
    "title": "Class SpatialPrefixTree | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialPrefixTree A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. Inheritance System.Object SpatialPrefixTree GeohashPrefixTree QuadPrefixTree 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) Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialPrefixTree Remarks A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. Each string corresponds to a rectangular spatial region. This approach is also referred to \"Grids\", \"Tiles\", and \"Spatial Tiers\". Implementations of this class should be thread-safe and immutable once initialized. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SpatialPrefixTree(SpatialContext, Int32) Declaration public SpatialPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Int32 maxLevels Fields | Improve this Doc View Source m_ctx Declaration protected readonly SpatialContext m_ctx Field Value Type Description Spatial4n.Core.Context.SpatialContext | Improve this Doc View Source m_maxLevels Declaration protected readonly int m_maxLevels Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxLevels Declaration public virtual int MaxLevels { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SpatialContext Declaration public virtual SpatialContext SpatialContext { get; } Property Value Type Description Spatial4n.Core.Context.SpatialContext | Improve this Doc View Source WorldCell Returns the level 0 cell which encompasses all spatial data. Declaration public virtual Cell WorldCell { get; } Property Value Type Description Cell Remarks Returns the level 0 cell which encompasses all spatial data. Equivalent to GetCell(String) with System.String.Empty . This cell is threadsafe, just like a spatial prefix grid is, although cells aren't generally threadsafe. Methods | Improve this Doc View Source CellsToTokenStrings(ICollection<Cell>) Will add the trailing leaf byte for leaves. This isn't particularly efficient. Declaration [Obsolete(\"TODO remove; not used and not interesting, don't need collection in & out\")] public static IList<string> CellsToTokenStrings(ICollection<Cell> cells) Parameters Type Name Description System.Collections.Generic.ICollection < Cell > cells Returns Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source GetCell(IPoint, Int32) Returns the cell containing point p at the specified level . Declaration protected virtual Cell GetCell(IPoint p, int level) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 level Returns Type Description Cell | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public abstract Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell | Improve this Doc View Source GetCell(Byte[], Int32, Int32, Cell) Declaration public Cell GetCell(byte[] bytes, int offset, int len, Cell target) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Cell target Returns Type Description Cell | Improve this Doc View Source GetCell(String) The cell for the specified token. Declaration public abstract Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Remarks The cell for the specified token. The empty string should be equal to WorldCell . Precondition: Never called when token length > maxLevel. | Improve this Doc View Source GetCells(IPoint, Int32, Boolean) A Point-optimized implementation of GetCells(IShape, Int32, Boolean, Boolean) . That method in facts calls this for points. This implementation depends on GetCell(String) being fast, as its called repeatedly when incPlarents is true. Declaration public virtual IList<Cell> GetCells(IPoint p, int detailLevel, bool inclParents) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 detailLevel System.Boolean inclParents Returns Type Description System.Collections.Generic.IList < Cell > | Improve this Doc View Source GetCells(IShape, Int32, Boolean, Boolean) Gets the intersecting cells for the specified shape, without exceeding detail level. Declaration public virtual IList<Cell> GetCells(IShape shape, int detailLevel, bool inclParents, bool simplify) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape the shape; non-null System.Int32 detailLevel the maximum detail level to get cells for System.Boolean inclParents if true then all parent cells of leaves are returned too. The top world cell is never returned. System.Boolean simplify for non-point shapes, this will simply/aggregate sets of complete leaves in a cell to its parent, resulting in ~20-25% fewer cells. Returns Type Description System.Collections.Generic.IList < Cell > a set of cells (no dups), sorted, immutable, non-null Remarks Gets the intersecting cells for the specified shape, without exceeding detail level. If a cell is within the query shape then it's marked as a leaf and none of its children are added. This implementation checks if shape is a Spatial4n.Core.Shapes.IPoint and if so returns GetCells(IPoint, Int32, Boolean) . | Improve this Doc View Source GetDistanceForLevel(Int32) Given a cell having the specified level, returns the distance from opposite corners. Declaration public virtual double GetDistanceForLevel(int level) Parameters Type Name Description System.Int32 level [1 to maxLevels] Returns Type Description System.Double 0 Remarks Given a cell having the specified level, returns the distance from opposite corners. Since this might very depending on where the cell is, this method may over-estimate. | Improve this Doc View Source GetLevelForDistance(Double) Returns the level of the largest grid in which its longest side is less than or equal to the provided distance (in degrees). Declaration public abstract int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist = 0 Returns Type Description System.Int32 level [1 to maxLevels] Remarks Returns the level of the largest grid in which its longest side is less than or equal to the provided distance (in degrees). Consequently dist acts as an error epsilon declaring the amount of detail needed in the grid, such that you can get a grid with just the right amount of precision. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTreeFactory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTreeFactory.html",
    "title": "Class SpatialPrefixTreeFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialPrefixTreeFactory Abstract Factory for creating SpatialPrefixTree instances with useful defaults and passed on configurations defined in a System.Collections.Generic.IDictionary<TKey, TValue> . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTreeFactory GeohashPrefixTree.Factory QuadPrefixTree.Factory 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.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialPrefixTreeFactory Fields | Improve this Doc View Source m_args Declaration protected IDictionary<string, string> m_args Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source m_ctx Declaration protected SpatialContext m_ctx Field Value Type Description Spatial4n.Core.Context.SpatialContext | Improve this Doc View Source m_maxLevels Declaration protected int? m_maxLevels Field Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source MAX_DIST_ERR Declaration public const string MAX_DIST_ERR = \"maxDistErr\" Field Value Type Description System.String | Improve this Doc View Source MAX_LEVELS Declaration public const string MAX_LEVELS = \"maxLevels\" Field Value Type Description System.String | Improve this Doc View Source PREFIX_TREE Declaration public const string PREFIX_TREE = \"prefixTree\" Field Value Type Description System.String Methods | Improve this Doc View Source GetLevelForDistance(Double) Calls GetLevelForDistance(Double) . Declaration protected abstract int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 | Improve this Doc View Source Init(IDictionary<String, String>, SpatialContext) Declaration protected virtual void Init(IDictionary<string, string> args, SpatialContext ctx) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Spatial4n.Core.Context.SpatialContext ctx | Improve this Doc View Source InitMaxLevels() Declaration protected virtual void InitMaxLevels() | Improve this Doc View Source MakeSPT(IDictionary<String, String>, SpatialContext) The factory is looked up via \"prefixTree\" in args , expecting \"geohash\" or \"quad\". Declaration public static SpatialPrefixTree MakeSPT(IDictionary<string, string> args, SpatialContext ctx) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Spatial4n.Core.Context.SpatialContext ctx Returns Type Description SpatialPrefixTree Remarks The factory is looked up via \"prefixTree\" in args , expecting \"geohash\" or \"quad\". If its neither of these, then \"geohash\" is chosen for a geo context, otherwise \"quad\" is chosen. | Improve this Doc View Source NewSPT() Declaration protected abstract SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.WithinPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.WithinPrefixTreeFilter.html",
    "title": "Class WithinPrefixTreeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WithinPrefixTreeFilter Finds docs where its indexed shape is IsWithin the query shape. It works by looking at cells outside of the query shape to ensure documents there are excluded. By default, it will examine all cells, and it's fairly slow. If you know that the indexed shapes are never comprised of multiple disjoint parts (which also means it is not multi-valued), then you can pass SpatialPrefixTree.GetDistanceForLevel(maxLevels) as the queryBuffer constructor parameter to minimally look this distance beyond the query shape's edge. Even if the indexed shapes are sometimes comprised of multiple disjoint parts, you might want to use this option with a large buffer as a faster approximation with minimal false-positives. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter WithinPrefixTreeFilter Inherited Members AbstractVisitingPrefixTreeFilter.m_prefixGridScanLevel AbstractVisitingPrefixTreeFilter.Equals(Object) AbstractVisitingPrefixTreeFilter.GetHashCode() AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class WithinPrefixTreeFilter : AbstractVisitingPrefixTreeFilter Constructors | Improve this Doc View Source WithinPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32, Double) See AbstractVisitingPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32) . queryBuffer is the (minimum) distance beyond the query shape edge where non-matching documents are looked for so they can be excluded. If -1 is used then the whole world is examined (a good default for correctness). Declaration public WithinPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel, double queryBuffer) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel System.Double queryBuffer Methods | Improve this Doc View Source BufferShape(IShape, Double) Returns a new shape that is larger than shape by at distErr. Declaration protected virtual IShape BufferShape(IShape shape, double distErr) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape System.Double distErr Returns Type Description Spatial4n.Core.Shapes.IShape | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.html",
    "title": "Namespace Lucene.Net.Spatial.Queries | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Queries <!-- 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. --> Spatial Query options useful for client side requests Classes SpatialArgs Principally holds the query Spatial4n.Core.Shapes.IShape and the SpatialOperation . It's used as an argument to some methods on SpatialStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialArgsParser Parses a string that usually looks like \"OPERATION(SHAPE)\" into a SpatialArgs object. The set of operations supported are defined in SpatialOperation , such as \"Intersects\" being a common one. The shape portion is defined by WKT Spatial4n.Core.IO.WktShapeParser , but it can be overridden/customized via ParseShape(String, SpatialContext) . There are some optional name-value pair parameters that follow the closing parenthesis. Example: Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025 In the future it would be good to support something at least semi-standardized like a variant of [E]CQL . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialOperation A clause that compares a stored geometry to a supplied geometry. For more explanation of each operation, consider looking at the source implementation of Evaluate(IShape, IShape) . See ESRIs docs on spatial relations This is a Lucene.NET EXPERIMENTAL API, use at your own risk UnsupportedSpatialOperation Exception thrown when the SpatialStrategy cannot implement the requested operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgs.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgs.html",
    "title": "Class SpatialArgs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialArgs Principally holds the query Spatial4n.Core.Shapes.IShape and the SpatialOperation . It's used as an argument to some methods on SpatialStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialArgs 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) Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class SpatialArgs Constructors | Improve this Doc View Source SpatialArgs(SpatialOperation, IShape) Declaration public SpatialArgs(SpatialOperation operation, IShape shape) Parameters Type Name Description SpatialOperation operation Spatial4n.Core.Shapes.IShape shape Fields | Improve this Doc View Source DEFAULT_DISTERRPCT Declaration public static readonly double DEFAULT_DISTERRPCT Field Value Type Description System.Double Properties | Improve this Doc View Source DistErr The acceptable error of the shape. This effectively inflates the size of the shape but should not shrink it. Declaration public virtual double? DistErr { get; set; } Property Value Type Description System.Nullable < System.Double > = 0 | Improve this Doc View Source DistErrPct A measure of acceptable error of the shape as a fraction. This effectively inflates the size of the shape but should not shrink it. Declaration public virtual double? DistErrPct { get; set; } Property Value Type Description System.Nullable < System.Double > 0 to 0.5 | Improve this Doc View Source Operation Declaration public virtual SpatialOperation Operation { get; set; } Property Value Type Description SpatialOperation | Improve this Doc View Source Shape Declaration public virtual IShape Shape { get; set; } Property Value Type Description Spatial4n.Core.Shapes.IShape Methods | Improve this Doc View Source CalcDistanceFromErrPct(IShape, Double, SpatialContext) Computes the distance given a shape and the distErrPct . The algorithm is the fraction of the distance from the center of the query shape to its furthest bounding box corner. Declaration public static double CalcDistanceFromErrPct(IShape shape, double distErrPct, SpatialContext ctx) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Mandatory. System.Double distErrPct 0 to 0.5 Spatial4n.Core.Context.SpatialContext ctx Mandatory Returns Type Description System.Double A distance (in degrees). | Improve this Doc View Source ResolveDistErr(SpatialContext, Double) Gets the error distance that specifies how precise the query shape is. This looks at DistErr , DistErrPct , and defaultDistErrPct . Declaration public virtual double ResolveDistErr(SpatialContext ctx, double defaultDistErrPct) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Double defaultDistErrPct 0 to 0.5 Returns Type Description System.Double = 0 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Validate() Check if the arguments make sense -- throw an exception if not Declaration public virtual void Validate()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgsParser.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgsParser.html",
    "title": "Class SpatialArgsParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialArgsParser Parses a string that usually looks like \"OPERATION(SHAPE)\" into a SpatialArgs object. The set of operations supported are defined in SpatialOperation , such as \"Intersects\" being a common one. The shape portion is defined by WKT Spatial4n.Core.IO.WktShapeParser , but it can be overridden/customized via ParseShape(String, SpatialContext) . There are some optional name-value pair parameters that follow the closing parenthesis. Example: Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025 In the future it would be good to support something at least semi-standardized like a variant of [E]CQL . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialArgsParser 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.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class SpatialArgsParser Fields | Improve this Doc View Source DIST_ERR Declaration public const string DIST_ERR = \"distErr\" Field Value Type Description System.String | Improve this Doc View Source DIST_ERR_PCT Declaration public const string DIST_ERR_PCT = \"distErrPct\" Field Value Type Description System.String Methods | Improve this Doc View Source NewSpatialArgs(SpatialOperation, IShape) Declaration protected virtual SpatialArgs NewSpatialArgs(SpatialOperation op, IShape shape) Parameters Type Name Description SpatialOperation op Spatial4n.Core.Shapes.IShape shape Returns Type Description SpatialArgs | Improve this Doc View Source Parse(String, SpatialContext) Parses a string such as \"Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025\". Declaration public virtual SpatialArgs Parse(string v, SpatialContext ctx) Parameters Type Name Description System.String v The string to parse. Mandatory. Spatial4n.Core.Context.SpatialContext ctx The spatial context. Mandatory. Returns Type Description SpatialArgs Not null. Exceptions Type Condition System.ArgumentException if the parameters don't make sense or an add-on parameter is unknown Spatial4n.Core.Exceptions.ParseException If there is a problem parsing the string Spatial4n.Core.Exceptions.InvalidShapeException When the coordinates are invalid for the shape | Improve this Doc View Source ParseMap(String) Parses \"a=b c=d f\" (whitespace separated) into name-value pairs. If there is no '=' as in 'f' above then it's short for f=f. Declaration protected static IDictionary<string, string> ParseMap(string body) Parameters Type Name Description System.String body Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source ParseShape(String, SpatialContext) Declaration protected virtual IShape ParseShape(string str, SpatialContext ctx) Parameters Type Name Description System.String str Spatial4n.Core.Context.SpatialContext ctx Returns Type Description Spatial4n.Core.Shapes.IShape | Improve this Doc View Source ReadBool(String, Boolean) Declaration protected static bool ReadBool(string v, bool defaultValue) Parameters Type Name Description System.String v System.Boolean defaultValue Returns Type Description System.Boolean | Improve this Doc View Source ReadDouble(String) Declaration protected static double? ReadDouble(string v) Parameters Type Name Description System.String v Returns Type Description System.Nullable < System.Double > | Improve this Doc View Source ReadNameValuePairs(SpatialArgs, IDictionary<String, String>) Declaration protected virtual void ReadNameValuePairs(SpatialArgs args, IDictionary<string, string> nameValPairs) Parameters Type Name Description SpatialArgs args System.Collections.Generic.IDictionary < System.String , System.String > nameValPairs | Improve this Doc View Source WriteSpatialArgs(SpatialArgs) Writes a close approximation to the parsed input format. Declaration public static string WriteSpatialArgs(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description System.String"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialOperation.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialOperation.html",
    "title": "Class SpatialOperation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialOperation A clause that compares a stored geometry to a supplied geometry. For more explanation of each operation, consider looking at the source implementation of Evaluate(IShape, IShape) . See ESRIs docs on spatial relations This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialOperation 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) Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax [Serializable] public abstract class SpatialOperation Constructors | Improve this Doc View Source SpatialOperation(String, Boolean, Boolean, Boolean) Declaration protected SpatialOperation(string name, bool scoreIsMeaningful, bool sourceNeedsArea, bool targetNeedsArea) Parameters Type Name Description System.String name System.Boolean scoreIsMeaningful System.Boolean sourceNeedsArea System.Boolean targetNeedsArea Fields | Improve this Doc View Source BBoxIntersects Bounding box of the indexed shape. Declaration public static readonly SpatialOperation BBoxIntersects Field Value Type Description SpatialOperation | Improve this Doc View Source BBoxWithin Bounding box of the indexed shape. Declaration public static readonly SpatialOperation BBoxWithin Field Value Type Description SpatialOperation | Improve this Doc View Source Contains Declaration public static readonly SpatialOperation Contains Field Value Type Description SpatialOperation | Improve this Doc View Source Intersects Declaration public static readonly SpatialOperation Intersects Field Value Type Description SpatialOperation | Improve this Doc View Source IsDisjointTo Declaration public static readonly SpatialOperation IsDisjointTo Field Value Type Description SpatialOperation | Improve this Doc View Source IsEqualTo Declaration public static readonly SpatialOperation IsEqualTo Field Value Type Description SpatialOperation | Improve this Doc View Source IsWithin Declaration public static readonly SpatialOperation IsWithin Field Value Type Description SpatialOperation | Improve this Doc View Source Overlaps Declaration public static readonly SpatialOperation Overlaps Field Value Type Description SpatialOperation Properties | Improve this Doc View Source IsScoreMeaningful Declaration public virtual bool IsScoreMeaningful { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsTargetNeedsArea Declaration public virtual bool IsTargetNeedsArea { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source SourceNeedsArea Declaration public virtual bool SourceNeedsArea { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Values Declaration public static IList<SpatialOperation> Values { get; } Property Value Type Description System.Collections.Generic.IList < SpatialOperation > Methods | Improve this Doc View Source Evaluate(IShape, IShape) Returns whether the relationship between indexedShape and queryShape is satisfied by this operation. Declaration public abstract bool Evaluate(IShape indexedShape, IShape queryShape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape indexedShape Spatial4n.Core.Shapes.IShape queryShape Returns Type Description System.Boolean | Improve this Doc View Source Get(String) Declaration public static SpatialOperation Get(string v) Parameters Type Name Description System.String v Returns Type Description SpatialOperation | Improve this Doc View Source Is(SpatialOperation, SpatialOperation[]) Declaration public static bool Is(SpatialOperation op, params SpatialOperation[] tst) Parameters Type Name Description SpatialOperation op SpatialOperation [] tst Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.UnsupportedSpatialOperation.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.UnsupportedSpatialOperation.html",
    "title": "Class UnsupportedSpatialOperation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UnsupportedSpatialOperation Exception thrown when the SpatialStrategy cannot implement the requested operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object System.Exception System.SystemException System.NotSupportedException UnsupportedSpatialOperation Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class UnsupportedSpatialOperation : NotSupportedException, ISerializable Constructors | Improve this Doc View Source UnsupportedSpatialOperation(SpatialOperation) Declaration public UnsupportedSpatialOperation(SpatialOperation op) Parameters Type Name Description SpatialOperation op Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.html",
    "title": "Namespace Lucene.Net.Spatial.Serialized | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Serialized <!-- 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. --> Strategies that serialize the shape (non-indexed). Classes SerializedDVStrategy A SpatialStrategy based on serializing a Shape stored into BinaryDocValues. This is not at all fast; it's designed to be used in conjuction with another index based SpatialStrategy that is approximated(like RecursivePrefixTreeStrategy ) to add precision or eventually make more specific / advanced calculations on the per-document geometry. The serialization uses Spatial4j's Spatial4n.Core.IO.BinaryCodec . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.SerializedDVStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.SerializedDVStrategy.html",
    "title": "Class SerializedDVStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SerializedDVStrategy A SpatialStrategy based on serializing a Shape stored into BinaryDocValues. This is not at all fast; it's designed to be used in conjuction with another index based SpatialStrategy that is approximated(like RecursivePrefixTreeStrategy ) to add precision or eventually make more specific / advanced calculations on the per-document geometry. The serialization uses Spatial4j's Spatial4n.Core.IO.BinaryCodec . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy SerializedDVStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() 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.Spatial.Serialized Assembly : Lucene.Net.Spatial.dll Syntax public class SerializedDVStrategy : SpatialStrategy Constructors | Improve this Doc View Source SerializedDVStrategy(SpatialContext, String) Constructs the spatial strategy with its mandatory arguments. Declaration public SerializedDVStrategy(SpatialContext ctx, string fieldName) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.String fieldName Methods | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double) | Improve this Doc View Source MakeFilter(SpatialArgs) Returns a Filter that should be used with QUERY_FIRST_FILTER_STRATEGY . Use in another manner is likely to result in an System.NotSupportedException to prevent misuse because the filter can't efficiently work via iteration. Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source MakeQuery(SpatialArgs) Declaration public override ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Overrides SpatialStrategy.MakeQuery(SpatialArgs) | Improve this Doc View Source MakeShapeValueSource() Provides access to each shape per document as a ValueSource in which ObjectVal(Int32) returns a Spatial4n.Core.Shapes.IShape . Declaration public virtual ValueSource MakeShapeValueSource() Returns Type Description ValueSource"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.SpatialStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.SpatialStrategy.html",
    "title": "Class SpatialStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpatialStrategy The SpatialStrategy encapsulates an approach to indexing and searching based on shapes. Different implementations will support different features. A strategy should document these common elements: Can it index more than one shape per field? What types of shapes can be indexed? What types of query shapes can be used? What types of query operations are supported? This might vary per shape. Does it use the FieldCache , or some other type of cache? When? If a strategy only supports certain shapes at index or query time, then in general it will throw an exception if given an incompatible one. It will not be coerced into compatibility. Note that a SpatialStrategy is not involved with the Lucene stored field values of shapes, which is immaterial to indexing and search. Thread-safe. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy SerializedDVStrategy PointVectorStrategy 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) Namespace : Lucene.Net.Spatial Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialStrategy Constructors | Improve this Doc View Source SpatialStrategy(SpatialContext, String) Constructs the spatial strategy with its mandatory arguments. Declaration protected SpatialStrategy(SpatialContext ctx, string fieldName) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.String fieldName Fields | Improve this Doc View Source m_ctx Declaration protected readonly SpatialContext m_ctx Field Value Type Description Spatial4n.Core.Context.SpatialContext Properties | Improve this Doc View Source FieldName The name of the field or the prefix of them if there are multiple fields needed internally. Declaration public virtual string FieldName { get; } Property Value Type Description System.String Not null. | Improve this Doc View Source SpatialContext Declaration public virtual SpatialContext SpatialContext { get; } Property Value Type Description Spatial4n.Core.Context.SpatialContext Methods | Improve this Doc View Source CreateIndexableFields(IShape) Returns the IndexableField(s) from the shape that are to be added to the Document . These fields are expected to be marked as indexed and not stored. Note: If you want to store the shape as a string for retrieval in search results, you could add it like this: document.Add(new StoredField(fieldName, ctx.ToString(shape))); The particular string representation used doesn't matter to the Strategy since it doesn't use it. Declaration public abstract Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Not null nor will it have null elements. Exceptions Type Condition System.NotSupportedException if given a shape incompatible with the strategy | Improve this Doc View Source MakeDistanceValueSource(IPoint) See MakeDistanceValueSource(IPoint, Double) called with a multiplier of 1.0 (i.e. units of degrees). Declaration public virtual ValueSource MakeDistanceValueSource(IPoint queryPoint) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint Returns Type Description ValueSource | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Make a ValueSource returning the distance between the center of the indexed shape and queryPoint . If there are multiple indexed shapes then the closest one is chosen. The result is multiplied by multiplier , which conveniently is used to get the desired units. Declaration public abstract ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource | Improve this Doc View Source MakeFilter(SpatialArgs) Make a Filter based principally on SpatialOperation and Spatial4n.Core.Shapes.IShape from the supplied args . If a subclasses implements MakeQuery(SpatialArgs) then this method could be simply: return new QueryWrapperFilter(MakeQuery(args).Query); Declaration public abstract Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Exceptions Type Condition System.NotSupportedException If the strategy does not support the shape in args . UnsupportedSpatialOperation If the strategy does not support the SpatialOperation in args . | Improve this Doc View Source MakeQuery(SpatialArgs) Make a Query based principally on SpatialOperation and Spatial4n.Core.Shapes.IShape from the supplied args . The default implementation is return new ConstantScoreQuery(MakeFilter(args)); Declaration public virtual ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Exceptions Type Condition System.NotSupportedException If the strategy does not support the shape in args . UnsupportedSpatialOperation If the strategy does not support the SpatialOperation in args . | Improve this Doc View Source MakeRecipDistanceValueSource(IShape) Returns a ValueSource with values ranging from 1 to 0, depending inversely on the distance from MakeDistanceValueSource(IPoint) . The formula is c / (d + c) where 'd' is the distance and 'c' is one tenth the distance to the farthest edge from the center. Thus the scores will be 1 for indexed points at the center of the query shape and as low as ~0.1 at its furthest edges. Declaration public ValueSource MakeRecipDistanceValueSource(IShape queryShape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape Returns Type Description ValueSource | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.CachingDoubleValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.CachingDoubleValueSource.html",
    "title": "Class CachingDoubleValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CachingDoubleValueSource Caches the doubleVal of another value source in a HashMap so that it is computed only once. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource CachingDoubleValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class CachingDoubleValueSource : ValueSource Constructors | Improve this Doc View Source CachingDoubleValueSource(ValueSource) Declaration public CachingDoubleValueSource(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_cache Declaration protected readonly IDictionary<int, double> m_cache Field Value Type Description System.Collections.Generic.IDictionary < System.Int32 , System.Double > | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.DistanceToShapeValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.DistanceToShapeValueSource.html",
    "title": "Class DistanceToShapeValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DistanceToShapeValueSource The distance from a provided Point to a Point retrieved from a ValueSource via ObjectVal(Int32) . The distance is calculated via a Spatial4n.Core.Distance.IDistanceCalculator . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ValueSource DistanceToShapeValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class DistanceToShapeValueSource : ValueSource Constructors | Improve this Doc View Source DistanceToShapeValueSource(ValueSource, IPoint, Double, SpatialContext) Declaration public DistanceToShapeValueSource(ValueSource shapeValueSource, IPoint queryPoint, double multiplier, SpatialContext ctx) Parameters Type Name Description ValueSource shapeValueSource Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Spatial4n.Core.Context.SpatialContext ctx Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.html",
    "title": "Namespace Lucene.Net.Spatial.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Util <!-- 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. --> Various spatial utilities. Classes CachingDoubleValueSource Caches the doubleVal of another value source in a HashMap so that it is computed only once. This is a Lucene.NET INTERNAL API, use at your own risk DistanceToShapeValueSource The distance from a provided Point to a Point retrieved from a ValueSource via ObjectVal(Int32) . The distance is calculated via a Spatial4n.Core.Distance.IDistanceCalculator . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ShapeFieldCache<T> Bounded Cache of Shapes associated with docIds. Note, multiple Shapes can be associated with a given docId WARNING: This class holds the data in an extremely inefficient manner as all Points are in memory as objects and they are stored in many Lists (one per document). So it works but doesn't scale. It will be replaced in the future. This is a Lucene.NET INTERNAL API, use at your own risk ShapeFieldCacheDistanceValueSource An implementation of the Lucene ValueSource that returns the spatial distance between an input point and a document's points in ShapeFieldCacheProvider<T> . The shortest distance is returned if a document has more than one point. This is a Lucene.NET INTERNAL API, use at your own risk ShapeFieldCacheProvider<T> Provides access to a ShapeFieldCache<T> for a given AtomicReader . If a Cache does not exist for the TextReader, then it is built by iterating over the all terms for a given field, reconstructing the Shape from them, and adding them to the Cache. ShapePredicateValueSource A boolean ValueSource that compares a shape from a provided ValueSource with a given Spatial4n.Core.Shapes.IShape and sees if it matches a given SpatialOperation (the predicate). This is a Lucene.NET EXPERIMENTAL API, use at your own risk ValueSourceFilter Filter that matches all documents where a ValueSource is in between a range of min and max inclusive. This is a Lucene.NET INTERNAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCache-1.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCache-1.html",
    "title": "Class ShapeFieldCache<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShapeFieldCache<T> Bounded Cache of Shapes associated with docIds. Note, multiple Shapes can be associated with a given docId WARNING: This class holds the data in an extremely inefficient manner as all Points are in memory as objects and they are stored in many Lists (one per document). So it works but doesn't scale. It will be replaced in the future. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ShapeFieldCache<T> 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.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapeFieldCache<T> where T : IShape Type Parameters Name Description T Constructors | Improve this Doc View Source ShapeFieldCache(Int32, Int32) Declaration public ShapeFieldCache(int length, int defaultLength) Parameters Type Name Description System.Int32 length System.Int32 defaultLength Properties | Improve this Doc View Source DefaultLength Declaration public int DefaultLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int32, T) Declaration public virtual void Add(int docid, T s) Parameters Type Name Description System.Int32 docid T s | Improve this Doc View Source GetShapes(Int32) Declaration public virtual IList<T> GetShapes(int docid) Parameters Type Name Description System.Int32 docid Returns Type Description System.Collections.Generic.IList <T>"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheDistanceValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheDistanceValueSource.html",
    "title": "Class ShapeFieldCacheDistanceValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShapeFieldCacheDistanceValueSource An implementation of the Lucene ValueSource that returns the spatial distance between an input point and a document's points in ShapeFieldCacheProvider<T> . The shortest distance is returned if a document has more than one point. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource ShapeFieldCacheDistanceValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapeFieldCacheDistanceValueSource : ValueSource Constructors | Improve this Doc View Source ShapeFieldCacheDistanceValueSource(SpatialContext, ShapeFieldCacheProvider<IPoint>, IPoint, Double) Declaration public ShapeFieldCacheDistanceValueSource(SpatialContext ctx, ShapeFieldCacheProvider<IPoint> provider, IPoint from, double multiplier) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx ShapeFieldCacheProvider < Spatial4n.Core.Shapes.IPoint > provider Spatial4n.Core.Shapes.IPoint from System.Double multiplier Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheProvider-1.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheProvider-1.html",
    "title": "Class ShapeFieldCacheProvider<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShapeFieldCacheProvider<T> Provides access to a ShapeFieldCache<T> for a given AtomicReader . If a Cache does not exist for the TextReader, then it is built by iterating over the all terms for a given field, reconstructing the Shape from them, and adding them to the Cache. Inheritance System.Object ShapeFieldCacheProvider<T> PointPrefixTreeFieldCacheProvider 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.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public abstract class ShapeFieldCacheProvider<T> where T : IShape Type Parameters Name Description T Constructors | Improve this Doc View Source ShapeFieldCacheProvider(String, Int32) Declaration public ShapeFieldCacheProvider(string shapeField, int defaultSize) Parameters Type Name Description System.String shapeField System.Int32 defaultSize Fields | Improve this Doc View Source m_defaultSize Declaration protected readonly int m_defaultSize Field Value Type Description System.Int32 | Improve this Doc View Source m_shapeField Declaration protected readonly string m_shapeField Field Value Type Description System.String Methods | Improve this Doc View Source GetCache(AtomicReader) Declaration public virtual ShapeFieldCache<T> GetCache(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description ShapeFieldCache <T> | Improve this Doc View Source ReadShape(BytesRef) Declaration protected abstract T ReadShape(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description T"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapePredicateValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapePredicateValueSource.html",
    "title": "Class ShapePredicateValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShapePredicateValueSource A boolean ValueSource that compares a shape from a provided ValueSource with a given Spatial4n.Core.Shapes.IShape and sees if it matches a given SpatialOperation (the predicate). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ValueSource ShapePredicateValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapePredicateValueSource : ValueSource Constructors | Improve this Doc View Source ShapePredicateValueSource(ValueSource, SpatialOperation, IShape) Declaration public ShapePredicateValueSource(ValueSource shapeValuesource, SpatialOperation op, IShape queryShape) Parameters Type Name Description ValueSource shapeValuesource Must yield Spatial4n.Core.Shapes.IShape instances from it's ObjectVal(doc). If null then the result is false. This is the left-hand (indexed) side. SpatialOperation op the predicate Spatial4n.Core.Shapes.IShape queryShape The shape on the right-hand (query) side. Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | 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 ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides 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 AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ValueSourceFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ValueSourceFilter.html",
    "title": "Class ValueSourceFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ValueSourceFilter Filter that matches all documents where a ValueSource is in between a range of min and max inclusive. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter ValueSourceFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) 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.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ValueSourceFilter : Filter Constructors | Improve this Doc View Source ValueSourceFilter(Filter, ValueSource, Double, Double) Declaration public ValueSourceFilter(Filter startingFilter, ValueSource source, double min, double max) Parameters Type Name Description Filter startingFilter ValueSource source System.Double min System.Double max Properties | Improve this Doc View Source Max Declaration public double Max { get; } Property Value Type Description System.Double | Improve this Doc View Source Min Declaration public double Min { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.DistanceValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.DistanceValueSource.html",
    "title": "Class DistanceValueSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DistanceValueSource An implementation of the Lucene ValueSource model that returns the distance for a PointVectorStrategy . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DistanceValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Vector Assembly : Lucene.Net.Spatial.dll Syntax public class DistanceValueSource : ValueSource Constructors | Improve this Doc View Source DistanceValueSource(PointVectorStrategy, IPoint, Double) Constructor. Declaration public DistanceValueSource(PointVectorStrategy strategy, IPoint from, double multiplier) Parameters Type Name Description PointVectorStrategy strategy Spatial4n.Core.Shapes.IPoint from System.Double multiplier Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Returns the ValueSource description. Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Returns the FunctionValues used by the function query. Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.html",
    "title": "Namespace Lucene.Net.Spatial.Vector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Vector <!-- 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. --> Spatial strategy that uses two fields. Classes DistanceValueSource An implementation of the Lucene ValueSource model that returns the distance for a PointVectorStrategy . This is a Lucene.NET INTERNAL API, use at your own risk PointVectorStrategy Simple SpatialStrategy which represents Points in two numeric DoubleField s. The Strategy's best feature is decent distance sort. Characteristics: Only indexes points; just one per field value. Can query by a rectangle or circle. Intersects and IsWithin is supported. Uses the FieldCache for MakeDistanceValueSource(IPoint) and for searching with a Circle. Implementation: This is a simple Strategy. Search works with NumericRangeQuery s on an x & y pair of fields. A Circle query does the same bbox query but adds a ValueSource filter on MakeDistanceValueSource(IPoint) . One performance shortcoming with this strategy is that a scenario involving both a search using a Circle and sort will result in calculations for the spatial distance being done twice -- once for the filter and second for the sort. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.PointVectorStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.PointVectorStrategy.html",
    "title": "Class PointVectorStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PointVectorStrategy Simple SpatialStrategy which represents Points in two numeric DoubleField s. The Strategy's best feature is decent distance sort. Characteristics: Only indexes points; just one per field value. Can query by a rectangle or circle. Intersects and IsWithin is supported. Uses the FieldCache for MakeDistanceValueSource(IPoint) and for searching with a Circle. Implementation: This is a simple Strategy. Search works with NumericRangeQuery s on an x & y pair of fields. A Circle query does the same bbox query but adds a ValueSource filter on MakeDistanceValueSource(IPoint) . One performance shortcoming with this strategy is that a scenario involving both a search using a Circle and sort will result in calculations for the spatial distance being done twice -- once for the filter and second for the sort. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PointVectorStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() 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.Spatial.Vector Assembly : Lucene.Net.Spatial.dll Syntax public class PointVectorStrategy : SpatialStrategy Constructors | Improve this Doc View Source PointVectorStrategy(SpatialContext, String) Declaration public PointVectorStrategy(SpatialContext ctx, string fieldNamePrefix) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.String fieldNamePrefix Fields | Improve this Doc View Source SUFFIX_X Declaration public static string SUFFIX_X Field Value Type Description System.String | Improve this Doc View Source SUFFIX_Y Declaration public static string SUFFIX_Y Field Value Type Description System.String Properties | Improve this Doc View Source PrecisionStep Declaration public virtual int PrecisionStep { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateIndexableFields(IPoint) See CreateIndexableFields(IShape) Declaration public virtual Field[] CreateIndexableFields(IPoint point) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint point Returns Type Description Field [] | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double) | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source MakeQuery(SpatialArgs) Declaration public override ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Overrides SpatialStrategy.MakeQuery(SpatialArgs) | Improve this Doc View Source MakeQueryDistanceScore(SpatialArgs) Declaration public virtual Query MakeQueryDistanceScore(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Query"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.CombineSuggestion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.CombineSuggestion.html",
    "title": "Class CombineSuggestion | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CombineSuggestion A suggestion generated by combining one or more original query terms Inheritance System.Object CombineSuggestion Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class CombineSuggestion Constructors | Improve this Doc View Source CombineSuggestion(SuggestWord, Int32[]) Creates a new CombineSuggestion from a suggestion and an array of term ids (referencing the indexes to the original terms that form this combined suggestion) Declaration public CombineSuggestion(SuggestWord suggestion, int[] originalTermIndexes) Parameters Type Name Description SuggestWord suggestion System.Int32 [] originalTermIndexes Properties | Improve this Doc View Source OriginalTermIndexes The indexes from the passed-in array of terms used to make this word combination Declaration public int[] OriginalTermIndexes { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Suggestion The word combination suggestion Declaration public SuggestWord Suggestion { get; } Property Value Type Description SuggestWord"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.html",
    "title": "Class DirectSpellChecker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirectSpellChecker Simple automaton-based spellchecker. Candidates are presented directly from the term dictionary, based on Levenshtein distance. This is an alternative to SpellChecker if you are using an edit-distance-like metric such as Levenshtein or JaroWinklerDistance . A practical benefit of this spellchecker is that it requires no additional datastructures (neither in RAM nor on disk) to do its work. Inheritance System.Object DirectSpellChecker Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class DirectSpellChecker Constructors | Improve this Doc View Source DirectSpellChecker() Creates a DirectSpellChecker with default configuration values Declaration public DirectSpellChecker() Fields | Improve this Doc View Source INTERNAL_LEVENSHTEIN The default StringDistance, Damerau-Levenshtein distance implemented internally via LevenshteinAutomata . Note: this is the fastest distance metric, because Damerau-Levenshtein is used to draw candidates from the term dictionary: this just re-uses the scoring. Declaration public static readonly IStringDistance INTERNAL_LEVENSHTEIN Field Value Type Description IStringDistance Properties | Improve this Doc View Source Accuracy Gets or sets the minimal accuracy required (default: 0.5f) from a StringDistance for a suggestion match. Declaration public virtual float Accuracy { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Comparer Gets or sets the comparer for sorting suggestions. The default is DEFAULT_COMPARER Declaration public virtual IComparer<SuggestWord> Comparer { get; set; } Property Value Type Description System.Collections.Generic.IComparer < SuggestWord > | Improve this Doc View Source Distance Gets or sets the string distance metric. The default is INTERNAL_LEVENSHTEIN . Note: because this spellchecker draws its candidates from the term dictionary using Damerau-Levenshtein, it works best with an edit-distance-like string metric. If you use a different metric than the default, you might want to consider increasing MaxInspections to draw more candidates for your metric to rank. Declaration public virtual IStringDistance Distance { get; set; } Property Value Type Description IStringDistance | Improve this Doc View Source LowerCaseTerms True if the spellchecker should lowercase terms (default: true) This is a convenience method, if your index field has more complicated analysis (such as StandardTokenizer removing punctuation), its probably better to turn this off, and instead run your query terms through your Analyzer first. If this option is not on, case differences count as an edit! Declaration public virtual bool LowerCaseTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerCaseTermsCulture Gets or sets the culture to use for lowercasing terms. Set to null (the default) to use System.Globalization.CultureInfo.CurrentCulture . Declaration public virtual CultureInfo LowerCaseTermsCulture { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source MaxEdits Gets or sets the maximum number of Levenshtein edit-distances to draw candidate terms from.This value can be 1 or 2. The default is 2. Note: a large number of spelling errors occur with an edit distance of 1, by setting this value to 1 you can increase both performance and precision at the cost of recall. Declaration public virtual int MaxEdits { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxInspections Get the maximum number of top-N inspections per suggestion. Increasing this number can improve the accuracy of results, at the cost of performance. Declaration public virtual int MaxInspections { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxQueryFrequency Gets or sets the maximum threshold (default: 0.01f) of documents a query term can appear in order to provide suggestions. Very high-frequency terms are typically spelled correctly. Additionally, this can increase performance as it will do no work for the common case of correctly-spelled input terms. This can be specified as a relative percentage of documents such as 0.5f, or it can be specified as an absolute whole document frequency, such as 4f. Absolute document frequencies may not be fractional. Declaration public virtual float MaxQueryFrequency { get; set; } Property Value Type Description System.Single | Improve this Doc View Source MinPrefix Gets or sets the minimal number of characters that must match exactly. This can improve both performance and accuracy of results, as misspellings are commonly not the first character. Declaration public virtual int MinPrefix { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinQueryLength Gets or sets the minimum length of a query term (default: 4) needed to return suggestions. Very short query terms will often cause only bad suggestions with any distance metric. Declaration public virtual int MinQueryLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ThresholdFrequency Gets or sets the minimal threshold of documents a term must appear for a match. This can improve quality by only suggesting high-frequency terms. Note that very high values might decrease performance slightly, by forcing the spellchecker to draw more candidates from the term dictionary, but a practical value such as 1 can be very useful towards improving quality. This can be specified as a relative percentage of documents such as 0.5f, or it can be specified as an absolute whole document frequency, such as 4f. Absolute document frequencies may not be fractional. Declaration public virtual float ThresholdFrequency { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader) Calls SuggestSimilar(Term, Int32, IndexReader, SuggestMode) SuggestSimilar(term, numSug, ir, SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX) Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir) Parameters Type Name Description Term term System.Int32 numSug IndexReader ir Returns Type Description SuggestWord [] | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, SuggestMode) Calls SuggestSimilar(Term, Int32, IndexReader, SuggestMode, Single) SuggestSimilar(term, numSug, ir, suggestMode, this.accuracy) Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir, SuggestMode suggestMode) Parameters Type Name Description Term term System.Int32 numSug IndexReader ir SuggestMode suggestMode Returns Type Description SuggestWord [] | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, SuggestMode, Single) Suggest similar words. Unlike SpellChecker , the similarity used to fetch the most relevant terms is an edit distance, therefore typically a low value for numSug will work very well. Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir, SuggestMode suggestMode, float accuracy) Parameters Type Name Description Term term Term you want to spell check on System.Int32 numSug the maximum number of suggested words IndexReader ir IndexReader to find terms from SuggestMode suggestMode specifies when to return suggested words System.Single accuracy return only suggested words that match with this similarity Returns Type Description SuggestWord [] sorted list of the suggested words according to the comparer Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, Int32, Int32, Single, CharsRef) Provide spelling corrections based on several parameters. Declaration protected virtual IEnumerable<DirectSpellChecker.ScoreTerm> SuggestSimilar(Term term, int numSug, IndexReader ir, int docfreq, int editDistance, float accuracy, CharsRef spare) Parameters Type Name Description Term term The term to suggest spelling corrections for System.Int32 numSug The maximum number of spelling corrections IndexReader ir The index reader to fetch the candidate spelling corrections from System.Int32 docfreq The minimum document frequency a potential suggestion need to have in order to be included System.Int32 editDistance The maximum edit distance candidates are allowed to have System.Single accuracy The minimum accuracy a suggested spelling correction needs to have in order to be included CharsRef spare a chars scratch Returns Type Description System.Collections.Generic.IEnumerable < DirectSpellChecker.ScoreTerm > a collection of spelling corrections sorted by ScoreTerm 's natural order. Exceptions Type Condition System.IO.IOException If I/O related errors occur See Also LevenshteinAutomata FuzzyTermsEnum"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.ScoreTerm.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.ScoreTerm.html",
    "title": "Class DirectSpellChecker.ScoreTerm | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirectSpellChecker.ScoreTerm Holds a spelling correction for internal usage inside DirectSpellChecker . Inheritance System.Object DirectSpellChecker.ScoreTerm Implements System.IComparable < DirectSpellChecker.ScoreTerm > 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.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax protected class ScoreTerm : IComparable<DirectSpellChecker.ScoreTerm> Constructors | Improve this Doc View Source ScoreTerm() Constructor. Declaration public ScoreTerm() Properties | Improve this Doc View Source Boost The boost representing the similarity from the FuzzyTermsEnum (internal similarity score) Declaration public float Boost { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Docfreq The df of the spellcheck correction. Declaration public int Docfreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score The similarity score. Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Term The actual spellcheck correction. Declaration public BytesRef Term { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source TermAsString The spellcheck correction represented as string, can be null . Declaration public string TermAsString { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(DirectSpellChecker.ScoreTerm) Declaration public virtual int CompareTo(DirectSpellChecker.ScoreTerm other) Parameters Type Name Description DirectSpellChecker.ScoreTerm 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() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.HighFrequencyDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.HighFrequencyDictionary.html",
    "title": "Class HighFrequencyDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HighFrequencyDictionary HighFrequencyDictionary: terms taken from the given field of a Lucene index, which appear in a number of documents above a given threshold. Threshold is a value in [0..1] representing the minimum number of documents (of the total) where a term should appear. Based on LuceneDictionary . Inheritance System.Object HighFrequencyDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class HighFrequencyDictionary : IDictionary Constructors | Improve this Doc View Source HighFrequencyDictionary(IndexReader, String, Single) Creates a new Dictionary, pulling source terms from the specified field in the provided reader . Terms appearing in less than thresh percentage of documents will be excluded. Declaration public HighFrequencyDictionary(IndexReader reader, string field, float thresh) Parameters Type Name Description IndexReader reader System.String field System.Single thresh Methods | Improve this Doc View Source GetEntryIterator() Declaration public IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.html",
    "title": "Namespace Lucene.Net.Search.Spell | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Spell <!-- 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. --> Suggest alternate spellings for words. Also see the spell checker Wiki page . Classes CombineSuggestion A suggestion generated by combining one or more original query terms DirectSpellChecker Simple automaton-based spellchecker. Candidates are presented directly from the term dictionary, based on Levenshtein distance. This is an alternative to SpellChecker if you are using an edit-distance-like metric such as Levenshtein or JaroWinklerDistance . A practical benefit of this spellchecker is that it requires no additional datastructures (neither in RAM nor on disk) to do its work. DirectSpellChecker.ScoreTerm Holds a spelling correction for internal usage inside DirectSpellChecker . HighFrequencyDictionary HighFrequencyDictionary: terms taken from the given field of a Lucene index, which appear in a number of documents above a given threshold. Threshold is a value in [0..1] representing the minimum number of documents (of the total) where a term should appear. Based on LuceneDictionary . JaroWinklerDistance Similarity measure for short strings such as person names. See http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance LevensteinDistance Levenstein edit distance class. LuceneDictionary Lucene Dictionary: terms taken from the given field of a Lucene index. LuceneLevenshteinDistance Damerau-Levenshtein (optimal string alignment) implemented in a consistent way as Lucene's FuzzyTermsEnum with the transpositions option enabled. Notes: This metric treats full unicode codepoints as characters This metric scales raw edit distances into a floating point score based upon the shortest of the two terms Transpositions of two adjacent codepoints are treated as primitive edits. Edits are applied in parallel: for example, \"ab\" and \"bca\" have distance 3. NOTE: this class is not particularly efficient. It is only intended for merging results from multiple DirectSpellCheckers. NGramDistance N-Gram version of edit distance based on paper by Grzegorz Kondrak, \"N-gram similarity and distance\". Proceedings of the Twelfth International Conference on String Processing and Information Retrieval (SPIRE 2005), pp. 115-126, Buenos Aires, Argentina, November 2005. http://www.cs.ualberta.ca/~kondrak/papers/spire05.pdf This implementation uses the position-based optimization to compute partial matches of n-gram sub-strings and adds a null-character prefix of size n-1 so that the first character is contained in the same number of n-grams as a middle character. Null-character prefix matches are discounted so that strings with no matching characters will return a distance of 0. PlainTextDictionary Dictionary represented by a text file. Format allowed: 1 word per line: word1 word2 word3 SpellChecker Spell Checker class (Main class) (initially inspired by the David Spencer code). Example Usage (C#): SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); // To index a field of a user index: spellchecker.IndexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); // To index a file containing words: spellchecker.IndexDictionary(new PlainTextDictionary(new FileInfo(\"myfile.txt\"))); string[] suggestions = spellchecker.SuggestSimilar(\"misspelt\", 5); SuggestWord SuggestWord, used in suggestSimilar method in SpellChecker class. Default sort is first by score, then by frequency. SuggestWordFrequencyComparer Frequency first, then score. SuggestWordQueue Sorts SuggestWord instances SuggestWordScoreComparer Score first, then frequency TermFreqIteratorWrapper Wraps a BytesRefIterator as a TermFreqIterator, with all weights set to 1 WordBreakSpellChecker A spell checker whose sole function is to offer suggestions by combining multiple terms into one word and/or breaking terms into multiple words. Interfaces IDictionary A simple interface representing a Dictionary. A Dictionary here is a list of entries, where every entry consists of term, weight and payload. IStringDistance Interface for string distances. ITermFreqIterator Interface for enumerating term,weight pairs. Enums SuggestMode Set of strategies for suggesting related terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordBreakSpellChecker.BreakSuggestionSortMethod Determines the order to list word break suggestions"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IDictionary.html",
    "title": "Interface IDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IDictionary A simple interface representing a Dictionary. A Dictionary here is a list of entries, where every entry consists of term, weight and payload. Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface IDictionary Methods | Improve this Doc View Source GetEntryIterator() Returns an iterator over all the entries Declaration IInputIterator GetEntryIterator() Returns Type Description IInputIterator Iterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IStringDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IStringDistance.html",
    "title": "Interface IStringDistance | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IStringDistance Interface for string distances. Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface IStringDistance Methods | Improve this Doc View Source GetDistance(String, String) Returns a float between 0 and 1 based on how similar the specified strings are to one another. Returning a value of 1 means the specified strings are identical and 0 means the string are maximally different. Declaration float GetDistance(string s1, string s2) Parameters Type Name Description System.String s1 The first string. System.String s2 The second string. Returns Type Description System.Single a float between 0 and 1 based on how similar the specified strings are to one another."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.ITermFreqIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.ITermFreqIterator.html",
    "title": "Interface ITermFreqIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITermFreqIterator Interface for enumerating term,weight pairs. Inherited Members IBytesRefIterator.Next() IBytesRefIterator.Comparer Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface ITermFreqIterator : IBytesRefIterator Properties | Improve this Doc View Source Weight Gets the term's weight, higher numbers mean better suggestions. Declaration long Weight { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.JaroWinklerDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.JaroWinklerDistance.html",
    "title": "Class JaroWinklerDistance | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JaroWinklerDistance Similarity measure for short strings such as person names. See http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance Inheritance System.Object JaroWinklerDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class JaroWinklerDistance : IStringDistance Constructors | Improve this Doc View Source JaroWinklerDistance() Creates a new distance metric with the default threshold for the Jaro Winkler bonus (0.7) Declaration public JaroWinklerDistance() See Also Threshold Properties | Improve this Doc View Source Threshold Gets or sets the threshold used to determine when Winkler bonus should be used. The default value is 0.7. Set to a negative value to get the Jaro distance. Declaration public virtual float Threshold { get; set; } Property Value Type Description System.Single Methods | 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 GetDistance(String, String) Declaration public virtual float GetDistance(string s1, string s2) Parameters Type Name Description System.String s1 System.String s2 Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LevensteinDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LevensteinDistance.html",
    "title": "Class LevensteinDistance | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LevensteinDistance Levenstein edit distance class. Inheritance System.Object LevensteinDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LevensteinDistance : IStringDistance Constructors | Improve this Doc View Source LevensteinDistance() Optimized to run a bit faster than the static GetDistance(). In one benchmark times were 5.3sec using ctr vs 8.5sec w/ static method, thus 37% faster. Declaration public LevensteinDistance() Methods | 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 GetDistance(String, String) Declaration public float GetDistance(string target, string other) Parameters Type Name Description System.String target System.String other Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneDictionary.html",
    "title": "Class LuceneDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LuceneDictionary Lucene Dictionary: terms taken from the given field of a Lucene index. Inheritance System.Object LuceneDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class LuceneDictionary : IDictionary Constructors | Improve this Doc View Source LuceneDictionary(IndexReader, String) Creates a new Dictionary, pulling source terms from the specified field in the provided reader Declaration public LuceneDictionary(IndexReader reader, string field) Parameters Type Name Description IndexReader reader System.String field Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneLevenshteinDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneLevenshteinDistance.html",
    "title": "Class LuceneLevenshteinDistance | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LuceneLevenshteinDistance Damerau-Levenshtein (optimal string alignment) implemented in a consistent way as Lucene's FuzzyTermsEnum with the transpositions option enabled. Notes: This metric treats full unicode codepoints as characters This metric scales raw edit distances into a floating point score based upon the shortest of the two terms Transpositions of two adjacent codepoints are treated as primitive edits. Edits are applied in parallel: for example, \"ab\" and \"bca\" have distance 3. NOTE: this class is not particularly efficient. It is only intended for merging results from multiple DirectSpellCheckers. Inheritance System.Object LuceneLevenshteinDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LuceneLevenshteinDistance : IStringDistance Constructors | Improve this Doc View Source LuceneLevenshteinDistance() Creates a new comparer, mimicing the behavior of Lucene's internal edit distance. Declaration public LuceneLevenshteinDistance() Methods | Improve this Doc View Source GetDistance(String, String) Declaration public float GetDistance(string target, string other) Parameters Type Name Description System.String target System.String other Returns Type Description System.Single Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.NGramDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.NGramDistance.html",
    "title": "Class NGramDistance | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NGramDistance N-Gram version of edit distance based on paper by Grzegorz Kondrak, \"N-gram similarity and distance\". Proceedings of the Twelfth International Conference on String Processing and Information Retrieval (SPIRE 2005), pp. 115-126, Buenos Aires, Argentina, November 2005. http://www.cs.ualberta.ca/~kondrak/papers/spire05.pdf This implementation uses the position-based optimization to compute partial matches of n-gram sub-strings and adds a null-character prefix of size n-1 so that the first character is contained in the same number of n-grams as a middle character. Null-character prefix matches are discounted so that strings with no matching characters will return a distance of 0. Inheritance System.Object NGramDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class NGramDistance : IStringDistance Constructors | Improve this Doc View Source NGramDistance() Creates an N-Gram distance measure using n-grams of size 2. Declaration public NGramDistance() | Improve this Doc View Source NGramDistance(Int32) Creates an N-Gram distance measure using n-grams of the specified size. Declaration public NGramDistance(int size) Parameters Type Name Description System.Int32 size The size of the n-gram to be used to compute the string distance. Methods | 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 GetDistance(String, String) Declaration public virtual float GetDistance(string source, string target) Parameters Type Name Description System.String source System.String target Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.PlainTextDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.PlainTextDictionary.html",
    "title": "Class PlainTextDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PlainTextDictionary Dictionary represented by a text file. Format allowed: 1 word per line: word1 word2 word3 Inheritance System.Object PlainTextDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class PlainTextDictionary : IDictionary Constructors | Improve this Doc View Source PlainTextDictionary(FileInfo) Creates a dictionary based on a File. NOTE: content is treated as UTF-8 Declaration public PlainTextDictionary(FileInfo file) Parameters Type Name Description System.IO.FileInfo file | Improve this Doc View Source PlainTextDictionary(Stream) Creates a dictionary based on an inputstream. NOTE: content is treated as UTF-8 Declaration public PlainTextDictionary(Stream dictFile) Parameters Type Name Description System.IO.Stream dictFile | Improve this Doc View Source PlainTextDictionary(TextReader) Creates a dictionary based on a reader. Declaration public PlainTextDictionary(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SpellChecker.html",
    "title": "Class SpellChecker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpellChecker Spell Checker class (Main class) (initially inspired by the David Spencer code). Example Usage (C#): SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); // To index a field of a user index: spellchecker.IndexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); // To index a file containing words: spellchecker.IndexDictionary(new PlainTextDictionary(new FileInfo(\"myfile.txt\"))); string[] suggestions = spellchecker.SuggestSimilar(\"misspelt\", 5); Inheritance System.Object SpellChecker 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.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SpellChecker : IDisposable Constructors | Improve this Doc View Source SpellChecker(Directory) Use the given directory as a spell checker index with a LevensteinDistance as the default StringDistance . The directory is created if it doesn't exist yet. Declaration public SpellChecker(Directory spellIndex) Parameters Type Name Description Directory spellIndex the spell index directory Exceptions Type Condition System.IO.IOException if spellchecker can not open the directory | Improve this Doc View Source SpellChecker(Directory, IStringDistance) Use the given directory as a spell checker index. The directory is created if it doesn't exist yet. Declaration public SpellChecker(Directory spellIndex, IStringDistance sd) Parameters Type Name Description Directory spellIndex the spell index directory IStringDistance sd the StringDistance measurement to use Exceptions Type Condition System.IO.IOException if Spellchecker can not open the directory | Improve this Doc View Source SpellChecker(Directory, IStringDistance, IComparer<SuggestWord>) Use the given directory as a spell checker index with the given IStringDistance measure and the given System.Collections.Generic.IComparer<T> for sorting the results. Declaration public SpellChecker(Directory spellIndex, IStringDistance sd, IComparer<SuggestWord> comparer) Parameters Type Name Description Directory spellIndex The spelling index IStringDistance sd The distance System.Collections.Generic.IComparer < SuggestWord > comparer The comparer Exceptions Type Condition System.IO.IOException if there is a problem opening the index Fields | Improve this Doc View Source DEFAULT_ACCURACY The default minimum score to use, if not specified by setting Accuracy or overriding with SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) . Declaration public const float DEFAULT_ACCURACY = 0.5F Field Value Type Description System.Single | Improve this Doc View Source F_WORD Field name for each word in the ngram index. Declaration public const string F_WORD = \"word\" Field Value Type Description System.String Properties | Improve this Doc View Source Accuracy Gets or sets the accuracy (minimum score) to be used, unless overridden in SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) , to decide whether a suggestion is included or not. Sets the accuracy 0 < minScore < 1; default DEFAULT_ACCURACY Declaration public virtual float Accuracy { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Comparer Gets or sets the System.Collections.Generic.IComparer<T> for the SuggestWordQueue . Declaration public virtual IComparer<SuggestWord> Comparer { get; set; } Property Value Type Description System.Collections.Generic.IComparer < SuggestWord > | Improve this Doc View Source StringDistance Gets or sets the IStringDistance implementation for this SpellChecker instance. Declaration public virtual IStringDistance StringDistance { get; set; } Property Value Type Description IStringDistance Methods | Improve this Doc View Source ClearIndex() Removes all terms from the spell check index. Declaration public virtual void ClearIndex() Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. System.ObjectDisposedException if the Spellchecker is already closed | Improve this Doc View Source Dispose() Dispose the underlying IndexSearcher used by this SpellChecker Declaration public void Dispose() Exceptions Type Condition System.IO.IOException if the close operation causes an System.IO.IOException System.ObjectDisposedException if the SpellChecker is already disposed | Improve this Doc View Source Exist(String) Check whether the word exists in the index. Declaration public virtual bool Exist(string word) Parameters Type Name Description System.String word word to check Returns Type Description System.Boolean true if the word exists in the index Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. System.ObjectDisposedException if the SpellChecker is already disposed | Improve this Doc View Source IndexDictionary(IDictionary, IndexWriterConfig, Boolean) Indexes the data from the given IDictionary . Declaration public void IndexDictionary(IDictionary dict, IndexWriterConfig config, bool fullMerge) Parameters Type Name Description IDictionary dict Dictionary to index IndexWriterConfig config IndexWriterConfig to use System.Boolean fullMerge whether or not the spellcheck index should be fully merged Exceptions Type Condition System.ObjectDisposedException if the SpellChecker is already disposed System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source SetSpellIndex(Directory) Sets a different index as the spell checker index or re-open the existing index if spellIndex is the same value as given in the constructor. Declaration public virtual void SetSpellIndex(Directory spellIndexDir) Parameters Type Name Description Directory spellIndexDir the spell directory to use Exceptions Type Condition System.ObjectDisposedException if the Spellchecker is already closed System.IO.IOException if spellchecker can not open the directory | Improve this Doc View Source SuggestSimilar(String, Int32) Suggest similar words. As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index Exceptions Type Condition System.IO.IOException if the underlying index throws an System.IO.IOException System.ObjectDisposedException if the Spellchecker is already disposed See Also SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) | Improve this Doc View Source SuggestSimilar(String, Int32, IndexReader, String, SuggestMode) Calls SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) SuggestSimilar(word, numSug, ir, suggestMode, field, this.accuracy) Declaration public virtual string[] SuggestSimilar(string word, int numSug, IndexReader ir, string field, SuggestMode suggestMode) Parameters Type Name Description System.String word System.Int32 numSug IndexReader ir System.String field SuggestMode suggestMode Returns Type Description System.String [] | Improve this Doc View Source SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) Suggest similar words (optionally restricted to a field of an index). As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug, IndexReader ir, string field, SuggestMode suggestMode, float accuracy) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words IndexReader ir the indexReader of the user index (can be null see field param) System.String field the field of the user index: if field is not null, the suggested words are restricted to the words present in this field. SuggestMode suggestMode (NOTE: if indexReader==null and/or field==null, then this is overridden with SuggestMode.SUGGEST_ALWAYS) System.Single accuracy The minimum score a suggestion must have in order to qualify for inclusion in the results Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index Exceptions Type Condition System.IO.IOException if the underlying index throws an System.IO.IOException System.ObjectDisposedException if the SpellChecker is already disposed | Improve this Doc View Source SuggestSimilar(String, Int32, Single) Suggest similar words. As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug, float accuracy) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words System.Single accuracy The minimum score a suggestion must have in order to qualify for inclusion in the results Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index Exceptions Type Condition System.IO.IOException if the underlying index throws an System.IO.IOException System.ObjectDisposedException if the Spellchecker is already disposed See Also SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestMode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestMode.html",
    "title": "Enum SuggestMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum SuggestMode Set of strategies for suggesting related terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public enum SuggestMode Fields Name Description SUGGEST_ALWAYS Always attempt to offer suggestions (however, other parameters may limit suggestions. For example, see MaxQueryFrequency ). SUGGEST_MORE_POPULAR Return only suggested words that are as frequent or more frequent than the searched word SUGGEST_WHEN_NOT_IN_INDEX Generate suggestions only for terms not in the index (default)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWord.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWord.html",
    "title": "Class SuggestWord | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SuggestWord SuggestWord, used in suggestSimilar method in SpellChecker class. Default sort is first by score, then by frequency. Inheritance System.Object SuggestWord Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestWord Constructors | Improve this Doc View Source SuggestWord() Creates a new empty suggestion with null text. Declaration public SuggestWord() Properties | Improve this Doc View Source Freq The freq of the word Declaration public int Freq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score the score of the word Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source String the suggested word Declaration public string String { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordFrequencyComparer.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordFrequencyComparer.html",
    "title": "Class SuggestWordFrequencyComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SuggestWordFrequencyComparer Frequency first, then score. Inheritance System.Object SuggestWordFrequencyComparer Implements System.Collections.Generic.IComparer < SuggestWord > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SuggestWordFrequencyComparer : IComparer<SuggestWord> Constructors | Improve this Doc View Source SuggestWordFrequencyComparer() Creates a new comparer that will compare by Freq , then by Score , then by String . Declaration public SuggestWordFrequencyComparer() Methods | Improve this Doc View Source Compare(SuggestWord, SuggestWord) Declaration public virtual int Compare(SuggestWord first, SuggestWord second) Parameters Type Name Description SuggestWord first SuggestWord second Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordQueue.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordQueue.html",
    "title": "Class SuggestWordQueue | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SuggestWordQueue Sorts SuggestWord instances Inheritance System.Object PriorityQueue < SuggestWord > SuggestWordQueue Inherited Members PriorityQueue<SuggestWord>.GetSentinelObject() PriorityQueue<SuggestWord>.Add(SuggestWord) PriorityQueue<SuggestWord>.InsertWithOverflow(SuggestWord) PriorityQueue<SuggestWord>.Top PriorityQueue<SuggestWord>.Pop() PriorityQueue<SuggestWord>.UpdateTop() PriorityQueue<SuggestWord>.Count PriorityQueue<SuggestWord>.Clear() PriorityQueue<SuggestWord>.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.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestWordQueue : PriorityQueue<SuggestWord> Constructors | Improve this Doc View Source SuggestWordQueue(Int32) Use the DEFAULT_COMPARER Declaration public SuggestWordQueue(int size) Parameters Type Name Description System.Int32 size The size of the queue | Improve this Doc View Source SuggestWordQueue(Int32, IComparer<SuggestWord>) Specify the size of the queue and the comparer to use for sorting. Declaration public SuggestWordQueue(int size, IComparer<SuggestWord> comparer) Parameters Type Name Description System.Int32 size The size System.Collections.Generic.IComparer < SuggestWord > comparer The comparer. Fields | Improve this Doc View Source DEFAULT_COMPARER Default comparer: score then frequency. Declaration public static readonly IComparer<SuggestWord> DEFAULT_COMPARER Field Value Type Description System.Collections.Generic.IComparer < SuggestWord > See Also SuggestWordScoreComparer Methods | Improve this Doc View Source LessThan(SuggestWord, SuggestWord) Declaration protected override bool LessThan(SuggestWord wa, SuggestWord wb) Parameters Type Name Description SuggestWord wa SuggestWord wb Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Search.Spell.SuggestWord>.LessThan(Lucene.Net.Search.Spell.SuggestWord, Lucene.Net.Search.Spell.SuggestWord) See Also SuggestWordScoreComparer SuggestWordFrequencyComparer"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordScoreComparer.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordScoreComparer.html",
    "title": "Class SuggestWordScoreComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SuggestWordScoreComparer Score first, then frequency Inheritance System.Object SuggestWordScoreComparer Implements System.Collections.Generic.IComparer < SuggestWord > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SuggestWordScoreComparer : IComparer<SuggestWord> Constructors | Improve this Doc View Source SuggestWordScoreComparer() Creates a new comparer that will compare by Score , then by Freq , then by String . Declaration public SuggestWordScoreComparer() Methods | Improve this Doc View Source Compare(SuggestWord, SuggestWord) Declaration public virtual int Compare(SuggestWord first, SuggestWord second) Parameters Type Name Description SuggestWord first SuggestWord second Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.TermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.TermFreqIteratorWrapper.html",
    "title": "Class TermFreqIteratorWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermFreqIteratorWrapper Wraps a BytesRefIterator as a TermFreqIterator, with all weights set to 1 Inheritance System.Object TermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class TermFreqIteratorWrapper : ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source TermFreqIteratorWrapper(IBytesRefIterator) Creates a new wrapper, wrapping the specified iterator and specifying a weight value of 1 for all terms. Declaration public TermFreqIteratorWrapper(IBytesRefIterator wrapped) Parameters Type Name Description IBytesRefIterator wrapped Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.BreakSuggestionSortMethod.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.BreakSuggestionSortMethod.html",
    "title": "Enum WordBreakSpellChecker.BreakSuggestionSortMethod | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum WordBreakSpellChecker.BreakSuggestionSortMethod Determines the order to list word break suggestions Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public enum BreakSuggestionSortMethod Fields Name Description NUM_CHANGES_THEN_MAX_FREQUENCY Sort by Number of word breaks, then by the Maximum of all the component term's frequencies NUM_CHANGES_THEN_SUMMED_FREQUENCY Sort by Number of word breaks, then by the Sum of all the component term's frequencies"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.html",
    "title": "Class WordBreakSpellChecker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WordBreakSpellChecker A spell checker whose sole function is to offer suggestions by combining multiple terms into one word and/or breaking terms into multiple words. Inheritance System.Object WordBreakSpellChecker Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class WordBreakSpellChecker Constructors | Improve this Doc View Source WordBreakSpellChecker() Creates a new spellchecker with default configuration values Declaration public WordBreakSpellChecker() See Also MaxChanges MaxCombineWordLength MaxEvaluations MinBreakWordLength MinSuggestionFrequency Fields | Improve this Doc View Source SEPARATOR_TERM Term that can be used to prohibit adjacent terms from being combined Declaration public static readonly Term SEPARATOR_TERM Field Value Type Description Term Properties | Improve this Doc View Source MaxChanges Gets or sets the maximum numbers of changes (word breaks or combinations) to make on the original term(s). Default=1. Declaration public virtual int MaxChanges { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxCombineWordLength Gets or sets the maximum length of a suggestion made by combining 1 or more original terms. Default=20. Declaration public virtual int MaxCombineWordLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxEvaluations Gets or sets the maximum number of word combinations to evaluate. Default=1000. A higher value might improve result quality. A lower value might improve performance. Declaration public virtual int MaxEvaluations { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinBreakWordLength Gets or sets the minimum length to break words down to. Default=1. Declaration public virtual int MinBreakWordLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinSuggestionFrequency Gets or sets the minimum frequency a term must have to be included as part of a suggestion. Default=1 Not applicable when used with SUGGEST_MORE_POPULAR Declaration public virtual int MinSuggestionFrequency { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source SuggestWordBreaks(Term, Int32, IndexReader, SuggestMode, WordBreakSpellChecker.BreakSuggestionSortMethod) Generate suggestions by breaking the passed-in term into multiple words. The scores returned are equal to the number of word breaks needed so a lower score is generally preferred over a higher score. Declaration public virtual SuggestWord[][] SuggestWordBreaks(Term term, int maxSuggestions, IndexReader ir, SuggestMode suggestMode = SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX, WordBreakSpellChecker.BreakSuggestionSortMethod sortMethod = WordBreakSpellChecker.BreakSuggestionSortMethod.NUM_CHANGES_THEN_MAX_FREQUENCY) Parameters Type Name Description Term term System.Int32 maxSuggestions IndexReader ir SuggestMode suggestMode default = SUGGEST_WHEN_NOT_IN_INDEX WordBreakSpellChecker.BreakSuggestionSortMethod sortMethod default = NUM_CHANGES_THEN_MAX_FREQUENCY Returns Type Description SuggestWord [][] one or more arrays of words formed by breaking up the original term Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source SuggestWordCombinations(Term[], Int32, IndexReader, SuggestMode) Generate suggestions by combining one or more of the passed-in terms into single words. The returned CombineSuggestion contains both a SuggestWord and also an array detailing which passed-in terms were involved in creating this combination. The scores returned are equal to the number of word combinations needed, also one less than the length of the array OriginalTermIndexes . Generally, a suggestion with a lower score is preferred over a higher score. To prevent two adjacent terms from being combined (for instance, if one is mandatory and the other is prohibited), separate the two terms with SEPARATOR_TERM When suggestMode equals SUGGEST_WHEN_NOT_IN_INDEX , each suggestion will include at least one term not in the index. When suggestMode equals SUGGEST_MORE_POPULAR , each suggestion will have the same, or better frequency than the most-popular included term. Declaration public virtual CombineSuggestion[] SuggestWordCombinations(Term[] terms, int maxSuggestions, IndexReader ir, SuggestMode suggestMode = SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX) Parameters Type Name Description Term [] terms System.Int32 maxSuggestions IndexReader ir SuggestMode suggestMode Returns Type Description CombineSuggestion [] an array of words generated by combining original terms Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingInfixSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingInfixSuggester.html",
    "title": "Class AnalyzingInfixSuggester | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzingInfixSuggester Analyzes the input text and then suggests matches based on prefix matches to any tokens in the indexed text. This also highlights the tokens that match. This suggester supports payloads. Matches are sorted only by the suggest weight; it would be nice to support blended score + weight sort in the future. This means this suggester best applies when there is a strong a-priori ranking of all the suggestions. This suggester supports contexts, however the contexts must be valid utf8 (arbitrary binary terms will not work). @lucene.experimental Inheritance System.Object Lookup AnalyzingInfixSuggester BlendedInfixSuggester Implements System.IDisposable Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class AnalyzingInfixSuggester : Lookup, IDisposable Constructors | Improve this Doc View Source AnalyzingInfixSuggester(LuceneVersion, Directory, Analyzer) Create a new instance, loading from a previously built AnalyzingInfixSuggester directory, if it exists. This directory must be private to the infix suggester (i.e., not an external Lucene index). Note that Dispose() will also dispose the provided directory. Declaration public AnalyzingInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer analyzer | Improve this Doc View Source AnalyzingInfixSuggester(LuceneVersion, Directory, Analyzer, Analyzer, Int32) Create a new instance, loading from a previously built AnalyzingInfixSuggester directory, if it exists. This directory must be private to the infix suggester (i.e., not an external Lucene index). Note that Dispose() will also dispose the provided directory. Declaration public AnalyzingInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer, int minPrefixChars) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 minPrefixChars Minimum number of leading characters before PrefixQuery is used (default 4). Prefixes shorter than this are indexed as character ngrams (increasing index size but making lookups faster). Fields | Improve this Doc View Source CONTEXTS_FIELD_NAME Field name used for the indexed context, as a StringField and a SortedSetDocValuesField , for filtering. Declaration protected const string CONTEXTS_FIELD_NAME = \"contexts\" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_MIN_PREFIX_CHARS Default minimum number of leading characters before PrefixQuery is used (4). Declaration public const int DEFAULT_MIN_PREFIX_CHARS = 4 Field Value Type Description System.Int32 | Improve this Doc View Source EXACT_TEXT_FIELD_NAME Field name used for the indexed text, as a StringField , for exact lookup. Declaration protected const string EXACT_TEXT_FIELD_NAME = \"exacttext\" Field Value Type Description System.String | Improve this Doc View Source m_indexAnalyzer Analyzer used at index time Declaration protected readonly Analyzer m_indexAnalyzer Field Value Type Description Analyzer | Improve this Doc View Source m_queryAnalyzer Analyzer used at search time Declaration protected readonly Analyzer m_queryAnalyzer Field Value Type Description Analyzer | Improve this Doc View Source m_searcherMgr IndexSearcher used for lookups. Declaration protected SearcherManager m_searcherMgr Field Value Type Description SearcherManager | Improve this Doc View Source TEXT_FIELD_NAME Field name used for the indexed text. Declaration protected const string TEXT_FIELD_NAME = \"text\" Field Value Type Description System.String Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) Adds a new suggestion. Be sure to use Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) instead if you want to replace a previous suggestion. After adding or updating a batch of new suggestions, you must call Refresh() in the end in order to see the suggestions in DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public virtual void Add(BytesRef text, IEnumerable<BytesRef> contexts, long weight, BytesRef payload) Parameters Type Name Description BytesRef text System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int64 weight BytesRef payload | Improve this Doc View Source AddNonMatch(StringBuilder, String) Called while highlighting a single result, to append a non-matching chunk of text from the suggestion to the provided fragments list. Declaration protected virtual void AddNonMatch(StringBuilder sb, string text) Parameters Type Name Description System.Text.StringBuilder sb The System.Text.StringBuilder to append to System.String text The text chunk to add | Improve this Doc View Source AddPrefixMatch(StringBuilder, String, String, String) Called while highlighting a single result, to append a matched prefix token, to the provided fragments list. Declaration protected virtual void AddPrefixMatch(StringBuilder sb, string surface, string analyzed, string prefixToken) Parameters Type Name Description System.Text.StringBuilder sb The System.Text.StringBuilder to append to System.String surface The fragment of the surface form (indexed during Build(IInputIterator) , corresponding to this match System.String analyzed The analyzed token that matched System.String prefixToken The prefix of the token that matched | Improve this Doc View Source AddWholeMatch(StringBuilder, String, String) Called while highlighting a single result, to append the whole matched token to the provided fragments list. Declaration protected virtual void AddWholeMatch(StringBuilder sb, string surface, string analyzed) Parameters Type Name Description System.Text.StringBuilder sb The System.Text.StringBuilder to append to System.String surface The surface form (original) text System.String analyzed The analyzed token corresponding to the surface form text | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iter) Parameters Type Name Description IInputIterator iter Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) Create the results based on the search hits. Can be overridden by subclass to add particular behavior (e.g. weight transformation) Declaration protected virtual IList<Lookup.LookupResult> CreateResults(IndexSearcher searcher, TopFieldDocs hits, int num, string charSequence, bool doHighlight, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description IndexSearcher searcher TopFieldDocs hits System.Int32 num System.String charSequence System.Boolean doHighlight System.Collections.Generic.IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Exceptions Type Condition System.IO.IOException If there are problems reading fields from the underlying Lucene index. | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Retrieve suggestions, specifying whether all terms must match ( allTermsRequired ) and whether the hits should be highlighted ( doHighlight ). Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source DoLookup(String, Int32, Boolean, Boolean) Lookup, without any context. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source FinishQuery(BooleanQuery, Boolean) Subclass can override this to tweak the Query before searching. Declaration protected virtual Query FinishQuery(BooleanQuery bq, bool allTermsRequired) Parameters Type Name Description BooleanQuery bq System.Boolean allTermsRequired Returns Type Description Query | Improve this Doc View Source GetDirectory(DirectoryInfo) Subclass can override to choose a specific Directory implementation. Declaration protected virtual Directory GetDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path Returns Type Description Directory | Improve this Doc View Source GetIndexWriterConfig(LuceneVersion, Analyzer, OpenMode) Override this to customize index settings, e.g. which codec to use. Declaration protected virtual IndexWriterConfig GetIndexWriterConfig(LuceneVersion matchVersion, Analyzer indexAnalyzer, OpenMode openMode) Parameters Type Name Description LuceneVersion matchVersion Analyzer indexAnalyzer OpenMode openMode Returns Type Description IndexWriterConfig | Improve this Doc View Source GetLastTokenQuery(String) This is called if the last token isn't ended (e.g. user did not type a space after it). Return an appropriate Query clause to add to the BooleanQuery . Declaration protected virtual Query GetLastTokenQuery(string token) Parameters Type Name Description System.String token Returns Type Description Query | Improve this Doc View Source GetSizeInBytes() Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source GetTextFieldType() Subclass can override this method to change the field type of the text field e.g. to change the index options Declaration protected virtual FieldType GetTextFieldType() Returns Type Description FieldType | Improve this Doc View Source Highlight(String, IEnumerable<String>, String) Override this method to customize the Object representing a single highlighted suggestions; the result is set on each HighlightKey member. Declaration protected virtual object Highlight(string text, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description System.String text System.Collections.Generic.IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description System.Object | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput out) Parameters Type Name Description DataInput out Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Refresh() Reopens the underlying searcher; it's best to \"batch up\" many additions/updates, and then call refresh once in the end. Declaration public virtual void Refresh() | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput in) Parameters Type Name Description DataOutput in Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) | Improve this Doc View Source Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) Updates a previous suggestion, matching the exact same text as before. Use this to change the weight or payload of an already added suggstion. If you know this text is not already present you can use Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) instead. After adding or updating a batch of new suggestions, you must call Refresh() in the end in order to see the suggestions in DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public virtual void Update(BytesRef text, IEnumerable<BytesRef> contexts, long weight, BytesRef payload) Parameters Type Name Description BytesRef text System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int64 weight BytesRef payload Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.html",
    "title": "Class AnalyzingSuggester | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzingSuggester Suggester that first analyzes the surface form, adds the analyzed form to a weighted FST, and then does the same thing at lookup time. This means lookup is based on the analyzed form while suggestions are still the surface form(s). This can result in powerful suggester functionality. For example, if you use an analyzer removing stop words, then the partial text \"ghost chr...\" could see the suggestion \"The Ghost of Christmas Past\". Note that position increments MUST NOT be preserved for this example to work, so you should call the constructor with Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.preservePositionIncrements parameter set to false If SynonymFilter is used to map wifi and wireless network to hotspot then the partial text \"wirele...\" could suggest \"wifi router\". Token normalization like stemmers, accent removal, etc., would allow suggestions to ignore such variations. When two matching suggestions have the same weight, they are tie-broken by the analyzed form. If their analyzed form is the same then the order is undefined. There are some limitations: A lookup from a query like \"net\" in English won't be any different than \"net \" (ie, user added a trailing space) because analyzers don't reflect when they've seen a token separator and when they haven't. If you're using StopFilter , and the user will type \"fast apple\", but so far all they've typed is \"fast a\", again because the analyzer doesn't convey whether it's seen a token separator after the \"a\", StopFilter will remove that \"a\" causing far more matches than you'd expect. Lookups with the empty string return no results instead of all results. @lucene.experimental Inheritance System.Object Lookup AnalyzingSuggester FuzzySuggester Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class AnalyzingSuggester : Lookup Constructors | Improve this Doc View Source AnalyzingSuggester(Analyzer) Calls AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Declaration public AnalyzingSuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source AnalyzingSuggester(Analyzer, Analyzer) Calls AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Declaration public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer | Improve this Doc View Source AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Creates a new suggester. Declaration public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, SuggesterOptions options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, bool preservePositionIncrements) Parameters Type Name Description Analyzer indexAnalyzer Analyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer Analyzer that will be used for analyzing query text during lookup SuggesterOptions options see EXACT_FIRST , PRESERVE_SEP System.Int32 maxSurfaceFormsPerAnalyzedForm Maximum number of surface forms to keep for a single analyzed form. When there are too many surface forms we discard the lowest weighted ones. System.Int32 maxGraphExpansions Maximum number of graph paths to expand from the analyzed form. Set this to -1 for no limit. System.Boolean preservePositionIncrements Whether position holes should appear in the automata Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source ConvertAutomaton(Automaton) Used by subclass to change the lookup automaton, if necessary. Declaration protected virtual Automaton ConvertAutomaton(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>) Returns all prefix paths to initialize the search. Declaration protected virtual IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> prefixPaths, Automaton lookupAutomaton, FST<PairOutputs<long?, BytesRef>.Pair> fst) Parameters Type Name Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> prefixPaths Automaton lookupAutomaton FST < PairOutputs.Pair <>> fst Returns Type Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.BlenderType.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.BlenderType.html",
    "title": "Enum BlendedInfixSuggester.BlenderType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum BlendedInfixSuggester.BlenderType The different types of blender. Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public enum BlenderType Fields Name Description CUSTOM Application dependent; override CalculateCoefficient(Int32) to compute it. POSITION_LINEAR weight (1 - 0.10 position) POSITION_RECIPROCAL weight/(1+position)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.html",
    "title": "Class BlendedInfixSuggester | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlendedInfixSuggester Extension of the AnalyzingInfixSuggester which transforms the weight after search to take into account the position of the searched term into the indexed text. Please note that it increases the number of elements searched and applies the ponderation after. It might be costly for long suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingInfixSuggester BlendedInfixSuggester Implements System.IDisposable Inherited Members AnalyzingInfixSuggester.TEXT_FIELD_NAME AnalyzingInfixSuggester.EXACT_TEXT_FIELD_NAME AnalyzingInfixSuggester.CONTEXTS_FIELD_NAME AnalyzingInfixSuggester.m_queryAnalyzer AnalyzingInfixSuggester.m_indexAnalyzer AnalyzingInfixSuggester.m_searcherMgr AnalyzingInfixSuggester.DEFAULT_MIN_PREFIX_CHARS AnalyzingInfixSuggester.GetIndexWriterConfig(LuceneVersion, Analyzer, OpenMode) AnalyzingInfixSuggester.GetDirectory(DirectoryInfo) AnalyzingInfixSuggester.Build(IInputIterator) AnalyzingInfixSuggester.Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) AnalyzingInfixSuggester.Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) AnalyzingInfixSuggester.Refresh() AnalyzingInfixSuggester.DoLookup(String, Int32, Boolean, Boolean) AnalyzingInfixSuggester.GetLastTokenQuery(String) AnalyzingInfixSuggester.FinishQuery(BooleanQuery, Boolean) AnalyzingInfixSuggester.Highlight(String, IEnumerable<String>, String) AnalyzingInfixSuggester.AddNonMatch(StringBuilder, String) AnalyzingInfixSuggester.AddWholeMatch(StringBuilder, String, String) AnalyzingInfixSuggester.AddPrefixMatch(StringBuilder, String, String, String) AnalyzingInfixSuggester.Store(DataOutput) AnalyzingInfixSuggester.Load(DataInput) AnalyzingInfixSuggester.Dispose() AnalyzingInfixSuggester.GetSizeInBytes() AnalyzingInfixSuggester.Count Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class BlendedInfixSuggester : AnalyzingInfixSuggester, IDisposable Constructors | Improve this Doc View Source BlendedInfixSuggester(LuceneVersion, Directory, Analyzer) Create a new instance, loading from a previously built directory, if it exists. Declaration public BlendedInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer analyzer | Improve this Doc View Source BlendedInfixSuggester(LuceneVersion, Directory, Analyzer, Analyzer, Int32, BlendedInfixSuggester.BlenderType, Int32) Create a new instance, loading from a previously built directory, if it exists. Declaration public BlendedInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer, int minPrefixChars, BlendedInfixSuggester.BlenderType blenderType, int numFactor) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 minPrefixChars BlendedInfixSuggester.BlenderType blenderType Type of blending strategy, see BlenderType for more precisions System.Int32 numFactor Factor to multiply the number of searched elements before ponderate Exceptions Type Condition System.IO.IOException If there are problems opening the underlying Lucene index. Fields | Improve this Doc View Source DEFAULT_NUM_FACTOR Default factor Declaration public static int DEFAULT_NUM_FACTOR Field Value Type Description System.Int32 | Improve this Doc View Source LINEAR_COEF Coefficient used for linear blending Declaration protected static double LINEAR_COEF Field Value Type Description System.Double Methods | Improve this Doc View Source CalculateCoefficient(Int32) Calculate the weight coefficient based on the position of the first matching word. Subclass should override it to adapt it to particular needs Declaration protected virtual double CalculateCoefficient(int position) Parameters Type Name Description System.Int32 position of the first matching word in text Returns Type Description System.Double the coefficient | Improve this Doc View Source CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) Declaration protected override IList<Lookup.LookupResult> CreateResults(IndexSearcher searcher, TopFieldDocs hits, int num, string key, bool doHighlight, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description IndexSearcher searcher TopFieldDocs hits System.Int32 num System.String key System.Boolean doHighlight System.Collections.Generic.IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) | Improve this Doc View Source GetTextFieldType() Declaration protected override FieldType GetTextFieldType() Returns Type Description FieldType Overrides AnalyzingInfixSuggester.GetTextFieldType() Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FreeTextSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FreeTextSuggester.html",
    "title": "Class FreeTextSuggester | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FreeTextSuggester Builds an ngram model from the text sent to Build(IInputIterator, Double) and predicts based on the last grams-1 tokens in the request sent to DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) . This tries to handle the \"long tail\" of suggestions for when the incoming query is a never before seen query string. Likely this suggester would only be used as a fallback, when the primary suggester fails to find any suggestions. Note that the weight for each suggestion is unused, and the suggestions are the analyzed forms (so your analysis process should normally be very \"light\"). This uses the stupid backoff language model to smooth scores across ngram models; see \"Large language models in machine translation\" for details. From DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) , the key of each result is the ngram token; the value is System.Int64.MaxValue * score (fixed point, cast to long). Divide by System.Int64.MaxValue to get the score back, which ranges from 0.0 to 1.0. onlyMorePopular is unused. @lucene.experimental Inheritance System.Object Lookup FreeTextSuggester Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class FreeTextSuggester : Lookup Constructors | Improve this Doc View Source FreeTextSuggester(Analyzer) Instantiate, using the provided analyzer for both indexing and lookup, using bigram model by default. Declaration public FreeTextSuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer) Instantiate, using the provided indexing and lookup analyzers, using bigram model by default. Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer, Int32) Instantiate, using the provided indexing and lookup analyzers, with the specified model (2 = bigram, 3 = trigram, etc.). Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int grams) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 grams | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer, Int32, Byte) Instantiate, using the provided indexing and lookup analyzers, and specified model (2 = bigram, 3 = trigram ,etc.). The separator is passed to SetTokenSeparator(String) to join multiple tokens into a single ngram token; it must be an ascii (7-bit-clean) byte. No input tokens should have this byte, otherwise System.ArgumentException is thrown. Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int grams, byte separator) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 grams System.Byte separator Fields | Improve this Doc View Source ALPHA The constant used for backoff smoothing; during lookup, this means that if a given trigram did not occur, and we backoff to the bigram, the overall score will be 0.4 times what the bigram model would have assigned. Declaration public const double ALPHA = 0.4 Field Value Type Description System.Double | Improve this Doc View Source CODEC_NAME Codec name used in the header for the saved model. Declaration public const string CODEC_NAME = \"freetextsuggest\" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_GRAMS By default we use a bigram model. Declaration public const int DEFAULT_GRAMS = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SEPARATOR The default character used to join multiple tokens into a single ngram token. The input tokens produced by the analyzer must not contain this character. Declaration public const byte DEFAULT_SEPARATOR = 30 Field Value Type Description System.Byte | Improve this Doc View Source VERSION_CURRENT Current version of the the saved model file format. Declaration public const int VERSION_CURRENT = 0 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Initial version of the the saved model file format. Declaration public const int VERSION_START = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source Build(IInputIterator, Double) Build the suggest index, using up to the specified amount of temporary RAM while building. Note that the weights for the suggestions are ignored. Declaration public virtual void Build(IInputIterator iterator, double ramBufferSizeMB) Parameters Type Name Description IInputIterator iterator System.Double ramBufferSizeMB | Improve this Doc View Source DoLookup(String, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32) Retrieve suggestions. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source DoLookup(String, Int32) Lookup, without any context. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, int num) Parameters Type Name Description System.String key System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.html",
    "title": "Class FSTUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTUtil Exposes a utility method to enumerate all paths intersecting an Automaton with an FST . Inheritance System.Object FSTUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public static class FSTUtil Methods | Improve this Doc View Source IntersectPrefixPaths<T>(Automaton, FST<T>) Enumerates all minimal prefix paths in the automaton that also intersect the FST , accumulating the FST end node and output for each path. Declaration public static IList<FSTUtil.Path<T>> IntersectPrefixPaths<T>(Automaton a, FST<T> fst) Parameters Type Name Description Automaton a FST <T> fst Returns Type Description System.Collections.Generic.IList < FSTUtil.Path <T>> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.Path-1.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.Path-1.html",
    "title": "Class FSTUtil.Path<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTUtil.Path<T> Holds a pair (automaton, fst) of states and accumulated output in the intersected machine. Inheritance System.Object FSTUtil.Path<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class Path<T> Type Parameters Name Description T Constructors | Improve this Doc View Source Path(State, FST.Arc<T>, T, Int32sRef) Sole constructor. Declaration public Path(State state, FST.Arc<T> fstNode, T output, Int32sRef input) Parameters Type Name Description State state FST.Arc <T> fstNode T output Int32sRef input Properties | Improve this Doc View Source FstNode Node in the FST where path ends: Declaration public FST.Arc<T> FstNode { get; } Property Value Type Description FST.Arc <T> | Improve this Doc View Source Input Input of the path so far: Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Output of the path so far: Declaration public T Output { get; set; } Property Value Type Description T | Improve this Doc View Source State Node in the automaton where path ends: Declaration public State State { get; } Property Value Type Description State"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.html",
    "title": "Class FuzzySuggester | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzySuggester Implements a fuzzy AnalyzingSuggester . The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false for the Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions parameter. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances are not supported. Note that the fuzzy distance is measured in \"byte space\" on the bytes returned by the TokenStream 's ITermToBytesRefAttribute , usually UTF8. By default the analyzed bytes must be at least 3 DEFAULT_MIN_FUZZY_LENGTH bytes before any edits are considered. Furthermore, the first 1 DEFAULT_NON_FUZZY_PREFIX byte is not allowed to be edited. We allow up to 1 DEFAULT_MAX_EDITS edit. If Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.unicodeAware parameter in the constructor is set to true, maxEdits, minFuzzyLength, transpositions and nonFuzzyPrefix are measured in Unicode code points (actual letters) instead of bytes. NOTE: This suggester does not boost suggestions that required no edits over suggestions that did require edits. This is a known limitation. Note: complex query analyzers can have a significant impact on the lookup performance. It's recommended to not use analyzers that drop or inject terms like synonyms to keep the complexity of the prefix intersection low for good lookup performance. At index time, complex analyzers can safely be used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingSuggester FuzzySuggester Inherited Members AnalyzingSuggester.GetSizeInBytes() AnalyzingSuggester.Build(IInputIterator) AnalyzingSuggester.Store(DataOutput) AnalyzingSuggester.Load(DataInput) AnalyzingSuggester.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) AnalyzingSuggester.Count AnalyzingSuggester.Get(String) Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class FuzzySuggester : AnalyzingSuggester Constructors | Improve this Doc View Source FuzzySuggester(Analyzer) Creates a FuzzySuggester instance initialized with default values. Declaration public FuzzySuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer The Analyzer used for this suggester. | Improve this Doc View Source FuzzySuggester(Analyzer, Analyzer) Creates a FuzzySuggester instance with an index & a query analyzer initialized with default values. Declaration public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer Analyzer that will be used for analyzing query text during lookup | Improve this Doc View Source FuzzySuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean, Int32, Boolean, Int32, Int32, Boolean) Creates a FuzzySuggester instance. Declaration public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, SuggesterOptions options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, bool preservePositionIncrements, int maxEdits, bool transpositions, int nonFuzzyPrefix, int minFuzzyLength, bool unicodeAware) Parameters Type Name Description Analyzer indexAnalyzer The Analyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer The Analyzer that will be used for analyzing query text during lookup SuggesterOptions options see EXACT_FIRST , PRESERVE_SEP System.Int32 maxSurfaceFormsPerAnalyzedForm Maximum number of surface forms to keep for a single analyzed form. When there are too many surface forms we discard the lowest weighted ones. System.Int32 maxGraphExpansions Maximum number of graph paths to expand from the analyzed form. Set this to -1 for no limit. System.Boolean preservePositionIncrements Whether position holes should appear in the automaton System.Int32 maxEdits must be >= 0 and <= MAXIMUM_SUPPORTED_DISTANCE . System.Boolean transpositions true if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. System.Int32 nonFuzzyPrefix length of common (non-fuzzy) prefix (see default DEFAULT_NON_FUZZY_PREFIX System.Int32 minFuzzyLength minimum length of lookup key before any edits are allowed (see default DEFAULT_MIN_FUZZY_LENGTH ) System.Boolean unicodeAware operate Unicode code points instead of bytes. Fields | Improve this Doc View Source DEFAULT_MAX_EDITS The default maximum number of edits for fuzzy suggestions. Declaration public const int DEFAULT_MAX_EDITS = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_FUZZY_LENGTH The default minimum length of the key passed to Lookup before any edits are allowed. Declaration public const int DEFAULT_MIN_FUZZY_LENGTH = 3 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_NON_FUZZY_PREFIX The default prefix length where edits are not allowed. Declaration public const int DEFAULT_NON_FUZZY_PREFIX = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TRANSPOSITIONS The default transposition value passed to LevenshteinAutomata Declaration public const bool DEFAULT_TRANSPOSITIONS = true Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_UNICODE_AWARE Measure Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.maxEdits , Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.minFuzzyLength , Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions , and Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.nonFuzzyPrefix parameters in Unicode code points (actual letters) instead of bytes. Declaration public const bool DEFAULT_UNICODE_AWARE = false Field Value Type Description System.Boolean Methods | Improve this Doc View Source ConvertAutomaton(Automaton) Declaration protected override Automaton ConvertAutomaton(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton Overrides AnalyzingSuggester.ConvertAutomaton(Automaton) | Improve this Doc View Source GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>) Declaration protected override IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> prefixPaths, Automaton lookupAutomaton, FST<PairOutputs<long?, BytesRef>.Pair> fst) Parameters Type Name Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> prefixPaths Automaton lookupAutomaton FST < PairOutputs.Pair <>> fst Returns Type Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> Overrides AnalyzingSuggester.GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Analyzing | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Analyzing <!-- 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. --> Analyzer based autosuggest. Classes AnalyzingInfixSuggester Analyzes the input text and then suggests matches based on prefix matches to any tokens in the indexed text. This also highlights the tokens that match. This suggester supports payloads. Matches are sorted only by the suggest weight; it would be nice to support blended score + weight sort in the future. This means this suggester best applies when there is a strong a-priori ranking of all the suggestions. This suggester supports contexts, however the contexts must be valid utf8 (arbitrary binary terms will not work). @lucene.experimental AnalyzingSuggester Suggester that first analyzes the surface form, adds the analyzed form to a weighted FST, and then does the same thing at lookup time. This means lookup is based on the analyzed form while suggestions are still the surface form(s). This can result in powerful suggester functionality. For example, if you use an analyzer removing stop words, then the partial text \"ghost chr...\" could see the suggestion \"The Ghost of Christmas Past\". Note that position increments MUST NOT be preserved for this example to work, so you should call the constructor with Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.preservePositionIncrements parameter set to false If SynonymFilter is used to map wifi and wireless network to hotspot then the partial text \"wirele...\" could suggest \"wifi router\". Token normalization like stemmers, accent removal, etc., would allow suggestions to ignore such variations. When two matching suggestions have the same weight, they are tie-broken by the analyzed form. If their analyzed form is the same then the order is undefined. There are some limitations: A lookup from a query like \"net\" in English won't be any different than \"net \" (ie, user added a trailing space) because analyzers don't reflect when they've seen a token separator and when they haven't. If you're using StopFilter , and the user will type \"fast apple\", but so far all they've typed is \"fast a\", again because the analyzer doesn't convey whether it's seen a token separator after the \"a\", StopFilter will remove that \"a\" causing far more matches than you'd expect. Lookups with the empty string return no results instead of all results. @lucene.experimental BlendedInfixSuggester Extension of the AnalyzingInfixSuggester which transforms the weight after search to take into account the position of the searched term into the indexed text. Please note that it increases the number of elements searched and applies the ponderation after. It might be costly for long suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FreeTextSuggester Builds an ngram model from the text sent to Build(IInputIterator, Double) and predicts based on the last grams-1 tokens in the request sent to DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) . This tries to handle the \"long tail\" of suggestions for when the incoming query is a never before seen query string. Likely this suggester would only be used as a fallback, when the primary suggester fails to find any suggestions. Note that the weight for each suggestion is unused, and the suggestions are the analyzed forms (so your analysis process should normally be very \"light\"). This uses the stupid backoff language model to smooth scores across ngram models; see \"Large language models in machine translation\" for details. From DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) , the key of each result is the ngram token; the value is System.Int64.MaxValue * score (fixed point, cast to long). Divide by System.Int64.MaxValue to get the score back, which ranges from 0.0 to 1.0. onlyMorePopular is unused. @lucene.experimental FSTUtil Exposes a utility method to enumerate all paths intersecting an Automaton with an FST . FSTUtil.Path<T> Holds a pair (automaton, fst) of states and accumulated output in the intersected machine. FuzzySuggester Implements a fuzzy AnalyzingSuggester . The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false for the Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions parameter. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances are not supported. Note that the fuzzy distance is measured in \"byte space\" on the bytes returned by the TokenStream 's ITermToBytesRefAttribute , usually UTF8. By default the analyzed bytes must be at least 3 DEFAULT_MIN_FUZZY_LENGTH bytes before any edits are considered. Furthermore, the first 1 DEFAULT_NON_FUZZY_PREFIX byte is not allowed to be edited. We allow up to 1 DEFAULT_MAX_EDITS edit. If Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.unicodeAware parameter in the constructor is set to true, maxEdits, minFuzzyLength, transpositions and nonFuzzyPrefix are measured in Unicode code points (actual letters) instead of bytes. NOTE: This suggester does not boost suggestions that required no edits over suggestions that did require edits. This is a known limitation. Note: complex query analyzers can have a significant impact on the lookup performance. It's recommended to not use analyzers that drop or inject terms like synonyms to keep the complexity of the prefix intersection low for good lookup performance. At index time, complex analyzers can safely be used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SuggestStopFilter Like StopFilter except it will not remove the last token if that token was not followed by some token separator. For example, a query 'find the' would preserve the 'the' since it was not followed by a space or punctuation or something, and mark it KEYWORD so future stemmers won't touch it either while a query like \"find the popsicle' would remove 'the' as a stopword. Normally you'd use the ordinary StopFilter in your indexAnalyzer and then this class in your queryAnalyzer, when using one of the analyzing suggesters. Enums BlendedInfixSuggester.BlenderType The different types of blender. SuggesterOptions LUCENENET specific type for specifying AnalyzingSuggester and FuzzySuggester options."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggesterOptions.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggesterOptions.html",
    "title": "Enum SuggesterOptions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum SuggesterOptions LUCENENET specific type for specifying AnalyzingSuggester and FuzzySuggester options. Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax [Flags] public enum SuggesterOptions Fields Name Description EXACT_FIRST Always return the exact match first, regardless of score. This has no performance impact but could result in low-quality suggestions. PRESERVE_SEP Preserve token separators when matching."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggestStopFilter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggestStopFilter.html",
    "title": "Class SuggestStopFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SuggestStopFilter Like StopFilter except it will not remove the last token if that token was not followed by some token separator. For example, a query 'find the' would preserve the 'the' since it was not followed by a space or punctuation or something, and mark it KEYWORD so future stemmers won't touch it either while a query like \"find the popsicle' would remove 'the' as a stopword. Normally you'd use the ordinary StopFilter in your indexAnalyzer and then this class in your queryAnalyzer, when using one of the analyzing suggesters. Inheritance System.Object AttributeSource TokenStream TokenFilter SuggestStopFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestStopFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SuggestStopFilter(TokenStream, CharArraySet) Sole constructor. Declaration public SuggestStopFilter(TokenStream input, CharArraySet stopWords) Parameters Type Name Description TokenStream input CharArraySet stopWords Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferedInputIterator.html",
    "title": "Class BufferedInputIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BufferedInputIterator This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferedInputIterator UnsortedInputIterator Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class BufferedInputIterator : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source BufferedInputIterator(IInputIterator) Creates a new iterator, buffering entries from the specified iterator Declaration public BufferedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source Fields | Improve this Doc View Source m_contextSets buffered context set entries Declaration protected IList<IEnumerable<BytesRef>> m_contextSets Field Value Type Description System.Collections.Generic.IList < System.Collections.Generic.IEnumerable < BytesRef >> | Improve this Doc View Source m_curPos current buffer position Declaration protected int m_curPos Field Value Type Description System.Int32 | Improve this Doc View Source m_entries buffered term entries Declaration protected BytesRefArray m_entries Field Value Type Description BytesRefArray | Improve this Doc View Source m_freqs buffered weights, parallel with m_entries Declaration protected long[] m_freqs Field Value Type Description System.Int64 [] | Improve this Doc View Source m_payloads buffered payload entries Declaration protected BytesRefArray m_payloads Field Value Type Description BytesRefArray Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferingTermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferingTermFreqIteratorWrapper.html",
    "title": "Class BufferingTermFreqIteratorWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BufferingTermFreqIteratorWrapper This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferingTermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class BufferingTermFreqIteratorWrapper : ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source BufferingTermFreqIteratorWrapper(ITermFreqIterator) Creates a new iterator, buffering entries from the specified iterator Declaration public BufferingTermFreqIteratorWrapper(ITermFreqIterator source) Parameters Type Name Description ITermFreqIterator source Fields | Improve this Doc View Source m_curPos current buffer position Declaration protected int m_curPos Field Value Type Description System.Int32 | Improve this Doc View Source m_entries buffered term entries Declaration protected BytesRefArray m_entries Field Value Type Description BytesRefArray | Improve this Doc View Source m_freqs buffered weights, parallel with m_entries Declaration protected long[] m_freqs Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.DocumentInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.DocumentInputIterator.html",
    "title": "Class DocumentDictionary.DocumentInputIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocumentDictionary.DocumentInputIterator Implements IInputIterator from stored fields. Inheritance System.Object DocumentDictionary.DocumentInputIterator Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax protected class DocumentInputIterator : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source DocumentInputIterator(DocumentDictionary, Boolean, Boolean) Creates an iterator over term, weight and payload fields from the lucene index. setting HasPayloads to false, implies an iterator over only term and weight. Declaration public DocumentInputIterator(DocumentDictionary outerInstance, bool hasPayloads, bool hasContexts) Parameters Type Name Description DocumentDictionary outerInstance System.Boolean hasPayloads System.Boolean hasContexts Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetWeight(Document, Int32) Returns the value of the Weight property for the current document. Retrieves the value for the Weight property if its stored (using doc ) or if its indexed as NumericDocValues (using docId ) for the document. If no value is found, then the weight is 0. Declaration protected virtual long GetWeight(Document doc, int docId) Parameters Type Name Description Document doc System.Int32 docId Returns Type Description System.Int64 | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.html",
    "title": "Class DocumentDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocumentDictionary Dictionary with terms, weights, payload (optional) and contexts (optional) information taken from stored/indexed fields in a Lucene index. NOTE: The term and (optionally) payload fields have to be stored The weight field can be stored or can be a NumericDocValues . If the weight field is not defined, the value of the weight is 0 if any of the term or (optionally) payload fields supplied do not have a value for a document, then the document is skipped by the dictionary Inheritance System.Object DocumentDictionary DocumentValueSourceDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class DocumentDictionary : IDictionary Constructors | Improve this Doc View Source DocumentDictionary(IndexReader, String, String) Creates a new dictionary with the contents of the fields named field for the terms and weightField for the weights that will be used for the corresponding terms. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField) Parameters Type Name Description IndexReader reader System.String field System.String weightField | Improve this Doc View Source DocumentDictionary(IndexReader, String, String, String) Creates a new dictionary with the contents of the fields named field for the terms, weightField for the weights that will be used for the the corresponding terms and payloadField for the corresponding payloads for the entry. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField, string payloadField) Parameters Type Name Description IndexReader reader System.String field System.String weightField System.String payloadField | Improve this Doc View Source DocumentDictionary(IndexReader, String, String, String, String) Creates a new dictionary with the contents of the fields named field for the terms, weightField for the weights that will be used for the the corresponding terms, payloadField for the corresponding payloads for the entry and contextsField for associated contexts. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField, string payloadField, string contextsField) Parameters Type Name Description IndexReader reader System.String field System.String weightField System.String payloadField System.String contextsField Fields | Improve this Doc View Source m_contextsField Field to read contexts from Declaration protected readonly string m_contextsField Field Value Type Description System.String | Improve this Doc View Source m_payloadField Field to read payload from Declaration protected readonly string m_payloadField Field Value Type Description System.String | Improve this Doc View Source m_reader IndexReader to load documents from Declaration protected readonly IndexReader m_reader Field Value Type Description IndexReader Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentValueSourceDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentValueSourceDictionary.html",
    "title": "Class DocumentValueSourceDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocumentValueSourceDictionary Dictionary with terms and optionally payload information taken from stored fields in a Lucene index. Similar to DocumentDictionary , except it obtains the weight of the terms in a document based on a ValueSource . NOTE: The term and (optionally) payload fields have to be stored if the term or (optionally) payload fields supplied do not have a value for a document, then the document is rejected by the dictionary In practice the ValueSource will likely be obtained using the lucene expression module. The following example shows how to create a ValueSource from a simple addition of two fields: Expression expression = JavascriptCompiler.Compile(\"f1 + f2\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"f1\", SortField.Type_e.LONG)); bindings.Add(new SortField(\"f2\", SortField.Type_e.LONG)); ValueSource valueSource = expression.GetValueSource(bindings); Inheritance System.Object DocumentDictionary DocumentValueSourceDictionary Implements IDictionary Inherited Members DocumentDictionary.m_reader DocumentDictionary.m_payloadField DocumentDictionary.m_contextsField System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class DocumentValueSourceDictionary : DocumentDictionary, IDictionary Constructors | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource) Creates a new dictionary with the contents of the fields named field for the terms and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource, String) Creates a new dictionary with the contents of the fields named field for the terms, payload for the corresponding payloads and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource, string payload) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource System.String payload | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource, String, String) Creates a new dictionary with the contents of the fields named field for the terms, payload for the corresponding payloads, contexts for the associated contexts and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource, string payload, string contexts) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource System.String payload System.String contexts Methods | Improve this Doc View Source GetEntryIterator() Declaration public override IInputIterator GetEntryIterator() Returns Type Description IInputIterator Overrides DocumentDictionary.GetEntryIterator() Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.EmptyInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.EmptyInputIterator.html",
    "title": "Class EmptyInputIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EmptyInputIterator Singleton IInputIterator that iterates over 0 BytesRefs. Inheritance System.Object EmptyInputIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public static class EmptyInputIterator Fields | Improve this Doc View Source Instance Declaration public static readonly IInputIterator Instance Field Value Type Description IInputIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.FileDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.FileDictionary.html",
    "title": "Class FileDictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FileDictionary Dictionary represented by a text file. Format allowed: 1 entry per line: An entry can be: suggestion suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter payload where the default Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter is DEFAULT_FIELD_DELIMITER (a tab) NOTE: In order to have payload enabled, the first entry has to have a payload If the weight for an entry is not specified then a value of 1 is used A payload cannot be specified without having the weight specified for an entry If the payload for an entry is not specified (assuming payload is enabled) then an empty payload is returned An entry cannot have more than two Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter s Example: word1 word2 TAB 100 TAB payload1 word3 TAB 101 word4 word3 TAB 102 Inheritance System.Object FileDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class FileDictionary : IDictionary Constructors | Improve this Doc View Source FileDictionary(Stream) Creates a dictionary based on an inputstream. Using DEFAULT_FIELD_DELIMITER as the field seperator in a line. NOTE: content is treated as UTF-8 Declaration public FileDictionary(Stream dictFile) Parameters Type Name Description System.IO.Stream dictFile | Improve this Doc View Source FileDictionary(Stream, String) Creates a dictionary based on an inputstream. Using fieldDelimiter to seperate out the fields in a line. NOTE: content is treated as UTF-8 Declaration public FileDictionary(Stream dictFile, string fieldDelimiter) Parameters Type Name Description System.IO.Stream dictFile System.String fieldDelimiter | Improve this Doc View Source FileDictionary(TextReader) Creates a dictionary based on a reader. Using DEFAULT_FIELD_DELIMITER as the field seperator in a line. Declaration public FileDictionary(TextReader reader) Parameters Type Name Description System.IO.TextReader reader | Improve this Doc View Source FileDictionary(TextReader, String) Creates a dictionary based on a reader. Using fieldDelimiter to seperate out the fields in a line. Declaration public FileDictionary(TextReader reader, string fieldDelimiter) Parameters Type Name Description System.IO.TextReader reader System.String fieldDelimiter Fields | Improve this Doc View Source DEFAULT_FIELD_DELIMITER Tab-delimited fields are most common thus the default, but one can override this via the constructor Declaration public const string DEFAULT_FIELD_DELIMITER = \"\\t\" Field Value Type Description System.String Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.ExternalRefSorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.ExternalRefSorter.html",
    "title": "Class ExternalRefSorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExternalRefSorter Builds and iterates over sequences stored on disk. Inheritance System.Object ExternalRefSorter Implements IBytesRefSorter 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.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class ExternalRefSorter : IBytesRefSorter, IDisposable Constructors | Improve this Doc View Source ExternalRefSorter(OfflineSorter) Will buffer all sequences to a temporary file and then sort (all on-disk). Declaration public ExternalRefSorter(OfflineSorter sort) Parameters Type Name Description OfflineSorter sort Properties | Improve this Doc View Source Comparer Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Declaration public virtual void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 | Improve this Doc View Source Dispose() Removes any written temporary files. Declaration public virtual void Dispose() | Improve this Doc View Source GetIterator() Declaration public virtual IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Implements IBytesRefSorter System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.Completion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.Completion.html",
    "title": "Class FSTCompletion.Completion | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTCompletion.Completion A single completion for a given key. Inheritance System.Object FSTCompletion.Completion Implements System.IComparable < FSTCompletion.Completion > 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) Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public sealed class Completion : IComparable<FSTCompletion.Completion> Properties | Improve this Doc View Source Bucket source bucket (weight) of the suggestion Declaration public int Bucket { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Utf8 UTF-8 bytes of the suggestion Declaration public BytesRef Utf8 { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source CompareTo(FSTCompletion.Completion) Declaration public int CompareTo(FSTCompletion.Completion o) Parameters Type Name Description FSTCompletion.Completion o Returns Type Description System.Int32 See Also CompareTo(Object) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.html",
    "title": "Class FSTCompletion | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTCompletion Finite state automata based implementation of \"autocomplete\" functionality. Inheritance System.Object FSTCompletion Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletion Constructors | Improve this Doc View Source FSTCompletion(FST<Object>) Defaults to higher weights first and exact first. Declaration public FSTCompletion(FST<object> automaton) Parameters Type Name Description FST < System.Object > automaton See Also FSTCompletion(FST<Object>, Boolean, Boolean) | Improve this Doc View Source FSTCompletion(FST<Object>, Boolean, Boolean) Constructs an FSTCompletion, specifying higherWeightsFirst and exactFirst. Declaration public FSTCompletion(FST<object> automaton, bool higherWeightsFirst, bool exactFirst) Parameters Type Name Description FST < System.Object > automaton Automaton with completions. See FSTCompletionBuilder . System.Boolean higherWeightsFirst Return most popular suggestions first. This is the default behavior for this implementation. Setting it to false has no effect (use constant term weights to sort alphabetically only). System.Boolean exactFirst Find and push an exact match to the first position of the result list if found. Fields | Improve this Doc View Source DEFAULT_BUCKETS Default number of buckets. Declaration public const int DEFAULT_BUCKETS = 10 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BucketCount Returns the bucket count (discretization thresholds). Declaration public virtual int BucketCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FST Returns the internal automaton. Declaration public virtual FST<object> FST { get; } Property Value Type Description FST < System.Object > Methods | Improve this Doc View Source DoLookup(String, Int32) Lookup suggestions to key . Declaration public virtual IList<FSTCompletion.Completion> DoLookup(string key, int num) Parameters Type Name Description System.String key The prefix to which suggestions should be sought. System.Int32 num At most this number of suggestions will be returned. Returns Type Description System.Collections.Generic.IList < FSTCompletion.Completion > Returns the suggestions, sorted by their approximated weight first (decreasing) and then alphabetically (UTF-8 codepoint order). | Improve this Doc View Source GetBucket(String) Returns the bucket assigned to a given key (if found) or -1 if no exact match exists. Declaration public virtual int GetBucket(string key) Parameters Type Name Description System.String key Returns Type Description System.Int32 See Also FSTCompletionBuilder"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionBuilder.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionBuilder.html",
    "title": "Class FSTCompletionBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTCompletionBuilder Finite state automata based implementation of \"autocomplete\" functionality. Implementation details The construction step in the object finalizer works as follows: A set of input terms and their buckets is given. All terms in the input are prefixed with a synthetic pseudo-character (code) of the weight bucket the term fell into. For example a term abc with a discretized weight equal '1' would become 1abc . The terms are then sorted by their raw value of UTF-8 character values (including the synthetic bucket code in front). A finite state automaton ( FST ) is constructed from the input. The root node has arcs labeled with all possible weights. We cache all these arcs, highest-weight first. At runtime, in DoLookup(String, Int32) , the automaton is utilized as follows: For each possible term weight encoded in the automaton (cached arcs from the root above), starting with the highest one, we descend along the path of the input key. If the key is not a prefix of a sequence in the automaton (path ends prematurely), we exit immediately -- no completions. Otherwise, we have found an internal automaton node that ends the key. The entire subautomaton (all paths) starting from this node form the key's completions. We start the traversal of this subautomaton. Every time we reach a final state (arc), we add a single suggestion to the list of results (the weight of this suggestion is constant and equal to the root path we started from). The tricky part is that because automaton edges are sorted and we scan depth-first, we can terminate the entire procedure as soon as we collect enough suggestions the user requested. In case the number of suggestions collected in the step above is still insufficient, we proceed to the next (smaller) weight leaving the root node and repeat the same algorithm again. Runtime behavior and performance characteristic The algorithm described above is optimized for finding suggestions to short prefixes in a top-weights-first order. This is probably the most common use case: it allows presenting suggestions early and sorts them by the global frequency (and then alphabetically). If there is an exact match in the automaton, it is returned first on the results list (even with by-weight sorting). Note that the maximum lookup time for any prefix is the time of descending to the subtree, plus traversal of the subtree up to the number of requested suggestions (because they are already presorted by weight on the root level and alphabetically at any node level). To order alphabetically only (no ordering by priorities), use identical term weights for all terms. Alphabetical suggestions are returned even if non-constant weights are used, but the algorithm for doing this is suboptimal. \"alphabetically\" in any of the documentation above indicates UTF-8 representation order, nothing else. NOTE : the FST file format is experimental and subject to suddenly change, requiring you to rebuild the FST suggest index. Inheritance System.Object FSTCompletionBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletionBuilder Constructors | Improve this Doc View Source FSTCompletionBuilder() Creates an FSTCompletion with default options: 10 buckets, exact match promoted to first position and InMemorySorter with a comparer obtained from UTF8SortedAsUnicodeComparer . Declaration public FSTCompletionBuilder() | Improve this Doc View Source FSTCompletionBuilder(Int32, IBytesRefSorter, Int32) Creates an FSTCompletion with the specified options. Declaration public FSTCompletionBuilder(int buckets, IBytesRefSorter sorter, int shareMaxTailLength) Parameters Type Name Description System.Int32 buckets The number of buckets for weight discretization. Buckets are used in Add(BytesRef, Int32) and must be smaller than the number given here. IBytesRefSorter sorter IBytesRefSorter used for re-sorting input for the automaton. For large inputs, use on-disk sorting implementations. The sorter is closed automatically in Build() if it implements System.IDisposable . System.Int32 shareMaxTailLength Max shared suffix sharing length. See the description of this parameter in Builder 's constructor. In general, for very large inputs you'll want to construct a non-minimal automaton which will be larger, but the construction will take far less ram. For minimal automata, set it to System.Int32.MaxValue . Fields | Improve this Doc View Source DEFAULT_BUCKETS Default number of buckets. Declaration public const int DEFAULT_BUCKETS = 10 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Add(BytesRef, Int32) Appends a single suggestion and its weight to the internal buffers. Declaration public virtual void Add(BytesRef utf8, int bucket) Parameters Type Name Description BytesRef utf8 The suggestion (utf8 representation) to be added. The content is copied and the object can be reused. System.Int32 bucket The bucket to place this suggestion in. Must be non-negative and smaller than the number of buckets passed in the constructor. Higher numbers indicate suggestions that should be presented before suggestions placed in smaller buckets. | Improve this Doc View Source Build() Builds the final automaton from a list of added entries. This method may take a longer while as it needs to build the automaton. Declaration public virtual FSTCompletion Build() Returns Type Description FSTCompletion See Also FSTCompletion"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionLookup.html",
    "title": "Class FSTCompletionLookup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTCompletionLookup An adapter from Lookup API to FSTCompletion . This adapter differs from FSTCompletion in that it attempts to discretize any \"weights\" as passed from in Weight to match the number of buckets. For the rationale for bucketing, see FSTCompletion . Note: Discretization requires an additional sorting pass. The range of weights for bucketing/ discretization is determined by sorting the input by weight and then dividing into equal ranges. Then, scores within each range are assigned to that bucket. Note that this means that even large differences in weights may be lost during automaton construction, but the overall distinction between \"classes\" of weights will be preserved regardless of the distribution of weights. For fine-grained control over which weights are assigned to which buckets, use FSTCompletion directly or TSTLookup , for example. Inheritance System.Object Lookup FSTCompletionLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletionLookup : Lookup Constructors | Improve this Doc View Source FSTCompletionLookup() This constructor prepares for creating a suggested FST using the Build(IInputIterator) method. The number of weight discretization buckets is set to DEFAULT_BUCKETS and exact matches are promoted to the top of the suggestions list. Declaration public FSTCompletionLookup() | Improve this Doc View Source FSTCompletionLookup(FSTCompletion, Boolean) This constructor takes a pre-built automaton. Declaration public FSTCompletionLookup(FSTCompletion completion, bool exactMatchFirst) Parameters Type Name Description FSTCompletion completion An instance of FSTCompletion . System.Boolean exactMatchFirst If true exact matches are promoted to the top of the suggestions list. Otherwise they appear in the order of discretized weight and alphabetical within the bucket. | Improve this Doc View Source FSTCompletionLookup(Int32, Boolean) This constructor prepares for creating a suggested FST using the Build(IInputIterator) method. Declaration public FSTCompletionLookup(int buckets, bool exactMatchFirst) Parameters Type Name Description System.Int32 buckets The number of weight discretization buckets (see FSTCompletion for details). System.Boolean exactMatchFirst If true exact matches are promoted to the top of the suggestions list. Otherwise they appear in the order of discretized weight and alphabetical within the bucket. Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool higherWeightsFirst, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean higherWeightsFirst System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the bucket (weight) as a Long for the provided key if it exists, otherwise null if it does not. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also FSTCompletion"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Fst | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Fst <!-- 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. --> Finite-state based autosuggest. Classes ExternalRefSorter Builds and iterates over sequences stored on disk. FSTCompletion Finite state automata based implementation of \"autocomplete\" functionality. FSTCompletion.Completion A single completion for a given key. FSTCompletionBuilder Finite state automata based implementation of \"autocomplete\" functionality. Implementation details The construction step in the object finalizer works as follows: A set of input terms and their buckets is given. All terms in the input are prefixed with a synthetic pseudo-character (code) of the weight bucket the term fell into. For example a term abc with a discretized weight equal '1' would become 1abc . The terms are then sorted by their raw value of UTF-8 character values (including the synthetic bucket code in front). A finite state automaton ( FST ) is constructed from the input. The root node has arcs labeled with all possible weights. We cache all these arcs, highest-weight first. At runtime, in DoLookup(String, Int32) , the automaton is utilized as follows: For each possible term weight encoded in the automaton (cached arcs from the root above), starting with the highest one, we descend along the path of the input key. If the key is not a prefix of a sequence in the automaton (path ends prematurely), we exit immediately -- no completions. Otherwise, we have found an internal automaton node that ends the key. The entire subautomaton (all paths) starting from this node form the key's completions. We start the traversal of this subautomaton. Every time we reach a final state (arc), we add a single suggestion to the list of results (the weight of this suggestion is constant and equal to the root path we started from). The tricky part is that because automaton edges are sorted and we scan depth-first, we can terminate the entire procedure as soon as we collect enough suggestions the user requested. In case the number of suggestions collected in the step above is still insufficient, we proceed to the next (smaller) weight leaving the root node and repeat the same algorithm again. Runtime behavior and performance characteristic The algorithm described above is optimized for finding suggestions to short prefixes in a top-weights-first order. This is probably the most common use case: it allows presenting suggestions early and sorts them by the global frequency (and then alphabetically). If there is an exact match in the automaton, it is returned first on the results list (even with by-weight sorting). Note that the maximum lookup time for any prefix is the time of descending to the subtree, plus traversal of the subtree up to the number of requested suggestions (because they are already presorted by weight on the root level and alphabetically at any node level). To order alphabetically only (no ordering by priorities), use identical term weights for all terms. Alphabetical suggestions are returned even if non-constant weights are used, but the algorithm for doing this is suboptimal. \"alphabetically\" in any of the documentation above indicates UTF-8 representation order, nothing else. NOTE : the FST file format is experimental and subject to suddenly change, requiring you to rebuild the FST suggest index. FSTCompletionLookup An adapter from Lookup API to FSTCompletion . This adapter differs from FSTCompletion in that it attempts to discretize any \"weights\" as passed from in Weight to match the number of buckets. For the rationale for bucketing, see FSTCompletion . Note: Discretization requires an additional sorting pass. The range of weights for bucketing/ discretization is determined by sorting the input by weight and then dividing into equal ranges. Then, scores within each range are assigned to that bucket. Note that this means that even large differences in weights may be lost during automaton construction, but the overall distinction between \"classes\" of weights will be preserved regardless of the distribution of weights. For fine-grained control over which weights are assigned to which buckets, use FSTCompletion directly or TSTLookup , for example. WFSTCompletionLookup Suggester based on a weighted FST: it first traverses the prefix, then walks the n shortest paths to retrieve top-ranked suggestions. NOTE : Input weights must be between 0 and System.Int32.MaxValue , any other values will be rejected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IBytesRefSorter Collects BytesRef and then allows one to iterate over their sorted order. Implementations of this interface will be called in a single-threaded scenario."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.IBytesRefSorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.IBytesRefSorter.html",
    "title": "Interface IBytesRefSorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IBytesRefSorter Collects BytesRef and then allows one to iterate over their sorted order. Implementations of this interface will be called in a single-threaded scenario. Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public interface IBytesRefSorter Properties | Improve this Doc View Source Comparer Comparer used to determine the sort order of entries. Declaration IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Adds a single suggestion entry (possibly compound with its bucket). Declaration void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 Exceptions Type Condition System.IO.IOException If an I/O exception occurs. System.InvalidOperationException If an addition attempt is performed after a call to GetIterator() has been made. | Improve this Doc View Source GetIterator() Sorts the entries added in Add(BytesRef) and returns an enumerator over all sorted entries. Declaration IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Exceptions Type Condition System.IO.IOException If an I/O exception occurs."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.WFSTCompletionLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.WFSTCompletionLookup.html",
    "title": "Class WFSTCompletionLookup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WFSTCompletionLookup Suggester based on a weighted FST: it first traverses the prefix, then walks the n shortest paths to retrieve top-ranked suggestions. NOTE : Input weights must be between 0 and System.Int32.MaxValue , any other values will be rejected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup WFSTCompletionLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class WFSTCompletionLookup : Lookup Constructors | Improve this Doc View Source WFSTCompletionLookup() Calls WFSTCompletionLookup(Boolean) Declaration public WFSTCompletionLookup() | Improve this Doc View Source WFSTCompletionLookup(Boolean) Creates a new suggester. Declaration public WFSTCompletionLookup(bool exactFirst) Parameters Type Name Description System.Boolean exactFirst true if suggestions that match the prefix exactly should always be returned first, regardless of score. This has no performance impact, but could result in low-quality suggestions. Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.html",
    "title": "Namespace Lucene.Net.Search.Suggest | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for Autocomplete/Autosuggest Classes BufferedInputIterator This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BufferingTermFreqIteratorWrapper This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocumentDictionary Dictionary with terms, weights, payload (optional) and contexts (optional) information taken from stored/indexed fields in a Lucene index. NOTE: The term and (optionally) payload fields have to be stored The weight field can be stored or can be a NumericDocValues . If the weight field is not defined, the value of the weight is 0 if any of the term or (optionally) payload fields supplied do not have a value for a document, then the document is skipped by the dictionary DocumentDictionary.DocumentInputIterator Implements IInputIterator from stored fields. DocumentValueSourceDictionary Dictionary with terms and optionally payload information taken from stored fields in a Lucene index. Similar to DocumentDictionary , except it obtains the weight of the terms in a document based on a ValueSource . NOTE: The term and (optionally) payload fields have to be stored if the term or (optionally) payload fields supplied do not have a value for a document, then the document is rejected by the dictionary In practice the ValueSource will likely be obtained using the lucene expression module. The following example shows how to create a ValueSource from a simple addition of two fields: Expression expression = JavascriptCompiler.Compile(\"f1 + f2\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"f1\", SortField.Type_e.LONG)); bindings.Add(new SortField(\"f2\", SortField.Type_e.LONG)); ValueSource valueSource = expression.GetValueSource(bindings); EmptyInputIterator Singleton IInputIterator that iterates over 0 BytesRefs. FileDictionary Dictionary represented by a text file. Format allowed: 1 entry per line: An entry can be: suggestion suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter payload where the default Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter is DEFAULT_FIELD_DELIMITER (a tab) NOTE: In order to have payload enabled, the first entry has to have a payload If the weight for an entry is not specified then a value of 1 is used A payload cannot be specified without having the weight specified for an entry If the payload for an entry is not specified (assuming payload is enabled) then an empty payload is returned An entry cannot have more than two Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter s Example: word1 word2 TAB 100 TAB payload1 word3 TAB 101 word4 word3 TAB 102 InMemorySorter An IBytesRefSorter that keeps all the entries in memory. This is a Lucene.NET EXPERIMENTAL API, use at your own risk This is a Lucene.NET INTERNAL API, use at your own risk InputIteratorWrapper Wraps a IBytesRefIterator as a suggester IInputIterator , with all weights set to 1 and carries no payload Lookup Simple Lookup interface for System.String suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lookup.LookupPriorityQueue A PriorityQueue<T> collecting a fixed size of high priority Lookup.LookupResult s. Lookup.LookupResult Result of a lookup. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedInputIterator This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedTermFreqIteratorWrapper This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk UnsortedInputIterator This wrapper buffers the incoming elements and makes sure they are in random order. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IInputIterator Interface for enumerating term,weight,payload triples for suggester consumption; currently only AnalyzingSuggester , FuzzySuggester and AnalyzingInfixSuggester support payloads."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.IInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.IInputIterator.html",
    "title": "Interface IInputIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IInputIterator Interface for enumerating term,weight,payload triples for suggester consumption; currently only AnalyzingSuggester , FuzzySuggester and AnalyzingInfixSuggester support payloads. Inherited Members IBytesRefIterator.Next() IBytesRefIterator.Comparer Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public interface IInputIterator : IBytesRefIterator Properties | Improve this Doc View Source Contexts A term's contexts context can be used to filter suggestions. May return null, if suggest entries do not have any context Declaration IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Returns true if the iterator has contexts Declaration bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if the iterator has payloads Declaration bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload An arbitrary byte[] to record per suggestion. See Payload to retrieve the payload for each suggestion. Declaration BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight A term's weight, higher numbers mean better suggestions. Declaration long Weight { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InMemorySorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InMemorySorter.html",
    "title": "Class InMemorySorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InMemorySorter An IBytesRefSorter that keeps all the entries in memory. This is a Lucene.NET EXPERIMENTAL API, use at your own risk This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InMemorySorter Implements IBytesRefSorter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class InMemorySorter : IBytesRefSorter Constructors | Improve this Doc View Source InMemorySorter(IComparer<BytesRef>) Creates an InMemorySorter, sorting entries by the provided comparer. Declaration public InMemorySorter(IComparer<BytesRef> comparer) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Declaration public void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 | Improve this Doc View Source GetIterator() Declaration public IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Implements IBytesRefSorter"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InputIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InputIteratorWrapper.html",
    "title": "Class InputIteratorWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InputIteratorWrapper Wraps a IBytesRefIterator as a suggester IInputIterator , with all weights set to 1 and carries no payload Inheritance System.Object InputIteratorWrapper Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class InputIteratorWrapper : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source InputIteratorWrapper(IBytesRefIterator) Creates a new wrapper, wrapping the specified iterator and specifying a weight value of 1 for all terms and nullifies associated payloads. Declaration public InputIteratorWrapper(IBytesRefIterator wrapped) Parameters Type Name Description IBytesRefIterator wrapped Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Jaspell | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Jaspell <!-- 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. --> JaSpell-based autosuggest. Classes JaspellLookup Suggest implementation based on JaSpell . JaspellTernarySearchTrie Implementation of a Ternary Search Trie, a data structure for storing System.String s that combines the compact size of a binary search tree with the speed of a digital search trie, and is therefore ideal for practical use in sorting and searching data. This data structure is faster than hashing for many typical search problems, and supports a broader range of useful problems and operations. Ternary searches are faster than hashing and more powerful, too. The theory of ternary search trees was described at a symposium in 1997 (see \"Fast Algorithms for Sorting and Searching Strings,\" by J.L. Bentley and R. Sedgewick, Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, January 1997). Algorithms in C, Third Edition, by Robert Sedgewick (Addison-Wesley, 1998) provides yet another view of ternary search trees. JaspellTernarySearchTrie.TSTNode An inner class of Ternary Search Trie that represents a node in the trie."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellLookup.html",
    "title": "Class JaspellLookup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JaspellLookup Suggest implementation based on JaSpell . Inheritance System.Object Lookup JaspellLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public class JaspellLookup : Lookup Constructors | Improve this Doc View Source JaspellLookup() Creates a new empty trie Declaration public JaspellLookup() See Also Build(IInputIterator) Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(String, Object) Adds a new node if key already exists, otherwise replaces its value. This method always returns false. Declaration public virtual bool Add(string key, object value) Parameters Type Name Description System.String key A System.String index. System.Object value The object to be stored in the Trie. Returns Type Description System.Boolean | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator tfit) Parameters Type Name Description IInputIterator tfit Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the value for the specified key, or null if the key does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key A System.String index. Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying TST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also JaspellTernarySearchTrie"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.html",
    "title": "Class JaspellTernarySearchTrie | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JaspellTernarySearchTrie Implementation of a Ternary Search Trie, a data structure for storing System.String s that combines the compact size of a binary search tree with the speed of a digital search trie, and is therefore ideal for practical use in sorting and searching data. This data structure is faster than hashing for many typical search problems, and supports a broader range of useful problems and operations. Ternary searches are faster than hashing and more powerful, too. The theory of ternary search trees was described at a symposium in 1997 (see \"Fast Algorithms for Sorting and Searching Strings,\" by J.L. Bentley and R. Sedgewick, Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, January 1997). Algorithms in C, Third Edition, by Robert Sedgewick (Addison-Wesley, 1998) provides yet another view of ternary search trees. Inheritance System.Object JaspellTernarySearchTrie Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public class JaspellTernarySearchTrie Constructors | Improve this Doc View Source JaspellTernarySearchTrie() Constructs an empty Ternary Search Trie. Declaration public JaspellTernarySearchTrie() | Improve this Doc View Source JaspellTernarySearchTrie(CultureInfo) Constructs an empty Ternary Search Trie, specifying the System.Globalization.CultureInfo used for lowercasing. Declaration public JaspellTernarySearchTrie(CultureInfo culture) Parameters Type Name Description System.Globalization.CultureInfo culture | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form word TAB float. Uses the culture of the current thread to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, Boolean) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form \"word TAB float\". Uses the culture of the current thread to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, bool compression) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. System.Boolean compression If true, the file is compressed with the GZIP algorithm, and if false, the file is a normal text document. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, Boolean, CultureInfo) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form \"word TAB float\". Uses the supplied culture to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, bool compression, CultureInfo culture) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. System.Boolean compression If true, the file is compressed with the GZIP algorithm, and if false, the file is a normal text document. System.Globalization.CultureInfo culture The culture used for lowercasing. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, CultureInfo) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form word TAB float. Uses the supplied culture to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, CultureInfo culture) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. System.Globalization.CultureInfo culture The culture used for lowercasing. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. Properties | Improve this Doc View Source MatchAlmostDiff Sets the number of characters by which words can differ from target word when calling the MatchAlmost(String, Int32) method. Arguments less than 0 will set the char difference to 0, and arguments greater than 3 will set the char difference to 3. Declaration public virtual int MatchAlmostDiff { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NumReturnValues Sets the default maximum number of values returned from the MatchPrefix(String, Int32) and MatchAlmost(String, Int32) methods. The value should be set this to -1 to get an unlimited number of return values. note that the methods mentioned above provide overloaded versions that allow you to specify the maximum number of return values, in which case this value is temporarily overridden. Declaration public virtual int NumReturnValues { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(String) Retrieve the object indexed by a key. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key A System.String index. Returns Type Description System.Object The object retrieved from the Ternary Search Trie. | Improve this Doc View Source GetAndIncrement(String) Retrieve the indexed by key, increment it by one unit and store the new . Declaration public virtual float? GetAndIncrement(string key) Parameters Type Name Description System.String key A System.String index. Returns Type Description System.Nullable < System.Single > The retrieved from the Ternary Search Trie. | Improve this Doc View Source GetKey(JaspellTernarySearchTrie.TSTNode) Returns the key that indexes the node argument. Declaration protected virtual string GetKey(JaspellTernarySearchTrie.TSTNode node) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode node The node whose index is to be calculated. Returns Type Description System.String The System.String that indexes the node argument. | Improve this Doc View Source GetNode(String) Returns the node indexed by key, or null if that node doesn't exist. Search begins at root node. Declaration public virtual JaspellTernarySearchTrie.TSTNode GetNode(string key) Parameters Type Name Description System.String key A System.String that indexes the node that is returned. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . | Improve this Doc View Source GetNode(String, JaspellTernarySearchTrie.TSTNode) Returns the node indexed by key, or null if that node doesn't exist. The search begins at root node. Declaration protected virtual JaspellTernarySearchTrie.TSTNode GetNode(string key, JaspellTernarySearchTrie.TSTNode startNode) Parameters Type Name Description System.String key A System.String that indexes the node that is returned. JaspellTernarySearchTrie.TSTNode startNode The top node defining the subtrie to be searched. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . | Improve this Doc View Source GetOrCreateNode(String) Returns the node indexed by key, creating that node if it doesn't exist, and creating any required intermediate nodes if they don't exist. Declaration protected virtual JaspellTernarySearchTrie.TSTNode GetOrCreateNode(string key) Parameters Type Name Description System.String key A System.String that indexes the node that is returned. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . Exceptions Type Condition System.NullReferenceException If the key is null . System.ArgumentException If the key is an empty System.String . | Improve this Doc View Source GetSizeInBytes() Return an approximate memory usage for this trie. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source MatchAlmost(String) Returns a System.Collections.Generic.IList<T> of keys that almost match the argument key. Keys returned will have exactly diff characters that do not match the target key, where diff is equal to the last value set to the MatchAlmostDiff property. If the MatchAlmost(String, Int32) method is called before the MatchAlmostDiff property has been called for the first time, then diff = 0. Declaration public virtual IList<string> MatchAlmost(string key) Parameters Type Name Description System.String key The target key. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results. | Improve this Doc View Source MatchAlmost(String, Int32) Returns a System.Collections.Generic.IList<T> of keys that almost match the argument key. Keys returned will have exactly diff characters that do not match the target key, where diff is equal to the last value set to the MatchAlmostDiff property. If the MatchAlmost(String, Int32) method is called before the MatchAlmostDiff property has been called for the first time, then diff = 0. Declaration public virtual IList<string> MatchAlmost(string key, int numReturnValues) Parameters Type Name Description System.String key The target key. System.Int32 numReturnValues The maximum number of values returned by this method. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results | Improve this Doc View Source MatchPrefix(String) Returns an alphabetical System.Collections.Generic.IList<T> of all keys in the trie that begin with a given prefix. Only keys for nodes having non-null data are included in the System.Collections.Generic.IList<T> . Declaration public virtual IList<string> MatchPrefix(string prefix) Parameters Type Name Description System.String prefix Each key returned from this method will begin with the characters in prefix. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results. | Improve this Doc View Source MatchPrefix(String, Int32) Returns an alphabetical System.Collections.Generic.IList<T> of all keys in the trie that begin with a given prefix. Only keys for nodes having non-null data are included in the System.Collections.Generic.IList<T> . Declaration public virtual IList<string> MatchPrefix(string prefix, int numReturnValues) Parameters Type Name Description System.String prefix Each key returned from this method will begin with the characters in prefix. System.Int32 numReturnValues The maximum number of values returned from this method. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results | Improve this Doc View Source NumDataNodes() Returns the number of nodes in the trie that have non-null data. Declaration public virtual int NumDataNodes() Returns Type Description System.Int32 The number of nodes in the trie that have non-null data. | Improve this Doc View Source NumDataNodes(JaspellTernarySearchTrie.TSTNode) Returns the number of nodes in the subtrie below and including the starting node. The method counts only nodes that have non-null data. Declaration protected virtual int NumDataNodes(JaspellTernarySearchTrie.TSTNode startingNode) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startingNode The top node of the subtrie. the node that defines the subtrie. Returns Type Description System.Int32 The total number of nodes in the subtrie. | Improve this Doc View Source NumNodes() Returns the total number of nodes in the trie. The method counts nodes whether or not they have data. Declaration public virtual int NumNodes() Returns Type Description System.Int32 The total number of nodes in the trie. | Improve this Doc View Source NumNodes(JaspellTernarySearchTrie.TSTNode) Returns the total number of nodes in the subtrie below and including the starting Node. The method counts nodes whether or not they have data. Declaration protected virtual int NumNodes(JaspellTernarySearchTrie.TSTNode startingNode) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startingNode The top node of the subtrie. The node that defines the subtrie. Returns Type Description System.Int32 The total number of nodes in the subtrie. | Improve this Doc View Source Put(String, Object) Stores a value in the trie. The value may be retrieved using the key. Declaration public virtual void Put(string key, object value) Parameters Type Name Description System.String key A System.String that indexes the object to be stored. System.Object value The object to be stored in the Trie. | Improve this Doc View Source Remove(String) Removes the value indexed by key. Also removes all nodes that are rendered unnecessary by the removal of this data. Declaration public virtual void Remove(string key) Parameters Type Name Description System.String key A System.String that indexes the object to be removed from the Trie. | Improve this Doc View Source SortKeys(JaspellTernarySearchTrie.TSTNode, Int32) Returns keys sorted in alphabetical order. This includes the start Node and all nodes connected to the start Node. The number of keys returned is limited to numReturnValues. To get a list that isn't limited in size, set numReturnValues to -1. Declaration protected virtual IList<string> SortKeys(JaspellTernarySearchTrie.TSTNode startNode, int numReturnValues) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startNode The top node defining the subtrie to be searched. System.Int32 numReturnValues The maximum number of values returned from this method. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.TSTNode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.TSTNode.html",
    "title": "Class JaspellTernarySearchTrie.TSTNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class JaspellTernarySearchTrie.TSTNode An inner class of Ternary Search Trie that represents a node in the trie. Inheritance System.Object JaspellTernarySearchTrie.TSTNode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class TSTNode Methods | Improve this Doc View Source GetSizeInBytes() Return an approximate memory usage for this node and its sub-nodes. Declaration public long GetSizeInBytes() Returns Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.html",
    "title": "Class Lookup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lookup Simple Lookup interface for System.String suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingInfixSuggester AnalyzingSuggester FreeTextSuggester FSTCompletionLookup WFSTCompletionLookup JaspellLookup TSTLookup Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public abstract class Lookup Constructors | Improve this Doc View Source Lookup() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Lookup() Fields | Improve this Doc View Source CHARSEQUENCE_COMPARER A simple char-by-char comparer for System.String Declaration public static readonly IComparer<string> CHARSEQUENCE_COMPARER Field Value Type Description System.Collections.Generic.IComparer < System.String > Properties | Improve this Doc View Source Count Get the number of entries the lookup was built with Declaration public abstract long Count { get; } Property Value Type Description System.Int64 total number of suggester entries Methods | Improve this Doc View Source Build(IDictionary) Build lookup from a dictionary. Some implementations may require sorted or unsorted keys from the dictionary's iterator - use SortedInputIterator or UnsortedInputIterator in such case. Declaration public virtual void Build(IDictionary dict) Parameters Type Name Description IDictionary dict | Improve this Doc View Source Build(IInputIterator) Builds up a new internal Lookup representation based on the given IInputIterator . The implementation might re-sort the data internally. Declaration public abstract void Build(IInputIterator inputIterator) Parameters Type Name Description IInputIterator inputIterator | Improve this Doc View Source DoLookup(String, Boolean, Int32) Look up a key and return possible completion for this key. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, bool onlyMorePopular, int num) Parameters Type Name Description System.String key lookup key. Depending on the implementation this may be a prefix, misspelling, or even infix. System.Boolean onlyMorePopular return only more popular results System.Int32 num maximum number of results to return Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > a list of possible completions, with their relative weight (e.g. popularity) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Look up a key and return possible completion for this key. Declaration public abstract IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key lookup key. Depending on the implementation this may be a prefix, misspelling, or even infix. System.Collections.Generic.IEnumerable < BytesRef > contexts contexts to filter the lookup by, or null if all contexts are allowed; if the suggestion contains any of the contexts, it's a match System.Boolean onlyMorePopular return only more popular results System.Int32 num maximum number of results to return Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > a list of possible completions, with their relative weight (e.g. popularity) | Improve this Doc View Source GetSizeInBytes() Get the size of the underlying lookup implementation in memory Declaration public abstract long GetSizeInBytes() Returns Type Description System.Int64 ram size of the lookup implementation in bytes | Improve this Doc View Source Load(DataInput) Discard current lookup data and load it from a previously saved copy. Optional operation. Declaration public abstract bool Load(DataInput input) Parameters Type Name Description DataInput input the DataInput to load the lookup data. Returns Type Description System.Boolean true if completed successfully, false if unsuccessful or not supported. Exceptions Type Condition System.IO.IOException when fatal IO error occurs. | Improve this Doc View Source Load(Stream) Calls Load(DataInput) after converting System.IO.Stream to DataInput Declaration public virtual bool Load(Stream input) Parameters Type Name Description System.IO.Stream input Returns Type Description System.Boolean | Improve this Doc View Source Store(DataOutput) Persist the constructed lookup data to a directory. Optional operation. Declaration public abstract bool Store(DataOutput output) Parameters Type Name Description DataOutput output DataOutput to write the data to. Returns Type Description System.Boolean true if successful, false if unsuccessful or not supported. Exceptions Type Condition System.IO.IOException when fatal IO error occurs. | Improve this Doc View Source Store(Stream) Calls Store(DataOutput) after converting System.IO.Stream to DataOutput Declaration public virtual bool Store(Stream output) Parameters Type Name Description System.IO.Stream output Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupPriorityQueue.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupPriorityQueue.html",
    "title": "Class Lookup.LookupPriorityQueue | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lookup.LookupPriorityQueue A PriorityQueue<T> collecting a fixed size of high priority Lookup.LookupResult s. Inheritance System.Object PriorityQueue < Lookup.LookupResult > Lookup.LookupPriorityQueue Inherited Members PriorityQueue<Lookup.LookupResult>.GetSentinelObject() PriorityQueue<Lookup.LookupResult>.Add(Lookup.LookupResult) PriorityQueue<Lookup.LookupResult>.InsertWithOverflow(Lookup.LookupResult) PriorityQueue<Lookup.LookupResult>.Top PriorityQueue<Lookup.LookupResult>.Pop() PriorityQueue<Lookup.LookupResult>.UpdateTop() PriorityQueue<Lookup.LookupResult>.Count PriorityQueue<Lookup.LookupResult>.Clear() PriorityQueue<Lookup.LookupResult>.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.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LookupPriorityQueue : PriorityQueue<Lookup.LookupResult> Constructors | Improve this Doc View Source LookupPriorityQueue(Int32) Creates a new priority queue of the specified size. Declaration public LookupPriorityQueue(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source GetResults() Returns the top N results in descending order. Declaration public Lookup.LookupResult[] GetResults() Returns Type Description Lookup.LookupResult [] the top N results in descending order. | Improve this Doc View Source LessThan(Lookup.LookupResult, Lookup.LookupResult) Declaration protected override bool LessThan(Lookup.LookupResult a, Lookup.LookupResult b) Parameters Type Name Description Lookup.LookupResult a Lookup.LookupResult b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Search.Suggest.Lookup.LookupResult>.LessThan(Lucene.Net.Search.Suggest.Lookup.LookupResult, Lucene.Net.Search.Suggest.Lookup.LookupResult)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupResult.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupResult.html",
    "title": "Class Lookup.LookupResult | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lookup.LookupResult Result of a lookup. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup.LookupResult Implements System.IComparable < Lookup.LookupResult > 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) Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LookupResult : IComparable<Lookup.LookupResult> Constructors | Improve this Doc View Source LookupResult(String, Int64) Create a new result from a key+weight pair. Declaration public LookupResult(string key, long value) Parameters Type Name Description System.String key System.Int64 value | Improve this Doc View Source LookupResult(String, Int64, BytesRef) Create a new result from a key+weight+payload triple. Declaration public LookupResult(string key, long value, BytesRef payload) Parameters Type Name Description System.String key System.Int64 value BytesRef payload | Improve this Doc View Source LookupResult(String, Int64, BytesRef, IEnumerable<BytesRef>) Create a new result from a key+weight+payload+contexts triple. Declaration public LookupResult(string key, long value, BytesRef payload, IEnumerable<BytesRef> contexts) Parameters Type Name Description System.String key System.Int64 value BytesRef payload System.Collections.Generic.IEnumerable < BytesRef > contexts | Improve this Doc View Source LookupResult(String, Int64, ISet<BytesRef>) Create a new result from a key+weight+contexts triple. Declaration public LookupResult(string key, long value, ISet<BytesRef> contexts) Parameters Type Name Description System.String key System.Int64 value System.Collections.Generic.ISet < BytesRef > contexts | Improve this Doc View Source LookupResult(String, Object, Int64, BytesRef) Create a new result from a key+highlightKey+weight+payload triple. Declaration public LookupResult(string key, object highlightKey, long value, BytesRef payload) Parameters Type Name Description System.String key System.Object highlightKey System.Int64 value BytesRef payload | Improve this Doc View Source LookupResult(String, Object, Int64, BytesRef, IEnumerable<BytesRef>) Create a new result from a key+highlightKey+weight+payload+contexts triple. Declaration public LookupResult(string key, object highlightKey, long value, BytesRef payload, IEnumerable<BytesRef> contexts) Parameters Type Name Description System.String key System.Object highlightKey System.Int64 value BytesRef payload System.Collections.Generic.IEnumerable < BytesRef > contexts Properties | Improve this Doc View Source Contexts the key's contexts (null if not present) Declaration public IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HighlightKey Expert: custom Object to hold the result of a highlighted suggestion. Declaration public object HighlightKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Key the key's text Declaration public string Key { get; } Property Value Type Description System.String | Improve this Doc View Source Payload the key's payload (null if not present) Declaration public BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Value the key's weight Declaration public long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CompareTo(Lookup.LookupResult) Compare alphabetically. Declaration public int CompareTo(Lookup.LookupResult o) Parameters Type Name Description Lookup.LookupResult o Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedInputIterator.html",
    "title": "Class SortedInputIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedInputIterator This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortedInputIterator Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class SortedInputIterator : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source SortedInputIterator(IInputIterator) Creates a new sorted wrapper, using UTF8SortedAsUnicodeComparer for sorting. Declaration public SortedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source | Improve this Doc View Source SortedInputIterator(IInputIterator, IComparer<BytesRef>) Creates a new sorted wrapper, sorting by BytesRef (ascending) then cost (ascending). Declaration public SortedInputIterator(IInputIterator source, IComparer<BytesRef> comparer) Parameters Type Name Description IInputIterator source System.Collections.Generic.IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Decode(BytesRef, ByteArrayDataInput) decodes the weight at the current position Declaration protected virtual long Decode(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Int64 | Improve this Doc View Source DecodeContexts(BytesRef, ByteArrayDataInput) decodes the contexts at the current position Declaration protected virtual ISet<BytesRef> DecodeContexts(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Collections.Generic.ISet < BytesRef > | Improve this Doc View Source DecodePayload(BytesRef, ByteArrayDataInput) decodes the payload at the current position Declaration protected virtual BytesRef DecodePayload(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description BytesRef | Improve this Doc View Source Encode(OfflineSorter.ByteSequencesWriter, ByteArrayDataOutput, Byte[], BytesRef, BytesRef, IEnumerable<BytesRef>, Int64) encodes an entry (bytes+(contexts)+(payload)+weight) to the provided writer Declaration protected virtual void Encode(OfflineSorter.ByteSequencesWriter writer, ByteArrayDataOutput output, byte[] buffer, BytesRef spare, BytesRef payload, IEnumerable<BytesRef> contexts, long weight) Parameters Type Name Description OfflineSorter.ByteSequencesWriter writer ByteArrayDataOutput output System.Byte [] buffer BytesRef spare BytesRef payload System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int64 weight | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedTermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedTermFreqIteratorWrapper.html",
    "title": "Class SortedTermFreqIteratorWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedTermFreqIteratorWrapper This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortedTermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class SortedTermFreqIteratorWrapper : ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source SortedTermFreqIteratorWrapper(ITermFreqIterator) Creates a new sorted wrapper, using UTF8SortedAsUnicodeComparer for sorting. Declaration public SortedTermFreqIteratorWrapper(ITermFreqIterator source) Parameters Type Name Description ITermFreqIterator source | Improve this Doc View Source SortedTermFreqIteratorWrapper(ITermFreqIterator, IComparer<BytesRef>) Creates a new sorted wrapper, sorting by BytesRef (ascending) then cost (ascending). Declaration public SortedTermFreqIteratorWrapper(ITermFreqIterator source, IComparer<BytesRef> comparer) Parameters Type Name Description ITermFreqIterator source System.Collections.Generic.IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Decode(BytesRef, ByteArrayDataInput) decodes the weight at the current position Declaration protected virtual long Decode(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Int64 | Improve this Doc View Source Encode(OfflineSorter.ByteSequencesWriter, ByteArrayDataOutput, Byte[], BytesRef, Int64) encodes an entry (bytes+weight) to the provided writer Declaration protected virtual void Encode(OfflineSorter.ByteSequencesWriter writer, ByteArrayDataOutput output, byte[] buffer, BytesRef spare, long weight) Parameters Type Name Description OfflineSorter.ByteSequencesWriter writer ByteArrayDataOutput output System.Byte [] buffer BytesRef spare System.Int64 weight | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Tst | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Tst <!-- 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. --> Ternary Search Tree based autosuggest. Classes TernaryTreeNode The class creates a TST node. TSTAutocomplete Ternary Search Trie implementation. TSTLookup Suggest implementation based on a Ternary Search Tree"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TernaryTreeNode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TernaryTreeNode.html",
    "title": "Class TernaryTreeNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TernaryTreeNode The class creates a TST node. Inheritance System.Object TernaryTreeNode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TernaryTreeNode Constructors | Improve this Doc View Source TernaryTreeNode() Creates a new empty node Declaration public TernaryTreeNode()"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTAutocomplete.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTAutocomplete.html",
    "title": "Class TSTAutocomplete | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TSTAutocomplete Ternary Search Trie implementation. Inheritance System.Object TSTAutocomplete Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TSTAutocomplete Methods | Improve this Doc View Source BalancedTree(Object[], Object[], Int32, Int32, TernaryTreeNode) Inserting keys in TST in the order middle,small,big (lexicographic measure) recursively creates a balanced tree which reduces insertion and search times significantly. Declaration public virtual void BalancedTree(object[] tokens, object[] vals, int lo, int hi, TernaryTreeNode root) Parameters Type Name Description System.Object [] tokens Sorted list of keys to be inserted in TST. System.Object [] vals System.Int32 lo stores the lower index of current list. System.Int32 hi stores the higher index of current list. TernaryTreeNode root a reference object to root of TST. | Improve this Doc View Source Insert(TernaryTreeNode, String, Object, Int32) Inserts a key in TST creating a series of Binary Search Trees at each node. The key is actually stored across the eqKid of each node in a successive manner. Declaration public virtual TernaryTreeNode Insert(TernaryTreeNode currentNode, string s, object val, int x) Parameters Type Name Description TernaryTreeNode currentNode a reference node where the insertion will take currently. System.String s key to be inserted in TST. System.Object val System.Int32 x index of character in key to be inserted currently. Returns Type Description TernaryTreeNode The new reference to root node of TST | Improve this Doc View Source PrefixCompletion(TernaryTreeNode, String, Int32) Auto-completes a given prefix query using Depth-First Search with the end of prefix as source node each time finding a new leaf to get a complete key to be added in the suggest list. Declaration public virtual IList<TernaryTreeNode> PrefixCompletion(TernaryTreeNode root, string s, int x) Parameters Type Name Description TernaryTreeNode root a reference to root node of TST. System.String s prefix query to be auto-completed. System.Int32 x index of current character to be searched while traversing through the prefix in TST. Returns Type Description System.Collections.Generic.IList < TernaryTreeNode > suggest list of auto-completed keys for the given prefix query. See Also TernaryTreeNode"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTLookup.html",
    "title": "Class TSTLookup | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TSTLookup Suggest implementation based on a Ternary Search Tree Inheritance System.Object Lookup TSTLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TSTLookup : Lookup Constructors | Improve this Doc View Source TSTLookup() Creates a new TSTLookup with an empty Ternary Search Tree. Declaration public TSTLookup() See Also Build(IInputIterator) Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(String, Object) Adds a new node if key already exists, otherwise replaces its value. This method always returns true. Declaration public virtual bool Add(string key, object value) Parameters Type Name Description System.String key System.Object value Returns Type Description System.Boolean | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator tfit) Parameters Type Name Description IInputIterator tfit Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the value for the specified key, or null if the key does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying TST Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also TSTAutocomplete"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.UnsortedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.UnsortedInputIterator.html",
    "title": "Class UnsortedInputIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UnsortedInputIterator This wrapper buffers the incoming elements and makes sure they are in random order. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferedInputIterator UnsortedInputIterator Implements IInputIterator IBytesRefIterator Inherited Members BufferedInputIterator.m_entries BufferedInputIterator.m_payloads BufferedInputIterator.m_contextSets BufferedInputIterator.m_curPos BufferedInputIterator.m_freqs BufferedInputIterator.HasPayloads BufferedInputIterator.Comparer BufferedInputIterator.HasContexts System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class UnsortedInputIterator : BufferedInputIterator, IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source UnsortedInputIterator(IInputIterator) Creates a new iterator, wrapping the specified iterator and returning elements in a random order. Declaration public UnsortedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source Properties | Improve this Doc View Source Contexts Declaration public override IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > Overrides BufferedInputIterator.Contexts | Improve this Doc View Source Payload Declaration public override BytesRef Payload { get; } Property Value Type Description BytesRef Overrides BufferedInputIterator.Payload | Improve this Doc View Source Weight Declaration public override long Weight { get; } Property Value Type Description System.Int64 Overrides BufferedInputIterator.Weight Methods | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides BufferedInputIterator.Next() Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/overview.html": {
    "href": "api/Lucene.Net.Suggest/overview.html",
    "title": "Lucene.Net.Suggest | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.Suggest <!-- 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. --> Auto-suggest and spellchecking support."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BaseTokenStreamTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BaseTokenStreamTestCase.html",
    "title": "Class BaseTokenStreamTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseTokenStreamTestCase Base class for all Lucene unit tests that use TokenStream s. When writing unit tests for analysis components, its highly recommended to use the helper methods here (especially in conjunction with MockAnalyzer or MockTokenizer ), as they contain many assertions and checks to catch bugs. Inheritance System.Object LuceneTestCase BaseTokenStreamTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseTokenStreamTestCase : LuceneTestCase Methods | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output) Parameters Type Name Description Analyzer a System.String input System.String [] output | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] posIncrements) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] posIncrements | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[], Int32[], Boolean) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, bool offsetsAreCorrect) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Boolean offsetsAreCorrect | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[], Int32[], Boolean, Byte[][]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, bool graphOffsetsAreCorrect, byte[][] payloads) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Boolean graphOffsetsAreCorrect System.Byte [][] payloads | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], String[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, string[] types) Parameters Type Name Description Analyzer a System.String input System.String [] output System.String [] types | Improve this Doc View Source AssertAnalyzesToPositions(Analyzer, String, String[], Int32[], Int32[]) Declaration public static void AssertAnalyzesToPositions(Analyzer a, string input, string[] output, int[] posIncrements, int[] posLengths) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] posIncrements System.Int32 [] posLengths | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output) Parameters Type Name Description TokenStream ts System.String [] output | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] posIncrements) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] posIncrements | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements, int[] posLengths, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>, Boolean) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset, bool offsetsAreCorrect) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset System.Boolean offsetsAreCorrect | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>, Boolean[], Boolean) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset, bool[] keywordAtts, bool offsetsAreCorrect) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset System.Boolean [] keywordAtts System.Boolean offsetsAreCorrect | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>, Nullable<Int32>, Boolean[], Boolean, Byte[][]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset, int? finalPosInc, bool[] keywordAtts, bool offsetsAreCorrect, byte[][] payloads) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset System.Nullable < System.Int32 > finalPosInc System.Boolean [] keywordAtts System.Boolean offsetsAreCorrect System.Byte [][] payloads | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], String[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, string[] types) Parameters Type Name Description TokenStream ts System.String [] output System.String [] types | Improve this Doc View Source CheckAnalysisConsistency(Random, Analyzer, Boolean, String) Declaration public static void CheckAnalysisConsistency(Random random, Analyzer a, bool useCharFilter, string text) Parameters Type Name Description System.Random random Analyzer a System.Boolean useCharFilter System.String text | Improve this Doc View Source CheckAnalysisConsistency(Random, Analyzer, Boolean, String, Boolean) Declaration public static void CheckAnalysisConsistency(Random random, Analyzer a, bool useCharFilter, string text, bool offsetsAreCorrect) Parameters Type Name Description System.Random random Analyzer a System.Boolean useCharFilter System.String text System.Boolean offsetsAreCorrect | Improve this Doc View Source CheckOneTerm(Analyzer, String, String) Simple utility method for testing stemmers Declaration public static void CheckOneTerm(Analyzer a, string input, string expected) Parameters Type Name Description Analyzer a System.String input System.String expected | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32) Utility method for blasting tokenstreams with data to make sure they don't do anything crazy Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations) Parameters Type Name Description System.Random random Analyzer a System.Int32 iterations | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Boolean) Utility method for blasting tokenstreams with data to make sure they don't do anything crazy Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, bool simple) Parameters Type Name Description System.Random random Analyzer a System.Int32 iterations System.Boolean simple true if only ascii strings will be used (try to avoid) | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Int32) Utility method for blasting tokenstreams with data to make sure they don't do anything crazy Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, int maxWordLength) Parameters Type Name Description System.Random random Analyzer a System.Int32 iterations System.Int32 maxWordLength | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Int32, Boolean) Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, int maxWordLength, bool simple) Parameters Type Name Description System.Random random Analyzer a System.Int32 iterations System.Int32 maxWordLength System.Boolean simple | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Int32, Boolean, Boolean) Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, int maxWordLength, bool simple, bool offsetsAreCorrect) Parameters Type Name Description System.Random random Analyzer a System.Int32 iterations System.Int32 maxWordLength System.Boolean simple System.Boolean offsetsAreCorrect | Improve this Doc View Source Escape(String) Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source NewAttributeFactory() Returns a random AttributeSource.AttributeFactory impl Declaration public static AttributeSource.AttributeFactory NewAttributeFactory() Returns Type Description AttributeSource.AttributeFactory | Improve this Doc View Source NewAttributeFactory(Random) Returns a random AttributeSource.AttributeFactory impl Declaration public static AttributeSource.AttributeFactory NewAttributeFactory(Random random) Parameters Type Name Description System.Random random Returns Type Description AttributeSource.AttributeFactory | Improve this Doc View Source ToDot(Analyzer, String) Declaration protected virtual string ToDot(Analyzer a, string inputText) Parameters Type Name Description Analyzer a System.String inputText Returns Type Description System.String | Improve this Doc View Source ToDotFile(Analyzer, String, String) Declaration protected virtual void ToDotFile(Analyzer a, string inputText, string localFileName) Parameters Type Name Description Analyzer a System.String inputText System.String localFileName See Also MockAnalyzer MockTokenizer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryTermAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryTermAttribute.html",
    "title": "Class BinaryTermAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BinaryTermAttribute Implementation for IBinaryTermAttribute . Inheritance System.Object Attribute BinaryTermAttribute Implements IBinaryTermAttribute ITermToBytesRefAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class BinaryTermAttribute : Attribute, IBinaryTermAttribute, ITermToBytesRefAttribute, IAttribute Properties | Improve this Doc View Source BytesRef Declaration public BytesRef BytesRef { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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 FillBytesRef() Declaration public void FillBytesRef() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IBinaryTermAttribute ITermToBytesRefAttribute IAttribute"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryToken.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryToken.html",
    "title": "Class BinaryToken | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BinaryToken Represents a binary token. Inheritance System.Object BinaryToken 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class BinaryToken Constructors | Improve this Doc View Source BinaryToken(BytesRef) Declaration public BinaryToken(BytesRef term) Parameters Type Name Description BytesRef term | Improve this Doc View Source BinaryToken(BytesRef, Int32, Int32) Declaration public BinaryToken(BytesRef term, int posInc, int posLen) Parameters Type Name Description BytesRef term System.Int32 posInc System.Int32 posLen"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedBinaryTokenStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedBinaryTokenStream.html",
    "title": "Class CannedBinaryTokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CannedBinaryTokenStream TokenStream from a canned list of binary ( BytesRef -based) tokens. Inheritance System.Object AttributeSource TokenStream CannedBinaryTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Reset() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CannedBinaryTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source CannedBinaryTokenStream(BinaryToken[]) Declaration public CannedBinaryTokenStream(params BinaryToken[] tokens) Parameters Type Name Description BinaryToken [] tokens Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedTokenStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedTokenStream.html",
    "title": "Class CannedTokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CannedTokenStream TokenStream from a canned list of Token s. Inheritance System.Object AttributeSource TokenStream CannedTokenStream Implements System.IDisposable Inherited Members TokenStream.Reset() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CannedTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source CannedTokenStream(Token[]) Declaration public CannedTokenStream(params Token[] tokens) Parameters Type Name Description Token [] tokens | Improve this Doc View Source CannedTokenStream(Int32, Int32, Token[]) If you want trailing holes, pass a non-zero finalPosInc . Declaration public CannedTokenStream(int finalPosInc, int finalOffset, params Token[] tokens) Parameters Type Name Description System.Int32 finalPosInc System.Int32 finalOffset Token [] tokens Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CheckClearAttributesAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CheckClearAttributesAttribute.html",
    "title": "Class CheckClearAttributesAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that ClearAttributes() was called correctly. Inheritance System.Object Attribute CheckClearAttributesAttribute Implements ICheckClearAttributesAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CheckClearAttributesAttribute : Attribute, ICheckClearAttributesAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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 GetAndResetClearCalled() Declaration public bool GetAndResetClearCalled() Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements ICheckClearAttributesAttribute IAttribute"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CollationTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CollationTestBase.html",
    "title": "Class CollationTestBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CollationTestBase Base test class for testing Unicode collation. Inheritance System.Object LuceneTestCase CollationTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class CollationTestBase : LuceneTestCase Fields | Improve this Doc View Source m_firstRangeBeginningOriginal Declaration protected string m_firstRangeBeginningOriginal Field Value Type Description System.String | Improve this Doc View Source m_firstRangeEndOriginal Declaration protected string m_firstRangeEndOriginal Field Value Type Description System.String | Improve this Doc View Source m_secondRangeBeginningOriginal Declaration protected string m_secondRangeBeginningOriginal Field Value Type Description System.String | Improve this Doc View Source m_secondRangeEndOriginal Declaration protected string m_secondRangeEndOriginal Field Value Type Description System.String Methods | Improve this Doc View Source AssertThreadSafe(Analyzer) Declaration public virtual void AssertThreadSafe(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source EncodeCollationKey(Byte[]) Convenience method to perform the same function as CollationKeyFilter. Declaration [Obsolete(\"only for testing deprecated filters\")] protected virtual string EncodeCollationKey(byte[] keyBits) Parameters Type Name Description System.Byte [] keyBits the result from collator.GetCollationKey(original).ToByteArray() Returns Type Description System.String The encoded collation key for the original string. | Improve this Doc View Source TestCollationKeySort(Analyzer, Analyzer, Analyzer, Analyzer, String, String, String, String) Test using various international locales with accented characters (which sort differently depending on locale). Declaration public virtual void TestCollationKeySort(Analyzer usAnalyzer, Analyzer franceAnalyzer, Analyzer swedenAnalyzer, Analyzer denmarkAnalyzer, string usResult, string frResult, string svResult, string dkResult) Parameters Type Name Description Analyzer usAnalyzer Analyzer franceAnalyzer Analyzer swedenAnalyzer Analyzer denmarkAnalyzer System.String usResult System.String frResult System.String svResult System.String dkResult | Improve this Doc View Source TestFarsiRangeFilterCollating(Analyzer, BytesRef, BytesRef, BytesRef, BytesRef) Declaration public virtual void TestFarsiRangeFilterCollating(Analyzer analyzer, BytesRef firstBeg, BytesRef firstEnd, BytesRef secondBeg, BytesRef secondEnd) Parameters Type Name Description Analyzer analyzer BytesRef firstBeg BytesRef firstEnd BytesRef secondBeg BytesRef secondEnd | Improve this Doc View Source TestFarsiRangeQueryCollating(Analyzer, BytesRef, BytesRef, BytesRef, BytesRef) Declaration public virtual void TestFarsiRangeQueryCollating(Analyzer analyzer, BytesRef firstBeg, BytesRef firstEnd, BytesRef secondBeg, BytesRef secondEnd) Parameters Type Name Description Analyzer analyzer BytesRef firstBeg BytesRef firstEnd BytesRef secondBeg BytesRef secondEnd | Improve this Doc View Source TestFarsiTermRangeQuery(Analyzer, BytesRef, BytesRef, BytesRef, BytesRef) Declaration public virtual void TestFarsiTermRangeQuery(Analyzer analyzer, BytesRef firstBeg, BytesRef firstEnd, BytesRef secondBeg, BytesRef secondEnd) Parameters Type Name Description Analyzer analyzer BytesRef firstBeg BytesRef firstEnd BytesRef secondBeg BytesRef secondEnd"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.html",
    "title": "Namespace Lucene.Net.Analysis | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing analysis components. The main classes of interest are: * BaseTokenStreamTestCase : Highly recommended to use its helper methods, (especially in conjunction with MockAnalyzer or MockTokenizer ), as it contains many assertions and checks to catch bugs. * MockTokenizer : Tokenizer for testing. Tokenizer that serves as a replacement for WHITESPACE, SIMPLE, and KEYWORD tokenizers. If you are writing a component such as a TokenFilter, its a great idea to test it wrapping this tokenizer instead for extra checks. * MockAnalyzer : Analyzer for testing. Analyzer that uses MockTokenizer for additional verification. If you are testing a custom component such as a queryparser or analyzer-wrapper that consumes analysis streams, its a great idea to test it with this analyzer instead. Classes BaseTokenStreamTestCase Base class for all Lucene unit tests that use TokenStream s. When writing unit tests for analysis components, its highly recommended to use the helper methods here (especially in conjunction with MockAnalyzer or MockTokenizer ), as they contain many assertions and checks to catch bugs. BinaryTermAttribute Implementation for IBinaryTermAttribute . BinaryToken Represents a binary token. CannedBinaryTokenStream TokenStream from a canned list of binary ( BytesRef -based) tokens. CannedTokenStream TokenStream from a canned list of Token s. CheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that ClearAttributes() was called correctly. CollationTestBase Base test class for testing Unicode collation. LookaheadTokenFilter LUCENENET specific abstraction so we can reference LookaheadTokenFilter.Position without specifying a generic closing type. LookaheadTokenFilter.Position Holds all state for a single position; subclass this to record other state at each position. LookaheadTokenFilter<T> An abstract TokenFilter to make it easier to build graph token filters requiring some lookahead. This class handles the details of buffering up tokens, recording them by position, restoring them, providing access to them, etc. MockAnalyzer Analyzer for testing. This analyzer is a replacement for Whitespace/Simple/KeywordAnalyzers for unit tests. If you are testing a custom component such as a queryparser or analyzer-wrapper that consumes analysis streams, its a great idea to test it with this analyzer instead. MockAnalyzer has the following behavior: By default, the assertions in MockTokenizer are turned on for extra checks that the consumer is consuming properly. These checks can be disabled with EnableChecks . Payload data is randomly injected into the stream for more thorough testing of payloads. MockBytesAnalyzer Analyzer for testing that encodes terms as UTF-16 bytes. MockBytesAttributeFactory AttributeSource.AttributeFactory that implements ICharTermAttribute with MockUTF16TermAttributeImpl . MockCharFilter The purpose of this charfilter is to send offsets out of bounds if the analyzer doesn't use CorrectOffset(Int32) or does incorrect offset math. MockFixedLengthPayloadFilter TokenFilter that adds random fixed-length payloads. MockGraphTokenFilter Randomly inserts overlapped (posInc=0) tokens with posLength sometimes > 1. The chain must have an IOffsetAttribute . MockHoleInjectingTokenFilter Randomly injects holes (similar to what a stopfilter would do) MockPayloadAnalyzer Wraps a whitespace tokenizer with a filter that sets the first token, and odd tokens to posinc=1, and all others to 0, encoding the position as pos: XXX in the payload. MockRandomLookaheadTokenFilter Uses LookaheadTokenFilter to randomly peek at future tokens. MockReaderWrapper Wraps a System.IO.TextReader , and can throw random or fixed exceptions, and spoon feed read chars. MockTokenFilter A TokenFilter for testing that removes terms accepted by a DFA. Union a list of singletons to act like a StopFilter . Use the complement to act like a KeepWordFilter . Use a regex like .{12,} to act like a LengthFilter . MockTokenizer Tokenizer for testing. This tokenizer is a replacement for WHITESPACE , SIMPLE , and KEYWORD tokenizers. If you are writing a component such as a TokenFilter , its a great idea to test it wrapping this tokenizer instead for extra checks. This tokenizer has the following behavior: An internal state-machine is used for checking consumer consistency. These checks can be disabled with EnableChecks . For convenience, optionally lowercases terms that it outputs. MockUTF16TermAttributeImpl Extension of CharTermAttribute that encodes the term text as UTF-16 bytes instead of as UTF-8 bytes. MockVariableLengthPayloadFilter TokenFilter that adds random variable-length payloads. TokenStreamToDot Consumes a TokenStream and outputs the dot (graphviz) string (graph). ValidatingTokenFilter A TokenFilter that checks consistency of the tokens (eg offsets are consistent with one another). VocabularyAssert Utility class for doing vocabulary-based stemming tests. Interfaces IBinaryTermAttribute An attribute extending ITermToBytesRefAttribute but exposing BytesRef property. ICheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that ClearAttributes() was called correctly."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.IBinaryTermAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.IBinaryTermAttribute.html",
    "title": "Interface IBinaryTermAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IBinaryTermAttribute An attribute extending ITermToBytesRefAttribute but exposing BytesRef property. Inherited Members ITermToBytesRefAttribute.FillBytesRef() IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public interface IBinaryTermAttribute : ITermToBytesRefAttribute, IAttribute Properties | Improve this Doc View Source BytesRef Set the current binary value. Declaration BytesRef BytesRef { get; set; } Property Value Type Description BytesRef"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ICheckClearAttributesAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ICheckClearAttributesAttribute.html",
    "title": "Interface ICheckClearAttributesAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that ClearAttributes() was called correctly. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public interface ICheckClearAttributesAttribute : IAttribute Methods | Improve this Doc View Source GetAndResetClearCalled() Declaration bool GetAndResetClearCalled() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.html",
    "title": "Class LookaheadTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LookaheadTokenFilter LUCENENET specific abstraction so we can reference LookaheadTokenFilter.Position without specifying a generic closing type. Inheritance System.Object AttributeSource TokenStream TokenFilter LookaheadTokenFilter LookaheadTokenFilter<T> Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class LookaheadTokenFilter : TokenFilter, IDisposable Methods | Improve this Doc View Source IncrementToken() Declaration public abstract override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.Position.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.Position.html",
    "title": "Class LookaheadTokenFilter.Position | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LookaheadTokenFilter.Position Holds all state for a single position; subclass this to record other state at each position. Inheritance System.Object LookaheadTokenFilter.Position Implements RollingBuffer.IResettable 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class Position : RollingBuffer.IResettable Properties | Improve this Doc View Source EndOffset Declaration public int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source InputTokens Declaration public IList<AttributeSource.State> InputTokens { get; } Property Value Type Description System.Collections.Generic.IList < AttributeSource.State > | Improve this Doc View Source NextRead Declaration public int NextRead { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public int StartOffset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(AttributeSource.State) Declaration public virtual void Add(AttributeSource.State state) Parameters Type Name Description AttributeSource.State state | Improve this Doc View Source NextState() Declaration public virtual AttributeSource.State NextState() Returns Type Description AttributeSource.State | Improve this Doc View Source Reset() Declaration public void Reset() Implements RollingBuffer.IResettable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter-1.html",
    "title": "Class LookaheadTokenFilter<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LookaheadTokenFilter<T> An abstract TokenFilter to make it easier to build graph token filters requiring some lookahead. This class handles the details of buffering up tokens, recording them by position, restoring them, providing access to them, etc. Inheritance System.Object AttributeSource TokenStream TokenFilter LookaheadTokenFilter LookaheadTokenFilter<T> MockGraphTokenFilter MockRandomLookaheadTokenFilter Implements System.IDisposable Inherited Members LookaheadTokenFilter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class LookaheadTokenFilter<T> : LookaheadTokenFilter, IDisposable where T : LookaheadTokenFilter.Position Type Parameters Name Description T Constructors | Improve this Doc View Source LookaheadTokenFilter(TokenStream) Declaration protected LookaheadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Fields | Improve this Doc View Source DEBUG Declaration protected static readonly bool DEBUG Field Value Type Description System.Boolean | Improve this Doc View Source m_end Declaration protected bool m_end Field Value Type Description System.Boolean | Improve this Doc View Source m_inputPos Declaration protected int m_inputPos Field Value Type Description System.Int32 | Improve this Doc View Source m_offsetAtt Declaration protected readonly IOffsetAttribute m_offsetAtt Field Value Type Description IOffsetAttribute | Improve this Doc View Source m_outputPos Declaration protected int m_outputPos Field Value Type Description System.Int32 | Improve this Doc View Source m_posIncAtt Declaration protected readonly IPositionIncrementAttribute m_posIncAtt Field Value Type Description IPositionIncrementAttribute | Improve this Doc View Source m_positions Declaration protected readonly RollingBuffer<T> m_positions Field Value Type Description RollingBuffer <T> | Improve this Doc View Source m_posLenAtt Declaration protected readonly IPositionLengthAttribute m_posLenAtt Field Value Type Description IPositionLengthAttribute Methods | Improve this Doc View Source AfterPosition() This is called when all input tokens leaving a given position have been returned. Override this and call insertToken and then set whichever token's attributes you want, if you want to inject a token starting from this position. Declaration protected virtual void AfterPosition() | Improve this Doc View Source InsertToken() Call this only from within AfterPosition() , to insert a new token. After calling this you should set any necessary token you need. Declaration protected virtual void InsertToken() | Improve this Doc View Source NewPosition() Declaration protected abstract T NewPosition() Returns Type Description T | Improve this Doc View Source NextToken() Call this when you are done looking ahead; it will set the next token to return. Return the boolean back to the caller. Declaration protected virtual bool NextToken() Returns Type Description System.Boolean | Improve this Doc View Source PeekToken() Returns true if there is a new token. Declaration protected virtual bool PeekToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockAnalyzer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockAnalyzer.html",
    "title": "Class MockAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockAnalyzer Analyzer for testing. This analyzer is a replacement for Whitespace/Simple/KeywordAnalyzers for unit tests. If you are testing a custom component such as a queryparser or analyzer-wrapper that consumes analysis streams, its a great idea to test it with this analyzer instead. MockAnalyzer has the following behavior: By default, the assertions in MockTokenizer are turned on for extra checks that the consumer is consuming properly. These checks can be disabled with EnableChecks . Payload data is randomly injected into the stream for more thorough testing of payloads. Inheritance System.Object Analyzer MockAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source MockAnalyzer(Random) Create a Whitespace-lowercasing analyzer with no stopwords removal. Calls MockAnalyzer(random, MockTokenizer.WHITESPACE, true, MockTokenFilter.EMPTY_STOPSET, false) . Declaration public MockAnalyzer(Random random) Parameters Type Name Description System.Random random | Improve this Doc View Source MockAnalyzer(Random, CharacterRunAutomaton, Boolean) Calls MockAnalyzer(random, runAutomaton, lowerCase, MockTokenFilter.EMPTY_STOPSET, false) . Declaration public MockAnalyzer(Random random, CharacterRunAutomaton runAutomaton, bool lowerCase) Parameters Type Name Description System.Random random CharacterRunAutomaton runAutomaton System.Boolean lowerCase | Improve this Doc View Source MockAnalyzer(Random, CharacterRunAutomaton, Boolean, CharacterRunAutomaton) Creates a new MockAnalyzer . Declaration public MockAnalyzer(Random random, CharacterRunAutomaton runAutomaton, bool lowerCase, CharacterRunAutomaton filter) Parameters Type Name Description System.Random random Random for payloads behavior CharacterRunAutomaton runAutomaton DFA describing how tokenization should happen (e.g. [a-zA-Z]+) System.Boolean lowerCase true if the tokenizer should lowercase terms CharacterRunAutomaton filter DFA describing how terms should be filtered (set of stopwords, etc) Properties | Improve this Doc View Source EnableChecks Toggle consumer workflow checking: if your test consumes tokenstreams normally you should leave this enabled. Declaration public bool EnableChecks { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxTokenLength Toggle maxTokenLength for MockTokenizer . Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetOffsetGap(String) Get the offset gap between tokens in fields if several fields with the same name were added. Declaration public override int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName Currently not used, the same offset gap is returned for each field. Returns Type Description System.Int32 Overrides Analyzer.GetOffsetGap(String) | Improve this Doc View Source GetPositionIncrementGap(String) Declaration public override int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 Overrides Analyzer.GetPositionIncrementGap(String) | Improve this Doc View Source SetOffsetGap(Int32) Sets an offset gap which will then be added to the offset when several fields with the same name are indexed Declaration public void SetOffsetGap(int offsetGap) Parameters Type Name Description System.Int32 offsetGap | Improve this Doc View Source SetPositionIncrementGap(Int32) Declaration public void SetPositionIncrementGap(int positionIncrementGap) Parameters Type Name Description System.Int32 positionIncrementGap Implements System.IDisposable See Also MockTokenizer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAnalyzer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAnalyzer.html",
    "title": "Class MockBytesAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockBytesAnalyzer Analyzer for testing that encodes terms as UTF-16 bytes. Inheritance System.Object Analyzer MockBytesAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockBytesAnalyzer : Analyzer, IDisposable Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAttributeFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAttributeFactory.html",
    "title": "Class MockBytesAttributeFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockBytesAttributeFactory AttributeSource.AttributeFactory that implements ICharTermAttribute with MockUTF16TermAttributeImpl . Inheritance System.Object AttributeSource.AttributeFactory MockBytesAttributeFactory Inherited Members AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockBytesAttributeFactory : AttributeSource.AttributeFactory Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Overrides AttributeSource.AttributeFactory.CreateAttributeInstance<T>()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockCharFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockCharFilter.html",
    "title": "Class MockCharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockCharFilter The purpose of this charfilter is to send offsets out of bounds if the analyzer doesn't use CorrectOffset(Int32) or does incorrect offset math. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter MockCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockCharFilter : CharFilter, IDisposable Constructors | Improve this Doc View Source MockCharFilter(TextReader) Declaration public MockCharFilter(TextReader in) Parameters Type Name Description System.IO.TextReader in | Improve this Doc View Source MockCharFilter(TextReader, Int32) Declaration public MockCharFilter(TextReader in, int remainder) Parameters Type Name Description System.IO.TextReader in System.Int32 remainder Methods | Improve this Doc View Source AddOffCorrectMap(Int32, Int32) Declaration protected virtual void AddOffCorrectMap(int off, int cumulativeDiff) Parameters Type Name Description System.Int32 off System.Int32 cumulativeDiff | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockFixedLengthPayloadFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockFixedLengthPayloadFilter.html",
    "title": "Class MockFixedLengthPayloadFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockFixedLengthPayloadFilter TokenFilter that adds random fixed-length payloads. Inheritance System.Object AttributeSource TokenStream TokenFilter MockFixedLengthPayloadFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockFixedLengthPayloadFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source MockFixedLengthPayloadFilter(Random, TokenStream, Int32) Declaration public MockFixedLengthPayloadFilter(Random random, TokenStream in, int length) Parameters Type Name Description System.Random random TokenStream in System.Int32 length Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockGraphTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockGraphTokenFilter.html",
    "title": "Class MockGraphTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockGraphTokenFilter Randomly inserts overlapped (posInc=0) tokens with posLength sometimes > 1. The chain must have an IOffsetAttribute . Inheritance System.Object AttributeSource TokenStream TokenFilter LookaheadTokenFilter LookaheadTokenFilter < LookaheadTokenFilter.Position > MockGraphTokenFilter Implements System.IDisposable Inherited Members LookaheadTokenFilter<LookaheadTokenFilter.Position>.DEBUG LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posIncAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posLenAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_offsetAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_inputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_outputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_end LookaheadTokenFilter<LookaheadTokenFilter.Position>.InsertToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_positions LookaheadTokenFilter<LookaheadTokenFilter.Position>.PeekToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.NextToken() TokenFilter.m_input TokenFilter.End() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockGraphTokenFilter : LookaheadTokenFilter<LookaheadTokenFilter.Position>, IDisposable Constructors | Improve this Doc View Source MockGraphTokenFilter(Random, TokenStream) Declaration public MockGraphTokenFilter(Random random, TokenStream input) Parameters Type Name Description System.Random random TokenStream input Methods | Improve this Doc View Source AfterPosition() Declaration protected override void AfterPosition() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.AfterPosition() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenFilter.Dispose(Boolean) | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides LookaheadTokenFilter.IncrementToken() | Improve this Doc View Source NewPosition() Declaration protected override LookaheadTokenFilter.Position NewPosition() Returns Type Description LookaheadTokenFilter.Position Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.NewPosition() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockHoleInjectingTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockHoleInjectingTokenFilter.html",
    "title": "Class MockHoleInjectingTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockHoleInjectingTokenFilter Randomly injects holes (similar to what a stopfilter would do) Inheritance System.Object AttributeSource TokenStream TokenFilter MockHoleInjectingTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockHoleInjectingTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source MockHoleInjectingTokenFilter(Random, TokenStream) Declaration public MockHoleInjectingTokenFilter(Random random, TokenStream in) Parameters Type Name Description System.Random random TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockPayloadAnalyzer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockPayloadAnalyzer.html",
    "title": "Class MockPayloadAnalyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockPayloadAnalyzer Wraps a whitespace tokenizer with a filter that sets the first token, and odd tokens to posinc=1, and all others to 0, encoding the position as pos: XXX in the payload. Inheritance System.Object Analyzer MockPayloadAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockPayloadAnalyzer : Analyzer, IDisposable Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockRandomLookaheadTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockRandomLookaheadTokenFilter.html",
    "title": "Class MockRandomLookaheadTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockRandomLookaheadTokenFilter Uses LookaheadTokenFilter to randomly peek at future tokens. Inheritance System.Object AttributeSource TokenStream TokenFilter LookaheadTokenFilter LookaheadTokenFilter < LookaheadTokenFilter.Position > MockRandomLookaheadTokenFilter Implements System.IDisposable Inherited Members LookaheadTokenFilter<LookaheadTokenFilter.Position>.DEBUG LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posIncAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posLenAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_offsetAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_inputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_outputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_end LookaheadTokenFilter<LookaheadTokenFilter.Position>.InsertToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_positions LookaheadTokenFilter<LookaheadTokenFilter.Position>.PeekToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.NextToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockRandomLookaheadTokenFilter : LookaheadTokenFilter<LookaheadTokenFilter.Position>, IDisposable Constructors | Improve this Doc View Source MockRandomLookaheadTokenFilter(Random, TokenStream) Declaration public MockRandomLookaheadTokenFilter(Random random, TokenStream in) Parameters Type Name Description System.Random random TokenStream in Methods | Improve this Doc View Source AfterPosition() Declaration protected override void AfterPosition() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.AfterPosition() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides LookaheadTokenFilter.IncrementToken() | Improve this Doc View Source NewPosition() Declaration protected override LookaheadTokenFilter.Position NewPosition() Returns Type Description LookaheadTokenFilter.Position Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.NewPosition() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockReaderWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockReaderWrapper.html",
    "title": "Class MockReaderWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockReaderWrapper Wraps a System.IO.TextReader , and can throw random or fixed exceptions, and spoon feed read chars. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader MockReaderWrapper Implements System.IDisposable Inherited Members System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockReaderWrapper : TextReader, IDisposable Constructors | Improve this Doc View Source MockReaderWrapper(Random, TextReader) Declaration public MockReaderWrapper(Random random, TextReader input) Parameters Type Name Description System.Random random System.IO.TextReader input Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.TextReader.Dispose(System.Boolean) | Improve this Doc View Source IsMyEvilException(Exception) Declaration public static bool IsMyEvilException(Exception t) Parameters Type Name Description System.Exception t Returns Type Description System.Boolean | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides System.IO.TextReader.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ThrowExcAfterChar(Int32) Throw an exception after reading this many chars. Declaration public virtual void ThrowExcAfterChar(int charUpto) Parameters Type Name Description System.Int32 charUpto | Improve this Doc View Source ThrowExcNext() Declaration public virtual void ThrowExcNext() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenFilter.html",
    "title": "Class MockTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockTokenFilter A TokenFilter for testing that removes terms accepted by a DFA. Union a list of singletons to act like a StopFilter . Use the complement to act like a KeepWordFilter . Use a regex like .{12,} to act like a LengthFilter . Inheritance System.Object AttributeSource TokenStream TokenFilter MockTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source MockTokenFilter(TokenStream, CharacterRunAutomaton) Create a new MockTokenFilter . Declaration public MockTokenFilter(TokenStream input, CharacterRunAutomaton filter) Parameters Type Name Description TokenStream input TokenStream to filter CharacterRunAutomaton filter DFA representing the terms that should be removed. Fields | Improve this Doc View Source EMPTY_STOPSET Empty set of stopwords Declaration public static readonly CharacterRunAutomaton EMPTY_STOPSET Field Value Type Description CharacterRunAutomaton | Improve this Doc View Source ENGLISH_STOPSET Set of common english stopwords Declaration public static readonly CharacterRunAutomaton ENGLISH_STOPSET Field Value Type Description CharacterRunAutomaton Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenizer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenizer.html",
    "title": "Class MockTokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockTokenizer Tokenizer for testing. This tokenizer is a replacement for WHITESPACE , SIMPLE , and KEYWORD tokenizers. If you are writing a component such as a TokenFilter , its a great idea to test it wrapping this tokenizer instead for extra checks. This tokenizer has the following behavior: An internal state-machine is used for checking consumer consistency. These checks can be disabled with EnableChecks . For convenience, optionally lowercases terms that it outputs. Inheritance System.Object AttributeSource TokenStream Tokenizer MockTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source MockTokenizer(AttributeSource.AttributeFactory, TextReader) Calls MockTokenizer(AttributeFactory, TextReader, WHITESPACE, true) Declaration public MockTokenizer(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source MockTokenizer(AttributeSource.AttributeFactory, TextReader, CharacterRunAutomaton, Boolean) Declaration public MockTokenizer(AttributeSource.AttributeFactory factory, TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase | Improve this Doc View Source MockTokenizer(AttributeSource.AttributeFactory, TextReader, CharacterRunAutomaton, Boolean, Int32) Declaration public MockTokenizer(AttributeSource.AttributeFactory factory, TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase, int maxTokenLength) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase System.Int32 maxTokenLength | Improve this Doc View Source MockTokenizer(TextReader) Calls MockTokenizer(TextReader, WHITESPACE, true) . Declaration public MockTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source MockTokenizer(TextReader, CharacterRunAutomaton, Boolean) Declaration public MockTokenizer(TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase) Parameters Type Name Description System.IO.TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase | Improve this Doc View Source MockTokenizer(TextReader, CharacterRunAutomaton, Boolean, Int32) Declaration public MockTokenizer(TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase, int maxTokenLength) Parameters Type Name Description System.IO.TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase System.Int32 maxTokenLength Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Declaration public static readonly int DEFAULT_MAX_TOKEN_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source KEYWORD Acts Similar to KeywordTokenizer . TODO: Keyword returns an \"empty\" token for an empty reader... Declaration public static readonly CharacterRunAutomaton KEYWORD Field Value Type Description CharacterRunAutomaton | Improve this Doc View Source SIMPLE Acts like LetterTokenizer . Declaration public static readonly CharacterRunAutomaton SIMPLE Field Value Type Description CharacterRunAutomaton | Improve this Doc View Source WHITESPACE Acts Similar to WhitespaceTokenizer . Declaration public static readonly CharacterRunAutomaton WHITESPACE Field Value Type Description CharacterRunAutomaton Properties | Improve this Doc View Source EnableChecks Toggle consumer workflow checking: if your test consumes tokenstreams normally you should leave this enabled. Declaration public virtual bool EnableChecks { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsTokenChar(Int32) Declaration protected virtual bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean | Improve this Doc View Source Normalize(Int32) Declaration protected virtual int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source ReadChar() Declaration protected virtual int ReadChar() Returns Type Description System.Int32 | Improve this Doc View Source ReadCodePoint() Declaration protected virtual int ReadCodePoint() Returns Type Description System.Int32 | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockUTF16TermAttributeImpl.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockUTF16TermAttributeImpl.html",
    "title": "Class MockUTF16TermAttributeImpl | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockUTF16TermAttributeImpl Extension of CharTermAttribute that encodes the term text as UTF-16 bytes instead of as UTF-8 bytes. Inheritance System.Object Attribute CharTermAttribute MockUTF16TermAttributeImpl Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute IAttribute J2N.Text.IAppendable Inherited Members CharTermAttribute.ICharSequence.HasValue CharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.Buffer CharTermAttribute.Buffer CharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.ICharTermAttribute.Length CharTermAttribute.ICharSequence.Length CharTermAttribute.Length CharTermAttribute.SetLength(Int32) CharTermAttribute.SetEmpty() CharTermAttribute.BytesRef CharTermAttribute.ICharSequence.Item[Int32] CharTermAttribute.ICharTermAttribute.Item[Int32] CharTermAttribute.Item[Int32] CharTermAttribute.Subsequence(Int32, Int32) CharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.Append(Char) CharTermAttribute.Append(Char[]) CharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.Append(String) CharTermAttribute.Append(StringBuilder) CharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.Append(ICharSequence) CharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.GetHashCode() CharTermAttribute.Clear() CharTermAttribute.Clone() CharTermAttribute.Equals(Object) CharTermAttribute.ToString() CharTermAttribute.ReflectWith(IAttributeReflector) CharTermAttribute.CopyTo(IAttribute) CharTermAttribute.ICharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.ICharTermAttribute.SetLength(Int32) CharTermAttribute.ICharTermAttribute.SetEmpty() CharTermAttribute.ICharTermAttribute.Append(ICharSequence) CharTermAttribute.ICharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(Char) CharTermAttribute.ICharTermAttribute.Append(Char[]) CharTermAttribute.ICharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(String) CharTermAttribute.ICharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(StringBuilder) CharTermAttribute.ICharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.IAppendable.Append(Char) CharTermAttribute.IAppendable.Append(String) CharTermAttribute.IAppendable.Append(String, Int32, Int32) CharTermAttribute.IAppendable.Append(StringBuilder) CharTermAttribute.IAppendable.Append(StringBuilder, Int32, Int32) CharTermAttribute.IAppendable.Append(Char[]) CharTermAttribute.IAppendable.Append(Char[], Int32, Int32) CharTermAttribute.IAppendable.Append(ICharSequence) CharTermAttribute.IAppendable.Append(ICharSequence, Int32, Int32) Attribute.ReflectAsString(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockUTF16TermAttributeImpl : CharTermAttribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAttribute, IAppendable Methods | Improve this Doc View Source FillBytesRef() Declaration public override void FillBytesRef() Overrides CharTermAttribute.FillBytesRef() Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute IAttribute J2N.Text.IAppendable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockVariableLengthPayloadFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockVariableLengthPayloadFilter.html",
    "title": "Class MockVariableLengthPayloadFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockVariableLengthPayloadFilter TokenFilter that adds random variable-length payloads. Inheritance System.Object AttributeSource TokenStream TokenFilter MockVariableLengthPayloadFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockVariableLengthPayloadFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source MockVariableLengthPayloadFilter(Random, TokenStream) Declaration public MockVariableLengthPayloadFilter(Random random, TokenStream in) Parameters Type Name Description System.Random random TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.TokenStreamToDot.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.TokenStreamToDot.html",
    "title": "Class TokenStreamToDot | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenStreamToDot Consumes a TokenStream and outputs the dot (graphviz) string (graph). Inheritance System.Object TokenStreamToDot 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class TokenStreamToDot Constructors | Improve this Doc View Source TokenStreamToDot(String, TokenStream, TextWriter) If inputText is non-null, and the TokenStream has offsets, we include the surface form in each arc's label. Declaration public TokenStreamToDot(string inputText, TokenStream in, TextWriter out) Parameters Type Name Description System.String inputText TokenStream in System.IO.TextWriter out Fields | Improve this Doc View Source m_out Declaration protected readonly TextWriter m_out Field Value Type Description System.IO.TextWriter Methods | Improve this Doc View Source ToDot() Declaration public virtual void ToDot() | Improve this Doc View Source WriteArc(Int32, Int32, String, String) Declaration protected virtual void WriteArc(int fromNode, int toNode, string label, string style) Parameters Type Name Description System.Int32 fromNode System.Int32 toNode System.String label System.String style | Improve this Doc View Source WriteHeader() Override to customize. Declaration protected virtual void WriteHeader() | Improve this Doc View Source WriteNode(Int32, String) Declaration protected virtual void WriteNode(int name, string label) Parameters Type Name Description System.Int32 name System.String label | Improve this Doc View Source WriteTrailer() Override to customize. Declaration protected virtual void WriteTrailer()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ValidatingTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ValidatingTokenFilter.html",
    "title": "Class ValidatingTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ValidatingTokenFilter A TokenFilter that checks consistency of the tokens (eg offsets are consistent with one another). Inheritance System.Object AttributeSource TokenStream TokenFilter ValidatingTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class ValidatingTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ValidatingTokenFilter(TokenStream, String, Boolean) The name is used to identify this stage when throwing exceptions (useful if you have more than one instance in your chain). Declaration public ValidatingTokenFilter(TokenStream in, string name, bool offsetsAreCorrect) Parameters Type Name Description TokenStream in System.String name System.Boolean offsetsAreCorrect Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.VocabularyAssert.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.VocabularyAssert.html",
    "title": "Class VocabularyAssert | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VocabularyAssert Utility class for doing vocabulary-based stemming tests. Inheritance System.Object VocabularyAssert 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.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public static class VocabularyAssert Methods | Improve this Doc View Source AssertVocabulary(Analyzer, Stream) Run a vocabulary test against one file: tab separated. Declaration public static void AssertVocabulary(Analyzer a, Stream vocOut) Parameters Type Name Description Analyzer a System.IO.Stream vocOut | Improve this Doc View Source AssertVocabulary(Analyzer, Stream, Stream) Run a vocabulary test against two data files. Declaration public static void AssertVocabulary(Analyzer a, Stream voc, Stream out) Parameters Type Name Description Analyzer a System.IO.Stream voc System.IO.Stream out | Improve this Doc View Source AssertVocabulary(Analyzer, Stream, String) Run a vocabulary test against a tab-separated data file inside a zip file. Declaration public static void AssertVocabulary(Analyzer a, Stream zipFile, string vocOut) Parameters Type Name Description Analyzer a System.IO.Stream zipFile System.String vocOut | Improve this Doc View Source AssertVocabulary(Analyzer, Stream, String, String) Run a vocabulary test against two data files inside a zip file. Declaration public static void AssertVocabulary(Analyzer a, Stream zipFile, string voc, string out) Parameters Type Name Description Analyzer a System.IO.Stream zipFile System.String voc System.String out"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingCodec.html",
    "title": "Class AssertingCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingCodec Acts like Lucene46Codec but with additional asserts. Inheritance System.Object Codec FilterCodec AssertingCodec Inherited Members FilterCodec.m_delegate FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.SegmentInfoFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax [CodecName(\"Asserting\")] public sealed class AssertingCodec : FilterCodec Constructors | Improve this Doc View Source AssertingCodec() Declaration public AssertingCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides FilterCodec.DocValuesFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides FilterCodec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides FilterCodec.PostingsFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides FilterCodec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides FilterCodec.TermVectorsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingDocValuesFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingDocValuesFormat.html",
    "title": "Class AssertingDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingDocValuesFormat Just like Lucene45DocValuesFormat but with additional asserts. Inheritance System.Object DocValuesFormat AssertingDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax [DocValuesFormatName(\"Asserting\")] public class AssertingDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source AssertingDocValuesFormat() Declaration public AssertingDocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingNormsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingNormsFormat.html",
    "title": "Class AssertingNormsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingNormsFormat Just like Lucene42NormsFormat but with additional asserts. Inheritance System.Object NormsFormat AssertingNormsFormat 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.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingPostingsFormat.html",
    "title": "Class AssertingPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingPostingsFormat Just like Lucene41PostingsFormat but with additional asserts. Inheritance System.Object PostingsFormat AssertingPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"Asserting\")] public sealed class AssertingPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source AssertingPostingsFormat() Declaration public AssertingPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingStoredFieldsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingStoredFieldsFormat.html",
    "title": "Class AssertingStoredFieldsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingStoredFieldsFormat Just like Lucene41StoredFieldsFormat but with additional asserts. Inheritance System.Object StoredFieldsFormat AssertingStoredFieldsFormat 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.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingStoredFieldsFormat : StoredFieldsFormat Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingTermVectorsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingTermVectorsFormat.html",
    "title": "Class AssertingTermVectorsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingTermVectorsFormat Just like Lucene40TermVectorsFormat but with additional asserts. Inheritance System.Object TermVectorsFormat AssertingTermVectorsFormat 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.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingTermVectorsFormat : TermVectorsFormat Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.html",
    "title": "Namespace Lucene.Net.Codecs.Asserting | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Asserting <!-- 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. --> Codec for testing that asserts various contracts of the codec apis. Classes AssertingCodec Acts like Lucene46Codec but with additional asserts. AssertingDocValuesFormat Just like Lucene45DocValuesFormat but with additional asserts. AssertingNormsFormat Just like Lucene42NormsFormat but with additional asserts. AssertingPostingsFormat Just like Lucene41PostingsFormat but with additional asserts. AssertingStoredFieldsFormat Just like Lucene41StoredFieldsFormat but with additional asserts. AssertingTermVectorsFormat Just like Lucene40TermVectorsFormat but with additional asserts."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.html",
    "title": "Namespace Lucene.Net.Codecs.Bloom | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Bloom <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for generating test indexes using the BloomFilteringPostingsFormat Classes TestBloomFilteredLucene41Postings A class used for testing BloomFilteringPostingsFormat with a concrete delegate (Lucene41). Creates a Bloom filter on ALL fields and with tiny amounts of memory reserved for the filter. DO NOT USE IN A PRODUCTION APPLICATION! This is not a realistic application of Bloom Filters as they ordinarily are larger and operate on only primary key type fields."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.TestBloomFilteredLucene41Postings.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.TestBloomFilteredLucene41Postings.html",
    "title": "Class TestBloomFilteredLucene41Postings | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TestBloomFilteredLucene41Postings A class used for testing BloomFilteringPostingsFormat with a concrete delegate (Lucene41). Creates a Bloom filter on ALL fields and with tiny amounts of memory reserved for the filter. DO NOT USE IN A PRODUCTION APPLICATION! This is not a realistic application of Bloom Filters as they ordinarily are larger and operate on only primary key type fields. Inheritance System.Object PostingsFormat TestBloomFilteredLucene41Postings Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Bloom Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"TestBloomFilteredLucene41Postings\")] public class TestBloomFilteredLucene41Postings : PostingsFormat Constructors | Improve this Doc View Source TestBloomFilteredLucene41Postings() Declaration public TestBloomFilteredLucene41Postings() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.CheapBastardCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.CheapBastardCodec.html",
    "title": "Class CheapBastardCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheapBastardCodec Codec that tries to use as little ram as possible because he spent all his money on beer Inheritance System.Object Codec FilterCodec CheapBastardCodec Inherited Members FilterCodec.m_delegate FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.SegmentInfoFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.CheapBastard Assembly : Lucene.Net.TestFramework.dll Syntax public class CheapBastardCodec : FilterCodec Constructors | Improve this Doc View Source CheapBastardCodec() Declaration public CheapBastardCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides FilterCodec.DocValuesFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides FilterCodec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides FilterCodec.PostingsFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides FilterCodec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides FilterCodec.TermVectorsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.html",
    "title": "Namespace Lucene.Net.Codecs.CheapBastard | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.CheapBastard <!-- 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. --> Codec that unreasonably tries to use as little RAM as possible. For testing, benchmarking, API purposes only! Classes CheapBastardCodec Codec that tries to use as little ram as possible because he spent all his money on beer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.CompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.CompressingCodec.html",
    "title": "Class CompressingCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingCodec A codec that uses CompressingStoredFieldsFormat for its stored fields and delegates to Lucene46Codec for everything else. Inheritance System.Object Codec FilterCodec CompressingCodec DummyCompressingCodec FastCompressingCodec FastDecompressionCompressingCodec HighCompressionCompressingCodec Inherited Members FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.NormsFormat FilterCodec.PostingsFormat FilterCodec.SegmentInfoFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default 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.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class CompressingCodec : FilterCodec Constructors | Improve this Doc View Source CompressingCodec(CompressionMode, Int32) Creates a compressing codec with an empty segment suffix. Declaration public CompressingCodec(CompressionMode compressionMode, int chunkSize) Parameters Type Name Description CompressionMode compressionMode System.Int32 chunkSize | Improve this Doc View Source CompressingCodec(String, CompressionMode, Int32) Creates a compressing codec with a given segmentSuffix . Declaration public CompressingCodec(string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String segmentSuffix CompressionMode compressionMode System.Int32 chunkSize Properties | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides FilterCodec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides FilterCodec.TermVectorsFormat Methods | Improve this Doc View Source RandomInstance(Random) Creates a random CompressingCodec that is using an empty segment suffix. Declaration public static CompressingCodec RandomInstance(Random random) Parameters Type Name Description System.Random random Returns Type Description CompressingCodec | Improve this Doc View Source RandomInstance(Random, Boolean) Creates a random CompressingCodec that is using a segment suffix. Declaration public static CompressingCodec RandomInstance(Random random, bool withSegmentSuffix) Parameters Type Name Description System.Random random System.Boolean withSegmentSuffix Returns Type Description CompressingCodec | Improve this Doc View Source RandomInstance(Random, Int32, Boolean) Create a random instance. Declaration public static CompressingCodec RandomInstance(Random random, int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Random random System.Int32 chunkSize System.Boolean withSegmentSuffix Returns Type Description CompressingCodec | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Codec.ToString()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.DummyCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.DummyCompressingCodec.html",
    "title": "Class DummyCompressingCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DummyCompressingCodec CompressingCodec that does not compress data, useful for testing. Inheritance System.Object Codec FilterCodec CompressingCodec DummyCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.NormsFormat FilterCodec.PostingsFormat FilterCodec.SegmentInfoFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default 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.Codecs.Compressing.Dummy Assembly : Lucene.Net.TestFramework.dll Syntax [CodecName(\"DummyCompressingStoredFields\")] public class DummyCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source DummyCompressingCodec() Default constructor. Declaration public DummyCompressingCodec() | Improve this Doc View Source DummyCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunkSize . Declaration public DummyCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Fields | Improve this Doc View Source DUMMY Declaration public static readonly CompressionMode DUMMY Field Value Type Description CompressionMode"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.html",
    "title": "Namespace Lucene.Net.Codecs.Compressing.Dummy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Compressing.Dummy <!-- 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. --> Dummy CompressingCodec implementation used for testing. Classes DummyCompressingCodec CompressingCodec that does not compress data, useful for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastCompressingCodec.html",
    "title": "Class FastCompressingCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FastCompressingCodec CompressionCodec that uses FAST . Inheritance System.Object Codec FilterCodec CompressingCodec FastCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.PostingsFormat FilterCodec.SegmentInfoFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default 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.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax [CodecName(\"FastCompressingStoredFields\")] public class FastCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source FastCompressingCodec() Default constructor. Declaration public FastCompressingCodec() | Improve this Doc View Source FastCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunk size. Declaration public FastCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Properties | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides FilterCodec.NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastDecompressionCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastDecompressionCompressingCodec.html",
    "title": "Class FastDecompressionCompressingCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FastDecompressionCompressingCodec CompressingCodec that uses FAST_DECOMPRESSION . Inheritance System.Object Codec FilterCodec CompressingCodec FastDecompressionCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.PostingsFormat FilterCodec.SegmentInfoFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default 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.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax [CodecName(\"FastDecompressionCompressingStoredFields\")] public class FastDecompressionCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source FastDecompressionCompressingCodec() Default constructor. Declaration public FastDecompressionCompressingCodec() | Improve this Doc View Source FastDecompressionCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunkSize . Declaration public FastDecompressionCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Properties | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides FilterCodec.NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.HighCompressionCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.HighCompressionCompressingCodec.html",
    "title": "Class HighCompressionCompressingCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class HighCompressionCompressingCodec CompressionCodec that uses HIGH_COMPRESSION . Inheritance System.Object Codec FilterCodec CompressingCodec HighCompressionCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.PostingsFormat FilterCodec.SegmentInfoFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default 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.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax [CodecName(\"HighCompressionCompressingStoredFields\")] public class HighCompressionCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source HighCompressionCompressingCodec() Default constructor. Declaration public HighCompressionCompressingCodec() | Improve this Doc View Source HighCompressionCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunkSize . Declaration public HighCompressionCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Properties | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides FilterCodec.NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.html",
    "title": "Namespace Lucene.Net.Codecs.Compressing | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Compressing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing CompressingStoredFieldsFormat . Classes CompressingCodec A codec that uses CompressingStoredFieldsFormat for its stored fields and delegates to Lucene46Codec for everything else. FastCompressingCodec CompressionCodec that uses FAST . FastDecompressionCompressingCodec CompressingCodec that uses FAST_DECOMPRESSION . HighCompressionCompressingCodec CompressionCodec that uses HIGH_COMPRESSION ."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.html",
    "title": "Namespace Lucene.Net.Codecs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs <!-- 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. --> Codecs for testing (simulate old disk formats, wacky theoretical use cases, etc) Classes MissingOrdRemapper A utility class to write missing values for SORTED as if they were the empty string (to simulate pre-Lucene4.5 dv behavior for testing old codecs). TestCodecFactory LUCENENET specific class used to add the codecs from the test framework. TestDocValuesFormatFactory LUCENENET specific class used to add the DocValuesFormats from the test framework. TestPostingsFormatFactory LUCENENET specific class used to add the PostingsFormats from the test framework."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene3x | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene3x <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for generating test indexes in the Lucene 3.x index format. NOTE: This is not a perfect simulation of the 3.x format, but its close. Particularly, indexes generated with this codec cannot actually be read with Lucene 3.x Classes PreFlexRWCodec Writes 3.x-like indexes (not perfect emulation yet) for testing only! This is a Lucene.NET EXPERIMENTAL API, use at your own risk PreFlexRWSkipListWriter PreFlexRW skiplist implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWCodec.html",
    "title": "Class PreFlexRWCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PreFlexRWCodec Writes 3.x-like indexes (not perfect emulation yet) for testing only! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec Lucene3xCodec PreFlexRWCodec Inherited Members Lucene3xCodec.DocValuesFormat Lucene3xCodec.LiveDocsFormat Lucene3xCodec.GetDocStoreFiles(SegmentInfo) Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene3x Assembly : Lucene.Net.TestFramework.dll Syntax public class PreFlexRWCodec : Lucene3xCodec Properties | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Lucene3xCodec.FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Lucene3xCodec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Lucene3xCodec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Lucene3xCodec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Lucene3xCodec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Lucene3xCodec.TermVectorsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWSkipListWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWSkipListWriter.html",
    "title": "Class PreFlexRWSkipListWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PreFlexRWSkipListWriter PreFlexRW skiplist implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiLevelSkipListWriter PreFlexRWSkipListWriter Inherited Members MultiLevelSkipListWriter.m_numberOfSkipLevels MultiLevelSkipListWriter.Init() MultiLevelSkipListWriter.BufferSkip(Int32) MultiLevelSkipListWriter.WriteSkip(IndexOutput) 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.Codecs.Lucene3x Assembly : Lucene.Net.TestFramework.dll Syntax public class PreFlexRWSkipListWriter : MultiLevelSkipListWriter Constructors | Improve this Doc View Source PreFlexRWSkipListWriter(Int32, Int32, Int32, IndexOutput, IndexOutput) Declaration public PreFlexRWSkipListWriter(int skipInterval, int numberOfSkipLevels, int docCount, IndexOutput freqOutput, IndexOutput proxOutput) Parameters Type Name Description System.Int32 skipInterval System.Int32 numberOfSkipLevels System.Int32 docCount IndexOutput freqOutput IndexOutput proxOutput Methods | Improve this Doc View Source ResetSkip() Declaration public override void ResetSkip() Overrides MultiLevelSkipListWriter.ResetSkip() | Improve this Doc View Source SetSkipData(Int32, Boolean, Int32) Sets the values for the current skip data. Declaration public virtual void SetSkipData(int doc, bool storePayloads, int payloadLength) Parameters Type Name Description System.Int32 doc System.Boolean storePayloads System.Int32 payloadLength | Improve this Doc View Source WriteSkipData(Int32, IndexOutput) Declaration protected override void WriteSkipData(int level, IndexOutput skipBuffer) Parameters Type Name Description System.Int32 level IndexOutput skipBuffer Overrides MultiLevelSkipListWriter.WriteSkipData(Int32, IndexOutput)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene40 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene40 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene40PostingsFormat . Classes Lucene40FieldInfosWriter Lucene 4.0 FieldInfos writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40PostingsWriter Concrete class that writes the 4.0 frq/prx postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40RWCodec Read-write version of Lucene40Codec for testing. Lucene40RWDocValuesFormat Read-write version of Lucene40DocValuesFormat for testing. Lucene40RWNormsFormat Read-write version of Lucene40NormsFormat for testing. Lucene40RWPostingsFormat Read-write version of Lucene40PostingsFormat for testing. Lucene40SkipListWriter Implements the skip list writer for the 4.0 posting list format that stores positions and payloads."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosWriter.html",
    "title": "Class Lucene40FieldInfosWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40FieldInfosWriter Lucene 4.0 FieldInfos writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter Lucene40FieldInfosWriter 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.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax [Obsolete] public class Lucene40FieldInfosWriter : FieldInfosWriter Constructors | Improve this Doc View Source Lucene40FieldInfosWriter() Sole constructor. Declaration public Lucene40FieldInfosWriter() Methods | Improve this Doc View Source DocValuesByte(DocValuesType, String) 4.0-style docvalues byte Declaration public virtual byte DocValuesByte(DocValuesType type, string legacyTypeAtt) Parameters Type Name Description DocValuesType type System.String legacyTypeAtt Returns Type Description System.Byte | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Declaration public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context Overrides FieldInfosWriter.Write(Directory, String, String, FieldInfos, IOContext) See Also Lucene40FieldInfosFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40PostingsWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40PostingsWriter.html",
    "title": "Class Lucene40PostingsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40PostingsWriter Concrete class that writes the 4.0 frq/prx postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Lucene40PostingsWriter Implements System.IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) 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.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class Lucene40PostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source Lucene40PostingsWriter(SegmentWriteState) Creates a Lucene40PostingsWriter , with the Lucene.Net.Codecs.Lucene40.Lucene40PostingsWriter.DEFAULT_SKIP_INTERVAL . Declaration public Lucene40PostingsWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state | Improve this Doc View Source Lucene40PostingsWriter(SegmentWriteState, Int32) Creates a Lucene40PostingsWriter , with the specified skipInterval . Declaration public Lucene40PostingsWriter(SegmentWriteState state, int skipInterval) Parameters Type Name Description SegmentWriteState state System.Int32 skipInterval Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload . Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] empty, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] empty DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docID, int termDocFreq) Parameters Type Name Description System.Int32 docID System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements System.IDisposable See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWCodec.html",
    "title": "Class Lucene40RWCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40RWCodec Read-write version of Lucene40Codec for testing. Inheritance System.Object Codec Lucene40Codec Lucene40RWCodec Inherited Members Lucene40Codec.StoredFieldsFormat Lucene40Codec.TermVectorsFormat Lucene40Codec.PostingsFormat Lucene40Codec.SegmentInfoFormat Lucene40Codec.LiveDocsFormat Lucene40Codec.GetPostingsFormatForField(String) Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class Lucene40RWCodec : Lucene40Codec Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Lucene40Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Lucene40Codec.FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Lucene40Codec.NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWDocValuesFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWDocValuesFormat.html",
    "title": "Class Lucene40RWDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40RWDocValuesFormat Read-write version of Lucene40DocValuesFormat for testing. Inheritance System.Object DocValuesFormat Lucene40DocValuesFormat Lucene40RWDocValuesFormat Inherited Members Lucene40DocValuesFormat.MAX_BINARY_FIELD_LENGTH Lucene40DocValuesFormat.FieldsProducer(SegmentReadState) DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40RWDocValuesFormat : Lucene40DocValuesFormat Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides Lucene40DocValuesFormat.FieldsConsumer(SegmentWriteState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWNormsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWNormsFormat.html",
    "title": "Class Lucene40RWNormsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40RWNormsFormat Read-write version of Lucene40NormsFormat for testing. Inheritance System.Object NormsFormat Lucene40NormsFormat Lucene40RWNormsFormat Inherited Members Lucene40NormsFormat.NormsProducer(SegmentReadState) 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.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40RWNormsFormat : Lucene40NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides Lucene40NormsFormat.NormsConsumer(SegmentWriteState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWPostingsFormat.html",
    "title": "Class Lucene40RWPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40RWPostingsFormat Read-write version of Lucene40PostingsFormat for testing. Inheritance System.Object PostingsFormat Lucene40PostingsFormat Lucene40RWPostingsFormat Inherited Members Lucene40PostingsFormat.m_minBlockSize Lucene40PostingsFormat.m_maxBlockSize Lucene40PostingsFormat.FieldsProducer(SegmentReadState) Lucene40PostingsFormat.ToString() PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40RWPostingsFormat : Lucene40PostingsFormat Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides Lucene40PostingsFormat.FieldsConsumer(SegmentWriteState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40SkipListWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40SkipListWriter.html",
    "title": "Class Lucene40SkipListWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40SkipListWriter Implements the skip list writer for the 4.0 posting list format that stores positions and payloads. Inheritance System.Object MultiLevelSkipListWriter Lucene40SkipListWriter Inherited Members MultiLevelSkipListWriter.m_numberOfSkipLevels MultiLevelSkipListWriter.Init() MultiLevelSkipListWriter.BufferSkip(Int32) MultiLevelSkipListWriter.WriteSkip(IndexOutput) 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.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] public class Lucene40SkipListWriter : MultiLevelSkipListWriter Constructors | Improve this Doc View Source Lucene40SkipListWriter(Int32, Int32, Int32, IndexOutput, IndexOutput) Sole constructor. Declaration public Lucene40SkipListWriter(int skipInterval, int numberOfSkipLevels, int docCount, IndexOutput freqOutput, IndexOutput proxOutput) Parameters Type Name Description System.Int32 skipInterval System.Int32 numberOfSkipLevels System.Int32 docCount IndexOutput freqOutput IndexOutput proxOutput Methods | Improve this Doc View Source ResetSkip() Declaration public override void ResetSkip() Overrides MultiLevelSkipListWriter.ResetSkip() | Improve this Doc View Source SetSkipData(Int32, Boolean, Int32, Boolean, Int32) Sets the values for the current skip data. Declaration public virtual void SetSkipData(int doc, bool storePayloads, int payloadLength, bool storeOffsets, int offsetLength) Parameters Type Name Description System.Int32 doc System.Boolean storePayloads System.Int32 payloadLength System.Boolean storeOffsets System.Int32 offsetLength | Improve this Doc View Source WriteSkipData(Int32, IndexOutput) Declaration protected override void WriteSkipData(int level, IndexOutput skipBuffer) Parameters Type Name Description System.Int32 level IndexOutput skipBuffer Overrides MultiLevelSkipListWriter.WriteSkipData(Int32, IndexOutput) See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene41 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene41 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene41Codec . Classes Lucene41RWCodec Read-write version of Lucene41Codec for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.Lucene41RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.Lucene41RWCodec.html",
    "title": "Class Lucene41RWCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41RWCodec Read-write version of Lucene41Codec for testing. Inheritance System.Object Codec Lucene41Codec Lucene41RWCodec Inherited Members Lucene41Codec.TermVectorsFormat Lucene41Codec.PostingsFormat Lucene41Codec.SegmentInfoFormat Lucene41Codec.LiveDocsFormat Lucene41Codec.GetPostingsFormatForField(String) Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene41 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene41RWCodec : Lucene41Codec Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Lucene41Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Lucene41Codec.FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Lucene41Codec.NormsFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Lucene41Codec.StoredFieldsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene41Ords | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene41Ords <!-- 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. --> Codec for testing that supports #ord() Classes Lucene41WithOrds Customized version of Lucene41PostingsFormat that uses FixedGapTermsIndexWriter ."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.Lucene41WithOrds.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.Lucene41WithOrds.html",
    "title": "Class Lucene41WithOrds | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41WithOrds Customized version of Lucene41PostingsFormat that uses FixedGapTermsIndexWriter . Inheritance System.Object PostingsFormat Lucene41WithOrds Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Lucene41Ords Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"Lucene41WithOrds\")] public sealed class Lucene41WithOrds : PostingsFormat Constructors | Improve this Doc View Source Lucene41WithOrds() Declaration public Lucene41WithOrds() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene42 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene42 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene42Codec . Classes Lucene42FieldInfosWriter Lucene 4.2 FieldInfos writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene42RWCodec Read-write version of Lucene42Codec for testing. Lucene42RWDocValuesFormat Read-write version of Lucene42DocValuesFormat for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosWriter.html",
    "title": "Class Lucene42FieldInfosWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42FieldInfosWriter Lucene 4.2 FieldInfos writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter Lucene42FieldInfosWriter 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.Codecs.Lucene42 Assembly : Lucene.Net.TestFramework.dll Syntax [Obsolete] public sealed class Lucene42FieldInfosWriter : FieldInfosWriter Constructors | Improve this Doc View Source Lucene42FieldInfosWriter() Sole constructor. Declaration public Lucene42FieldInfosWriter() Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Declaration public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context Overrides FieldInfosWriter.Write(Directory, String, String, FieldInfos, IOContext) See Also Lucene42FieldInfosFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWCodec.html",
    "title": "Class Lucene42RWCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42RWCodec Read-write version of Lucene42Codec for testing. Inheritance System.Object Codec Lucene42Codec Lucene42RWCodec Inherited Members Lucene42Codec.StoredFieldsFormat Lucene42Codec.TermVectorsFormat Lucene42Codec.PostingsFormat Lucene42Codec.SegmentInfoFormat Lucene42Codec.LiveDocsFormat Lucene42Codec.GetPostingsFormatForField(String) Lucene42Codec.DocValuesFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene42 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene42RWCodec : Lucene42Codec Properties | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Lucene42Codec.FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Lucene42Codec.NormsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Declaration public override DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat Overrides Lucene42Codec.GetDocValuesFormatForField(String)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWDocValuesFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWDocValuesFormat.html",
    "title": "Class Lucene42RWDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42RWDocValuesFormat Read-write version of Lucene42DocValuesFormat for testing. Inheritance System.Object DocValuesFormat Lucene42DocValuesFormat Lucene42RWDocValuesFormat Inherited Members Lucene42DocValuesFormat.MAX_BINARY_FIELD_LENGTH Lucene42DocValuesFormat.m_acceptableOverheadRatio Lucene42DocValuesFormat.FieldsProducer(SegmentReadState) DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Lucene42 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene42RWDocValuesFormat : Lucene42DocValuesFormat Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides Lucene42DocValuesFormat.FieldsConsumer(SegmentWriteState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene45 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene45 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene45Codec . Classes Lucene45RWCodec Read-write version of Lucene45Codec for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.Lucene45RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.Lucene45RWCodec.html",
    "title": "Class Lucene45RWCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45RWCodec Read-write version of Lucene45Codec for testing. Inheritance System.Object Codec Lucene45Codec Lucene45RWCodec Inherited Members Lucene45Codec.StoredFieldsFormat Lucene45Codec.TermVectorsFormat Lucene45Codec.PostingsFormat Lucene45Codec.SegmentInfoFormat Lucene45Codec.LiveDocsFormat Lucene45Codec.GetPostingsFormatForField(String) Lucene45Codec.GetDocValuesFormatForField(String) Lucene45Codec.DocValuesFormat Lucene45Codec.NormsFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene45 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene45RWCodec : Lucene45Codec Properties | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Lucene45Codec.FieldInfosFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MissingOrdRemapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MissingOrdRemapper.html",
    "title": "Class MissingOrdRemapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MissingOrdRemapper A utility class to write missing values for SORTED as if they were the empty string (to simulate pre-Lucene4.5 dv behavior for testing old codecs). Inheritance System.Object MissingOrdRemapper 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.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class MissingOrdRemapper Methods | Improve this Doc View Source InsertEmptyValue(IEnumerable<BytesRef>) Insert an empty byte[] to the front of this enumerable. Declaration public static IEnumerable<BytesRef> InsertEmptyValue(IEnumerable<BytesRef> iterable) Parameters Type Name Description System.Collections.Generic.IEnumerable < BytesRef > iterable Returns Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source MapAllOrds(IEnumerable<Nullable<Int64>>) Remaps every ord+1 on this enumerable. Declaration public static IEnumerable<long?> MapAllOrds(IEnumerable<long?> iterable) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> iterable Returns Type Description System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> | Improve this Doc View Source MapMissingToOrd0(IEnumerable<Nullable<Int64>>) Remaps ord -1 to ord 0 on this enumerable. Declaration public static IEnumerable<long?> MapMissingToOrd0(IEnumerable<long?> iterable) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> iterable Returns Type Description System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >>"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.html",
    "title": "Namespace Lucene.Net.Codecs.MockIntBlock | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.MockIntBlock <!-- 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. --> Integer encoder implementations for testing. Classes MockFixedInt32BlockPostingsFormat A silly test codec to verify core support for fixed sized int block encoders is working. The int encoder used here just writes each block as a series of vInt. MockFixedInt32BlockPostingsFormat.MockInt32Factory Encodes blocks as vInts of a fixed block size. MockVariableInt32BlockPostingsFormat A silly test codec to verify core support for variable sized int block encoders is working. The int encoder used here writes baseBlockSize ints at once, if the first int is <= 3, else 2* baseBlockSize. MockVariableInt32BlockPostingsFormat.MockInt32Factory If the first value is <= 3, writes baseBlockSize vInts at once, otherwise writes 2*baseBlockSize vInts."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.html",
    "title": "Class MockFixedInt32BlockPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockFixedInt32BlockPostingsFormat A silly test codec to verify core support for fixed sized int block encoders is working. The int encoder used here just writes each block as a series of vInt. Inheritance System.Object PostingsFormat MockFixedInt32BlockPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"MockFixedIntBlock\")] public sealed class MockFixedInt32BlockPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockFixedInt32BlockPostingsFormat() Declaration public MockFixedInt32BlockPostingsFormat() | Improve this Doc View Source MockFixedInt32BlockPostingsFormat(Int32) Declaration public MockFixedInt32BlockPostingsFormat(int blockSize) Parameters Type Name Description System.Int32 blockSize Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source GetInt32Factory() Declaration public Int32StreamFactory GetInt32Factory() Returns Type Description Int32StreamFactory | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.MockInt32Factory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.MockInt32Factory.html",
    "title": "Class MockFixedInt32BlockPostingsFormat.MockInt32Factory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockFixedInt32BlockPostingsFormat.MockInt32Factory Encodes blocks as vInts of a fixed block size. Inheritance System.Object Int32StreamFactory MockFixedInt32BlockPostingsFormat.MockInt32Factory 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.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax public class MockInt32Factory : Int32StreamFactory Constructors | Improve this Doc View Source MockInt32Factory(Int32) Declaration public MockInt32Factory(int blockSize) Parameters Type Name Description System.Int32 blockSize Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Declaration public override Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput Overrides Int32StreamFactory.CreateOutput(Directory, String, IOContext) | Improve this Doc View Source OpenInput(Directory, String, IOContext) Declaration public override Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput Overrides Int32StreamFactory.OpenInput(Directory, String, IOContext)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.html",
    "title": "Class MockVariableInt32BlockPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockVariableInt32BlockPostingsFormat A silly test codec to verify core support for variable sized int block encoders is working. The int encoder used here writes baseBlockSize ints at once, if the first int is <= 3, else 2* baseBlockSize. Inheritance System.Object PostingsFormat MockVariableInt32BlockPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"MockVariableIntBlock\")] public class MockVariableInt32BlockPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockVariableInt32BlockPostingsFormat() Declaration public MockVariableInt32BlockPostingsFormat() | Improve this Doc View Source MockVariableInt32BlockPostingsFormat(Int32) Declaration public MockVariableInt32BlockPostingsFormat(int baseBlockSize) Parameters Type Name Description System.Int32 baseBlockSize Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.MockInt32Factory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.MockInt32Factory.html",
    "title": "Class MockVariableInt32BlockPostingsFormat.MockInt32Factory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockVariableInt32BlockPostingsFormat.MockInt32Factory If the first value is <= 3, writes baseBlockSize vInts at once, otherwise writes 2*baseBlockSize vInts. Inheritance System.Object Int32StreamFactory MockVariableInt32BlockPostingsFormat.MockInt32Factory 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.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax public class MockInt32Factory : Int32StreamFactory Constructors | Improve this Doc View Source MockInt32Factory(Int32) Declaration public MockInt32Factory(int baseBlockSize) Parameters Type Name Description System.Int32 baseBlockSize Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Declaration public override Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput Overrides Int32StreamFactory.CreateOutput(Directory, String, IOContext) | Improve this Doc View Source OpenInput(Directory, String, IOContext) Declaration public override Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput Overrides Int32StreamFactory.OpenInput(Directory, String, IOContext)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.html",
    "title": "Namespace Lucene.Net.Codecs.MockRandom | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.MockRandom <!-- 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. --> Frankenstein codec for testing that pieces together random components. Classes MockRandomPostingsFormat Randomly combines terms index impl w/ postings impls."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.MockRandomPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.MockRandomPostingsFormat.html",
    "title": "Class MockRandomPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockRandomPostingsFormat Randomly combines terms index impl w/ postings impls. Inheritance System.Object PostingsFormat MockRandomPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.MockRandom Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"MockRandom\")] public sealed class MockRandomPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockRandomPostingsFormat() Declaration public MockRandomPostingsFormat() | Improve this Doc View Source MockRandomPostingsFormat(Random) Declaration public MockRandomPostingsFormat(Random random) Parameters Type Name Description System.Random random Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.html",
    "title": "Namespace Lucene.Net.Codecs.MockSep | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.MockSep <!-- 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. --> Very simple implementations of Lucene.Net.Codecs.Sep for testing. Classes MockSepPostingsFormat A silly codec that simply writes each file separately as single vInts. Don't use this (performance will be poor)! This is here just to test the core sep codec classes. MockSingleInt32Factory Encodes ints directly as vInts with MockSingleInt32IndexOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MockSingleInt32IndexInput Reads IndexInputs written with MockSingleInt32IndexOutput . NOTE: this class is just for demonstration purposes(it is a very slow way to read a block of ints). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MockSingleInt32IndexInput.MockReader Just reads a vInt directly from the file. MockSingleInt32IndexOutput Writes ints directly to the file (not in blocks) as vInt. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSepPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSepPostingsFormat.html",
    "title": "Class MockSepPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockSepPostingsFormat A silly codec that simply writes each file separately as single vInts. Don't use this (performance will be poor)! This is here just to test the core sep codec classes. Inheritance System.Object PostingsFormat MockSepPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"MockSep\")] public sealed class MockSepPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockSepPostingsFormat() Declaration public MockSepPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32Factory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32Factory.html",
    "title": "Class MockSingleInt32Factory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockSingleInt32Factory Encodes ints directly as vInts with MockSingleInt32IndexOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32StreamFactory MockSingleInt32Factory 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.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockSingleInt32Factory : Int32StreamFactory Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Declaration public override Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput Overrides Int32StreamFactory.CreateOutput(Directory, String, IOContext) | Improve this Doc View Source OpenInput(Directory, String, IOContext) Declaration public override Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput Overrides Int32StreamFactory.OpenInput(Directory, String, IOContext)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.html",
    "title": "Class MockSingleInt32IndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockSingleInt32IndexInput Reads IndexInputs written with MockSingleInt32IndexOutput . NOTE: this class is just for demonstration purposes(it is a very slow way to read a block of ints). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput MockSingleInt32IndexInput Implements System.IDisposable Inherited Members Int32IndexInput.Dispose() 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.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockSingleInt32IndexInput : Int32IndexInput, IDisposable Constructors | Improve this Doc View Source MockSingleInt32IndexInput(Directory, String, IOContext) Declaration public MockSingleInt32IndexInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.MockReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.MockReader.html",
    "title": "Class MockSingleInt32IndexInput.MockReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockSingleInt32IndexInput.MockReader Just reads a vInt directly from the file. Inheritance System.Object Int32IndexInput.Reader MockSingleInt32IndexInput.MockReader 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.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockReader : Int32IndexInput.Reader Constructors | Improve this Doc View Source MockReader(IndexInput) Declaration public MockReader(IndexInput in) Parameters Type Name Description IndexInput in Methods | Improve this Doc View Source Next() Reads next single int. Declaration public override int Next() Returns Type Description System.Int32 Overrides Int32IndexInput.Reader.Next()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexOutput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexOutput.html",
    "title": "Class MockSingleInt32IndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockSingleInt32IndexOutput Writes ints directly to the file (not in blocks) as vInt. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput MockSingleInt32IndexOutput Implements System.IDisposable Inherited Members Int32IndexOutput.Dispose() 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.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockSingleInt32IndexOutput : Int32IndexOutput, IDisposable Constructors | Improve this Doc View Source MockSingleInt32IndexOutput(Directory, String, IOContext) Declaration public MockSingleInt32IndexOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.html",
    "title": "Namespace Lucene.Net.Codecs.NestedPulsing | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.NestedPulsing <!-- 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. --> Codec for testing that wraps PulsingPostingsFormat with itself. Classes NestedPulsingPostingsFormat Pulsing(1, Pulsing(2, Lucene41)) This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.NestedPulsingPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.NestedPulsingPostingsFormat.html",
    "title": "Class NestedPulsingPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NestedPulsingPostingsFormat Pulsing(1, Pulsing(2, Lucene41)) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat NestedPulsingPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.NestedPulsing Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"NestedPulsing\")] public sealed class NestedPulsingPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source NestedPulsingPostingsFormat() Declaration public NestedPulsingPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.html",
    "title": "Namespace Lucene.Net.Codecs.RAMOnly | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.RAMOnly <!-- 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. --> Codec for testing that never writes to disk. Classes RAMOnlyPostingsFormat Stores all postings data in RAM, but writes a small token (header + single int) to identify which \"slot\" the index is using in RAM dictionary. NOTE: this codec sorts terms by reverse-unicode-order!"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.RAMOnlyPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.RAMOnlyPostingsFormat.html",
    "title": "Class RAMOnlyPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RAMOnlyPostingsFormat Stores all postings data in RAM, but writes a small token (header + single int) to identify which \"slot\" the index is using in RAM dictionary. NOTE: this codec sorts terms by reverse-unicode-order! Inheritance System.Object PostingsFormat RAMOnlyPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.RAMOnly Assembly : Lucene.Net.TestFramework.dll Syntax [PostingsFormatName(\"RAMOnly\")] public sealed class RAMOnlyPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source RAMOnlyPostingsFormat() Declaration public RAMOnlyPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState writeState) Parameters Type Name Description SegmentWriteState writeState Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState readState) Parameters Type Name Description SegmentReadState readState Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestCodecFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestCodecFactory.html",
    "title": "Class TestCodecFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TestCodecFactory LUCENENET specific class used to add the codecs from the test framework. Inheritance System.Object NamedServiceFactory < Codec > DefaultCodecFactory TestCodecFactory Implements ICodecFactory IServiceListable Inherited Members DefaultCodecFactory.CustomCodecTypes DefaultCodecFactory.ScanForCodecs(IEnumerable<Assembly>) DefaultCodecFactory.ScanForCodecs(Assembly) DefaultCodecFactory.PutCodecType(Type) DefaultCodecFactory.GetCodec(String) DefaultCodecFactory.GetCodec(Type) DefaultCodecFactory.NewCodec(Type) DefaultCodecFactory.GetCodecType(String) DefaultCodecFactory.AvailableServices NamedServiceFactory<Codec>.m_initializationLock NamedServiceFactory<Codec>.EnsureInitialized() NamedServiceFactory<Codec>.CodecsAssembly NamedServiceFactory<Codec>.GetServiceName(Type) NamedServiceFactory<Codec>.GetCanonicalName(Type) NamedServiceFactory<Codec>.IsFullyTrusted 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.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class TestCodecFactory : DefaultCodecFactory, ICodecFactory, IServiceListable Methods | Improve this Doc View Source Initialize() Declaration protected override void Initialize() Overrides DefaultCodecFactory.Initialize() | Improve this Doc View Source IsServiceType(Type) Declaration protected override bool IsServiceType(Type type) Parameters Type Name Description System.Type type Returns Type Description System.Boolean Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.Codec>.IsServiceType(System.Type) Implements ICodecFactory IServiceListable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestDocValuesFormatFactory.html",
    "title": "Class TestDocValuesFormatFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TestDocValuesFormatFactory LUCENENET specific class used to add the DocValuesFormats from the test framework. Inheritance System.Object NamedServiceFactory < DocValuesFormat > DefaultDocValuesFormatFactory TestDocValuesFormatFactory Implements IDocValuesFormatFactory IServiceListable Inherited Members DefaultDocValuesFormatFactory.CustomDocValuesFormatTypes DefaultDocValuesFormatFactory.ScanForDocValuesFormats(IEnumerable<Assembly>) DefaultDocValuesFormatFactory.ScanForDocValuesFormats(Assembly) DefaultDocValuesFormatFactory.PutDocValuesFormatType(Type) DefaultDocValuesFormatFactory.GetDocValuesFormat(String) DefaultDocValuesFormatFactory.GetDocValuesFormat(Type) DefaultDocValuesFormatFactory.NewDocValuesFormat(Type) DefaultDocValuesFormatFactory.GetDocValuesFormatType(String) DefaultDocValuesFormatFactory.AvailableServices NamedServiceFactory<DocValuesFormat>.m_initializationLock NamedServiceFactory<DocValuesFormat>.EnsureInitialized() NamedServiceFactory<DocValuesFormat>.CodecsAssembly NamedServiceFactory<DocValuesFormat>.IsServiceType(Type) NamedServiceFactory<DocValuesFormat>.GetServiceName(Type) NamedServiceFactory<DocValuesFormat>.GetCanonicalName(Type) NamedServiceFactory<DocValuesFormat>.IsFullyTrusted 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.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class TestDocValuesFormatFactory : DefaultDocValuesFormatFactory, IDocValuesFormatFactory, IServiceListable Methods | Improve this Doc View Source Initialize() Declaration protected override void Initialize() Overrides DefaultDocValuesFormatFactory.Initialize() Implements IDocValuesFormatFactory IServiceListable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestPostingsFormatFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestPostingsFormatFactory.html",
    "title": "Class TestPostingsFormatFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TestPostingsFormatFactory LUCENENET specific class used to add the PostingsFormats from the test framework. Inheritance System.Object NamedServiceFactory < PostingsFormat > DefaultPostingsFormatFactory TestPostingsFormatFactory Implements IPostingsFormatFactory IServiceListable Inherited Members DefaultPostingsFormatFactory.CustomPostingsFormatTypes DefaultPostingsFormatFactory.ScanForPostingsFormats(IEnumerable<Assembly>) DefaultPostingsFormatFactory.ScanForPostingsFormats(Assembly) DefaultPostingsFormatFactory.PutPostingsFormatType(Type) DefaultPostingsFormatFactory.GetPostingsFormat(String) DefaultPostingsFormatFactory.GetPostingsFormat(Type) DefaultPostingsFormatFactory.NewPostingsFormat(Type) DefaultPostingsFormatFactory.GetPostingsFormatType(String) DefaultPostingsFormatFactory.AvailableServices NamedServiceFactory<PostingsFormat>.m_initializationLock NamedServiceFactory<PostingsFormat>.EnsureInitialized() NamedServiceFactory<PostingsFormat>.CodecsAssembly NamedServiceFactory<PostingsFormat>.IsServiceType(Type) NamedServiceFactory<PostingsFormat>.GetServiceName(Type) NamedServiceFactory<PostingsFormat>.GetCanonicalName(Type) NamedServiceFactory<PostingsFormat>.IsFullyTrusted 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.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class TestPostingsFormatFactory : DefaultPostingsFormatFactory, IPostingsFormatFactory, IServiceListable Methods | Improve this Doc View Source Initialize() Declaration protected override void Initialize() Overrides DefaultPostingsFormatFactory.Initialize() Implements IPostingsFormatFactory IServiceListable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.AssertionException.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.AssertionException.html",
    "title": "Class AssertionException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertionException Thrown to indicate that an assertion has failed. Inheritance System.Object System.Exception AssertionException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Diagnostics Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertionException : Exception, ISerializable Constructors | Improve this Doc View Source AssertionException() Constructs an AssertionException with no detail message. Declaration public AssertionException() | Improve this Doc View Source AssertionException(String) Constructs an AssertionException with the provided message . Declaration public AssertionException(string message) Parameters Type Name Description System.String message Value to be used as the assertion message. | Improve this Doc View Source AssertionException(String, Exception) Constructs an AssertionException with the provided message and innerException . Declaration public AssertionException(string message, Exception innerException) Parameters Type Name Description System.String message Value to be used as the assertion message. System.Exception innerException The exception that is the cause of the current exception, or a null reference ( Nothing in Visual Basic) if no inner exception is specified. Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.html",
    "title": "Namespace Lucene.Net.Diagnostics | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Diagnostics Classes AssertionException Thrown to indicate that an assertion has failed."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.html",
    "title": "Lucene.Net | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net <!-- 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. --> Top-level package. Classes RandomExtensions Extensions to System.Random in order to randomly generate types and specially formatted strings that assist with testing custom extensions to Lucene.Net."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AlcoholicMergePolicy.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AlcoholicMergePolicy.html",
    "title": "Class AlcoholicMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AlcoholicMergePolicy Merge policy for testing, it is like an alcoholic. It drinks (merges) at night, and randomly decides what to drink. During the daytime it sleeps. If tests pass with this, then they are likely to pass with any bizarro merge policy users might write. It is a fine bottle of champagne (Ordered by Martijn). Inheritance System.Object MergePolicy LogMergePolicy AlcoholicMergePolicy Implements System.IDisposable Inherited Members LogMergePolicy.LEVEL_LOG_SPAN LogMergePolicy.DEFAULT_MERGE_FACTOR LogMergePolicy.DEFAULT_MAX_MERGE_DOCS LogMergePolicy.DEFAULT_NO_CFS_RATIO LogMergePolicy.m_mergeFactor LogMergePolicy.m_minMergeSize LogMergePolicy.m_maxMergeSize LogMergePolicy.m_maxMergeSizeForForcedMerge LogMergePolicy.m_maxMergeDocs LogMergePolicy.m_calibrateSizeByDeletes LogMergePolicy.IsVerbose LogMergePolicy.Message(String) LogMergePolicy.MergeFactor LogMergePolicy.CalibrateSizeByDeletes LogMergePolicy.Dispose(Boolean) LogMergePolicy.SizeDocs(SegmentCommitInfo) LogMergePolicy.SizeBytes(SegmentCommitInfo) LogMergePolicy.IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedDeletesMerges(SegmentInfos) LogMergePolicy.FindMerges(MergeTrigger, SegmentInfos) LogMergePolicy.MaxMergeDocs LogMergePolicy.ToString() MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AlcoholicMergePolicy : LogMergePolicy, IDisposable Constructors | Improve this Doc View Source AlcoholicMergePolicy(TimeZoneInfo, Random) Declaration public AlcoholicMergePolicy(TimeZoneInfo timeZone, Random random) Parameters Type Name Description System.TimeZoneInfo timeZone System.Random random Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AllDeletedFilterReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AllDeletedFilterReader.html",
    "title": "Class AllDeletedFilterReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AllDeletedFilterReader Filters the incoming reader and makes all documents appear deleted. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader AllDeletedFilterReader Implements System.IDisposable Inherited Members FilterAtomicReader.Unwrap(AtomicReader) FilterAtomicReader.m_input FilterAtomicReader.FieldInfos FilterAtomicReader.GetTermVectors(Int32) FilterAtomicReader.MaxDoc FilterAtomicReader.Document(Int32, StoredFieldVisitor) FilterAtomicReader.DoClose() FilterAtomicReader.Fields FilterAtomicReader.ToString() FilterAtomicReader.GetNumericDocValues(String) FilterAtomicReader.GetBinaryDocValues(String) FilterAtomicReader.GetSortedDocValues(String) FilterAtomicReader.GetSortedSetDocValues(String) FilterAtomicReader.GetNormValues(String) FilterAtomicReader.GetDocsWithField(String) FilterAtomicReader.CheckIntegrity() AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AllDeletedFilterReader : FilterAtomicReader, IDisposable Constructors | Improve this Doc View Source AllDeletedFilterReader(AtomicReader) Declaration public AllDeletedFilterReader(AtomicReader in) Parameters Type Name Description AtomicReader in Properties | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides FilterAtomicReader.LiveDocs | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides FilterAtomicReader.NumDocs Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingAtomicReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingAtomicReader.html",
    "title": "Class AssertingAtomicReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingAtomicReader A FilterAtomicReader that can be used to apply additional checks for tests. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader AssertingAtomicReader Implements System.IDisposable Inherited Members FilterAtomicReader.Unwrap(AtomicReader) FilterAtomicReader.m_input FilterAtomicReader.FieldInfos FilterAtomicReader.NumDocs FilterAtomicReader.MaxDoc FilterAtomicReader.Document(Int32, StoredFieldVisitor) FilterAtomicReader.DoClose() FilterAtomicReader.ToString() FilterAtomicReader.CheckIntegrity() AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingAtomicReader : FilterAtomicReader, IDisposable Constructors | Improve this Doc View Source AssertingAtomicReader(AtomicReader) Declaration public AssertingAtomicReader(AtomicReader in) Parameters Type Name Description AtomicReader in Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides FilterAtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides FilterAtomicReader.LiveDocs Methods | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides FilterAtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides FilterAtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides FilterAtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides FilterAtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides FilterAtomicReader.GetTermVectors(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBinaryDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBinaryDocValues.html",
    "title": "Class AssertingBinaryDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingBinaryDocValues Wraps a BinaryDocValues but with additional asserts Inheritance System.Object BinaryDocValues AssertingBinaryDocValues 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBinaryDocValues : BinaryDocValues Constructors | Improve this Doc View Source AssertingBinaryDocValues(BinaryDocValues, Int32) Declaration public AssertingBinaryDocValues(BinaryDocValues in, int maxDoc) Parameters Type Name Description BinaryDocValues in System.Int32 maxDoc Methods | Improve this Doc View Source Get(Int32, BytesRef) Declaration public override void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result Overrides BinaryDocValues.Get(Int32, BytesRef)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBits.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBits.html",
    "title": "Class AssertingBits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingBits Wraps a IBits but with additional asserts Inheritance System.Object AssertingBits Implements IBits 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBits : IBits Constructors | Improve this Doc View Source AssertingBits(IBits) Declaration public AssertingBits(IBits in) Parameters Type Name Description IBits in Properties | Improve this Doc View Source Length Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public virtual bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean Implements IBits"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDirectoryReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDirectoryReader.html",
    "title": "Class AssertingDirectoryReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingDirectoryReader A DirectoryReader that wraps all its subreaders with AssertingAtomicReader Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < AtomicReader > DirectoryReader FilterDirectoryReader AssertingDirectoryReader Implements System.IDisposable Inherited Members FilterDirectoryReader.m_input FilterDirectoryReader.DoOpenIfChanged() FilterDirectoryReader.DoOpenIfChanged(IndexCommit) FilterDirectoryReader.DoOpenIfChanged(IndexWriter, Boolean) FilterDirectoryReader.Version FilterDirectoryReader.IsCurrent() FilterDirectoryReader.IndexCommit FilterDirectoryReader.DoClose() DirectoryReader.DEFAULT_TERMS_INDEX_DIVISOR DirectoryReader.m_directory DirectoryReader.Open(Directory) DirectoryReader.Open(Directory, Int32) DirectoryReader.Open(IndexWriter, Boolean) DirectoryReader.Open(IndexCommit) DirectoryReader.Open(IndexCommit, Int32) DirectoryReader.OpenIfChanged(DirectoryReader) DirectoryReader.OpenIfChanged(DirectoryReader, IndexCommit) DirectoryReader.OpenIfChanged(DirectoryReader, IndexWriter, Boolean) DirectoryReader.ListCommits(Directory) DirectoryReader.IndexExists(Directory) DirectoryReader.Directory BaseCompositeReader<AtomicReader>.GetTermVectors(Int32) BaseCompositeReader<AtomicReader>.NumDocs BaseCompositeReader<AtomicReader>.MaxDoc BaseCompositeReader<AtomicReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<AtomicReader>.DocFreq(Term) BaseCompositeReader<AtomicReader>.TotalTermFreq(Term) BaseCompositeReader<AtomicReader>.GetSumDocFreq(String) BaseCompositeReader<AtomicReader>.GetDocCount(String) BaseCompositeReader<AtomicReader>.GetSumTotalTermFreq(String) BaseCompositeReader<AtomicReader>.ReaderIndex(Int32) BaseCompositeReader<AtomicReader>.ReaderBase(Int32) BaseCompositeReader<AtomicReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingDirectoryReader : FilterDirectoryReader, IDisposable Constructors | Improve this Doc View Source AssertingDirectoryReader(DirectoryReader) Declaration public AssertingDirectoryReader(DirectoryReader in) Parameters Type Name Description DirectoryReader in Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey Methods | Improve this Doc View Source DoWrapDirectoryReader(DirectoryReader) Declaration protected override DirectoryReader DoWrapDirectoryReader(DirectoryReader in) Parameters Type Name Description DirectoryReader in Returns Type Description DirectoryReader Overrides FilterDirectoryReader.DoWrapDirectoryReader(DirectoryReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDocsEnum.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDocsEnum.html",
    "title": "Class AssertingDocsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingDocsEnum Wraps a DocsEnum with additional checks Inheritance System.Object DocIdSetIterator DocsEnum FilterAtomicReader.FilterDocsEnum AssertingDocsEnum Inherited Members FilterAtomicReader.FilterDocsEnum.m_input FilterAtomicReader.FilterDocsEnum.Attributes FilterAtomicReader.FilterDocsEnum.GetCost() DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingDocsEnum : FilterAtomicReader.FilterDocsEnum Constructors | Improve this Doc View Source AssertingDocsEnum(DocsEnum) Declaration public AssertingDocsEnum(DocsEnum in) Parameters Type Name Description DocsEnum in | Improve this Doc View Source AssertingDocsEnum(DocsEnum, Boolean) Declaration public AssertingDocsEnum(DocsEnum in, bool failOnUnsupportedDocID) Parameters Type Name Description DocsEnum in System.Boolean failOnUnsupportedDocID Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides FilterAtomicReader.FilterDocsEnum.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides FilterAtomicReader.FilterDocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides FilterAtomicReader.FilterDocsEnum.Advance(Int32) | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides FilterAtomicReader.FilterDocsEnum.NextDoc()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingFields.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingFields.html",
    "title": "Class AssertingFields | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingFields Wraps a Fields but with additional asserts Inheritance System.Object Fields FilterAtomicReader.FilterFields AssertingFields Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable Inherited Members FilterAtomicReader.FilterFields.m_input FilterAtomicReader.FilterFields.Count Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingFields : FilterAtomicReader.FilterFields, IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source AssertingFields(Fields) Declaration public AssertingFields(Fields input) Parameters Type Name Description Fields input Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides FilterAtomicReader.FilterFields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides FilterAtomicReader.FilterFields.GetTerms(String) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingNumericDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingNumericDocValues.html",
    "title": "Class AssertingNumericDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingNumericDocValues Wraps a NumericDocValues but with additional asserts Inheritance System.Object NumericDocValues AssertingNumericDocValues 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingNumericDocValues : NumericDocValues Constructors | Improve this Doc View Source AssertingNumericDocValues(NumericDocValues, Int32) Declaration public AssertingNumericDocValues(NumericDocValues in, int maxDoc) Parameters Type Name Description NumericDocValues in System.Int32 maxDoc Methods | Improve this Doc View Source Get(Int32) Declaration public override long Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedDocValues.html",
    "title": "Class AssertingSortedDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingSortedDocValues Wraps a SortedDocValues but with additional asserts Inheritance System.Object BinaryDocValues SortedDocValues AssertingSortedDocValues Inherited Members SortedDocValues.GetTermsEnum() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingSortedDocValues : SortedDocValues Constructors | Improve this Doc View Source AssertingSortedDocValues(SortedDocValues, Int32) Declaration public AssertingSortedDocValues(SortedDocValues in, int maxDoc) Parameters Type Name Description SortedDocValues in System.Int32 maxDoc Properties | Improve this Doc View Source ValueCount Declaration public override int ValueCount { get; } Property Value Type Description System.Int32 Overrides SortedDocValues.ValueCount Methods | Improve this Doc View Source Get(Int32, BytesRef) Declaration public override void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result Overrides SortedDocValues.Get(Int32, BytesRef) | Improve this Doc View Source GetOrd(Int32) Declaration public override int GetOrd(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 Overrides SortedDocValues.GetOrd(Int32) | Improve this Doc View Source LookupOrd(Int32, BytesRef) Declaration public override void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord BytesRef result Overrides SortedDocValues.LookupOrd(Int32, BytesRef) | Improve this Doc View Source LookupTerm(BytesRef) Declaration public override int LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Returns Type Description System.Int32 Overrides SortedDocValues.LookupTerm(BytesRef)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedSetDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedSetDocValues.html",
    "title": "Class AssertingSortedSetDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingSortedSetDocValues Wraps a SortedSetDocValues but with additional asserts Inheritance System.Object SortedSetDocValues AssertingSortedSetDocValues Inherited Members SortedSetDocValues.NO_MORE_ORDS SortedSetDocValues.GetTermsEnum() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingSortedSetDocValues : SortedSetDocValues Constructors | Improve this Doc View Source AssertingSortedSetDocValues(SortedSetDocValues, Int32) Declaration public AssertingSortedSetDocValues(SortedSetDocValues in, int maxDoc) Parameters Type Name Description SortedSetDocValues in System.Int32 maxDoc Properties | Improve this Doc View Source ValueCount Declaration public override long ValueCount { get; } Property Value Type Description System.Int64 Overrides SortedSetDocValues.ValueCount Methods | Improve this Doc View Source LookupOrd(Int64, BytesRef) Declaration public override void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord BytesRef result Overrides SortedSetDocValues.LookupOrd(Int64, BytesRef) | Improve this Doc View Source LookupTerm(BytesRef) Declaration public override long LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Returns Type Description System.Int64 Overrides SortedSetDocValues.LookupTerm(BytesRef) | Improve this Doc View Source NextOrd() Declaration public override long NextOrd() Returns Type Description System.Int64 Overrides SortedSetDocValues.NextOrd() | Improve this Doc View Source SetDocument(Int32) Declaration public override void SetDocument(int docID) Parameters Type Name Description System.Int32 docID Overrides SortedSetDocValues.SetDocument(Int32)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingTerms.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingTerms.html",
    "title": "Class AssertingTerms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingTerms Wraps a Terms but with additional asserts Inheritance System.Object Terms FilterAtomicReader.FilterTerms AssertingTerms Inherited Members FilterAtomicReader.FilterTerms.m_input FilterAtomicReader.FilterTerms.Comparer FilterAtomicReader.FilterTerms.Count FilterAtomicReader.FilterTerms.SumTotalTermFreq FilterAtomicReader.FilterTerms.SumDocFreq FilterAtomicReader.FilterTerms.DocCount FilterAtomicReader.FilterTerms.HasFreqs FilterAtomicReader.FilterTerms.HasOffsets FilterAtomicReader.FilterTerms.HasPositions FilterAtomicReader.FilterTerms.HasPayloads Terms.EMPTY_ARRAY 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingTerms : FilterAtomicReader.FilterTerms Constructors | Improve this Doc View Source AssertingTerms(Terms) Declaration public AssertingTerms(Terms input) Parameters Type Name Description Terms input Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides FilterAtomicReader.FilterTerms.GetIterator(TermsEnum) | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton automaton, BytesRef bytes) Parameters Type Name Description CompiledAutomaton automaton BytesRef bytes Returns Type Description TermsEnum Overrides Terms.Intersect(CompiledAutomaton, BytesRef)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseCompressingDocValuesFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseCompressingDocValuesFormatTestCase.html",
    "title": "Class BaseCompressingDocValuesFormatTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseCompressingDocValuesFormatTestCase Extends BaseDocValuesFormatTestCase to add compression checks. Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseDocValuesFormatTestCase BaseCompressingDocValuesFormatTestCase Inherited Members BaseDocValuesFormatTestCase.AddRandomFields(Document) BaseDocValuesFormatTestCase.TestOneNumber() BaseDocValuesFormatTestCase.TestOneSingle() BaseDocValuesFormatTestCase.TestTwoNumbers() BaseDocValuesFormatTestCase.TestTwoBinaryValues() BaseDocValuesFormatTestCase.TestTwoFieldsMixed() BaseDocValuesFormatTestCase.TestThreeFieldsMixed() BaseDocValuesFormatTestCase.TestThreeFieldsMixed2() BaseDocValuesFormatTestCase.TestTwoDocumentsNumeric() BaseDocValuesFormatTestCase.TestTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestBigNumericRange() BaseDocValuesFormatTestCase.TestBigNumericRange2() BaseDocValuesFormatTestCase.TestBytes() BaseDocValuesFormatTestCase.TestBytesTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestSortedBytes() BaseDocValuesFormatTestCase.TestSortedBytesTwoDocuments() BaseDocValuesFormatTestCase.TestSortedBytesThreeDocuments() BaseDocValuesFormatTestCase.TestSortedBytesTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestSortedMergeAwayAllValues() BaseDocValuesFormatTestCase.TestBytesWithNewline() BaseDocValuesFormatTestCase.TestMissingSortedBytes() BaseDocValuesFormatTestCase.TestSortedTermsEnum() BaseDocValuesFormatTestCase.TestEmptySortedBytes() BaseDocValuesFormatTestCase.TestEmptyBytes() BaseDocValuesFormatTestCase.TestVeryLargeButLegalBytes() BaseDocValuesFormatTestCase.TestVeryLargeButLegalSortedBytes() BaseDocValuesFormatTestCase.TestCodecUsesOwnBytes() BaseDocValuesFormatTestCase.TestCodecUsesOwnSortedBytes() BaseDocValuesFormatTestCase.TestCodecUsesOwnBytesEachTime() BaseDocValuesFormatTestCase.TestCodecUsesOwnSortedBytesEachTime() BaseDocValuesFormatTestCase.TestDocValuesSimple() BaseDocValuesFormatTestCase.TestRandomSortedBytes() BaseDocValuesFormatTestCase.TestBooleanNumericsVsStoredFields() BaseDocValuesFormatTestCase.TestByteNumericsVsStoredFields() BaseDocValuesFormatTestCase.TestByteMissingVsFieldCache() BaseDocValuesFormatTestCase.TestInt16NumericsVsStoredFields() BaseDocValuesFormatTestCase.TestInt16MissingVsFieldCache() BaseDocValuesFormatTestCase.TestInt32NumericsVsStoredFields() BaseDocValuesFormatTestCase.TestInt32MissingVsFieldCache() BaseDocValuesFormatTestCase.TestInt64NumericsVsStoredFields() BaseDocValuesFormatTestCase.TestInt64MissingVsFieldCache() BaseDocValuesFormatTestCase.TestBinaryFixedLengthVsStoredFields() BaseDocValuesFormatTestCase.TestBinaryVariableLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedFixedLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedFixedLengthVsFieldCache() BaseDocValuesFormatTestCase.TestSortedVariableLengthVsFieldCache() BaseDocValuesFormatTestCase.TestSortedVariableLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetOneValue() BaseDocValuesFormatTestCase.TestSortedSetTwoFields() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestSortedSetTwoValues() BaseDocValuesFormatTestCase.TestSortedSetTwoValuesUnordered() BaseDocValuesFormatTestCase.TestSortedSetThreeValuesTwoDocs() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsLastMissing() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsLastMissingMerge() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsFirstMissing() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsFirstMissingMerge() BaseDocValuesFormatTestCase.TestSortedSetMergeAwayAllValues() BaseDocValuesFormatTestCase.TestSortedSetTermsEnum() BaseDocValuesFormatTestCase.TestSortedSetFixedLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetVariableLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetFixedLengthSingleValuedVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetVariableLengthSingleValuedVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetFixedLengthVsUninvertedField() BaseDocValuesFormatTestCase.TestSortedSetVariableLengthVsUninvertedField() BaseDocValuesFormatTestCase.TestGCDCompression() BaseDocValuesFormatTestCase.TestZeros() BaseDocValuesFormatTestCase.TestZeroOrMin() BaseDocValuesFormatTestCase.TestTwoNumbersOneMissing() BaseDocValuesFormatTestCase.TestTwoNumbersOneMissingWithMerging() BaseDocValuesFormatTestCase.TestThreeNumbersOneMissingWithMerging() BaseDocValuesFormatTestCase.TestTwoBytesOneMissing() BaseDocValuesFormatTestCase.TestTwoBytesOneMissingWithMerging() BaseDocValuesFormatTestCase.TestThreeBytesOneMissingWithMerging() BaseDocValuesFormatTestCase.TestHugeBinaryValues() BaseDocValuesFormatTestCase.TestHugeBinaryValueLimit() BaseDocValuesFormatTestCase.TestThreads() BaseDocValuesFormatTestCase.TestThreads2() BaseDocValuesFormatTestCase.TestEmptyBinaryValueOnPageSizes() BaseDocValuesFormatTestCase.CodecAcceptsHugeBinaryValues(String) BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseCompressingDocValuesFormatTestCase : BaseDocValuesFormatTestCase Methods | Improve this Doc View Source TestDateCompression() Declaration [Test] public virtual void TestDateCompression() | Improve this Doc View Source TestSingleBigValueCompression() Declaration [Test] public virtual void TestSingleBigValueCompression() | Improve this Doc View Source TestUniqueValuesCompression() Declaration [Test] public virtual void TestUniqueValuesCompression()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseDocValuesFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseDocValuesFormatTestCase.html",
    "title": "Class BaseDocValuesFormatTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseDocValuesFormatTestCase Abstract class to do basic tests for a DocValuesFormat . NOTE: this test focuses on the docvalues impl, nothing else. The [stretch] goal is for this test to be so thorough in testing a new DocValuesFormat that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given DocValuesFormat that this test fails to catch then this test needs to be improved! Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseDocValuesFormatTestCase BaseCompressingDocValuesFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseDocValuesFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document doc) Parameters Type Name Description Document doc Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source CodecAcceptsHugeBinaryValues(String) Declaration protected virtual bool CodecAcceptsHugeBinaryValues(string field) Parameters Type Name Description System.String field Returns Type Description System.Boolean | Improve this Doc View Source TestBigNumericRange() Declaration [Test] public virtual void TestBigNumericRange() | Improve this Doc View Source TestBigNumericRange2() Declaration [Test] public virtual void TestBigNumericRange2() | Improve this Doc View Source TestBinaryFixedLengthVsStoredFields() Declaration [Test] public virtual void TestBinaryFixedLengthVsStoredFields() | Improve this Doc View Source TestBinaryVariableLengthVsStoredFields() Declaration [Test] public virtual void TestBinaryVariableLengthVsStoredFields() | Improve this Doc View Source TestBooleanNumericsVsStoredFields() Declaration [Test] public virtual void TestBooleanNumericsVsStoredFields() | Improve this Doc View Source TestByteMissingVsFieldCache() Declaration [Test] public virtual void TestByteMissingVsFieldCache() | Improve this Doc View Source TestByteNumericsVsStoredFields() Declaration [Test] public virtual void TestByteNumericsVsStoredFields() | Improve this Doc View Source TestBytes() Declaration [Test] public virtual void TestBytes() | Improve this Doc View Source TestBytesTwoDocumentsMerged() Declaration [Test] public virtual void TestBytesTwoDocumentsMerged() | Improve this Doc View Source TestBytesWithNewline() Declaration [Test] public virtual void TestBytesWithNewline() | Improve this Doc View Source TestCodecUsesOwnBytes() Declaration [Test] public virtual void TestCodecUsesOwnBytes() | Improve this Doc View Source TestCodecUsesOwnBytesEachTime() Declaration [Test] public virtual void TestCodecUsesOwnBytesEachTime() | Improve this Doc View Source TestCodecUsesOwnSortedBytes() Declaration [Test] public virtual void TestCodecUsesOwnSortedBytes() | Improve this Doc View Source TestCodecUsesOwnSortedBytesEachTime() Declaration [Test] public virtual void TestCodecUsesOwnSortedBytesEachTime() | Improve this Doc View Source TestDocValuesSimple() Simple test case to show how to use the API Declaration [Test] public virtual void TestDocValuesSimple() | Improve this Doc View Source TestEmptyBinaryValueOnPageSizes() Declaration [Test] public virtual void TestEmptyBinaryValueOnPageSizes() | Improve this Doc View Source TestEmptyBytes() Declaration [Test] public virtual void TestEmptyBytes() | Improve this Doc View Source TestEmptySortedBytes() Declaration [Test] public virtual void TestEmptySortedBytes() | Improve this Doc View Source TestGCDCompression() Declaration [Test] public virtual void TestGCDCompression() | Improve this Doc View Source TestHugeBinaryValueLimit() Declaration [Test] public virtual void TestHugeBinaryValueLimit() | Improve this Doc View Source TestHugeBinaryValues() Declaration [Test] public virtual void TestHugeBinaryValues() | Improve this Doc View Source TestInt16MissingVsFieldCache() Declaration [Test] public virtual void TestInt16MissingVsFieldCache() | Improve this Doc View Source TestInt16NumericsVsStoredFields() Declaration [Test] public virtual void TestInt16NumericsVsStoredFields() | Improve this Doc View Source TestInt32MissingVsFieldCache() Declaration [Test] public virtual void TestInt32MissingVsFieldCache() | Improve this Doc View Source TestInt32NumericsVsStoredFields() Declaration [Test] public virtual void TestInt32NumericsVsStoredFields() | Improve this Doc View Source TestInt64MissingVsFieldCache() Declaration [Test] public virtual void TestInt64MissingVsFieldCache() | Improve this Doc View Source TestInt64NumericsVsStoredFields() Declaration [Test] public virtual void TestInt64NumericsVsStoredFields() | Improve this Doc View Source TestMissingSortedBytes() Declaration [Test] public virtual void TestMissingSortedBytes() | Improve this Doc View Source TestOneNumber() Declaration [Test] public virtual void TestOneNumber() | Improve this Doc View Source TestOneSingle() Declaration [Test] public virtual void TestOneSingle() | Improve this Doc View Source TestRandomSortedBytes() Declaration [Test] public virtual void TestRandomSortedBytes() | Improve this Doc View Source TestSortedBytes() Declaration [Test] public virtual void TestSortedBytes() | Improve this Doc View Source TestSortedBytesThreeDocuments() Declaration [Test] public virtual void TestSortedBytesThreeDocuments() | Improve this Doc View Source TestSortedBytesTwoDocuments() Declaration [Test] public virtual void TestSortedBytesTwoDocuments() | Improve this Doc View Source TestSortedBytesTwoDocumentsMerged() Declaration [Test] public virtual void TestSortedBytesTwoDocumentsMerged() | Improve this Doc View Source TestSortedFixedLengthVsFieldCache() Declaration [Test] public virtual void TestSortedFixedLengthVsFieldCache() | Improve this Doc View Source TestSortedFixedLengthVsStoredFields() Declaration [Test] public virtual void TestSortedFixedLengthVsStoredFields() | Improve this Doc View Source TestSortedMergeAwayAllValues() Declaration [Test] public virtual void TestSortedMergeAwayAllValues() | Improve this Doc View Source TestSortedSetFixedLengthSingleValuedVsStoredFields() Declaration [Test] public virtual void TestSortedSetFixedLengthSingleValuedVsStoredFields() | Improve this Doc View Source TestSortedSetFixedLengthVsStoredFields() Declaration [Test] public virtual void TestSortedSetFixedLengthVsStoredFields() | Improve this Doc View Source TestSortedSetFixedLengthVsUninvertedField() Declaration [Test] public virtual void TestSortedSetFixedLengthVsUninvertedField() | Improve this Doc View Source TestSortedSetMergeAwayAllValues() Declaration [Test] public virtual void TestSortedSetMergeAwayAllValues() | Improve this Doc View Source TestSortedSetOneValue() Declaration [Test] public virtual void TestSortedSetOneValue() | Improve this Doc View Source TestSortedSetTermsEnum() Declaration [Test] public virtual void TestSortedSetTermsEnum() | Improve this Doc View Source TestSortedSetThreeValuesTwoDocs() Declaration [Test] public virtual void TestSortedSetThreeValuesTwoDocs() | Improve this Doc View Source TestSortedSetTwoDocumentsFirstMissing() Declaration [Test] public virtual void TestSortedSetTwoDocumentsFirstMissing() | Improve this Doc View Source TestSortedSetTwoDocumentsFirstMissingMerge() Declaration [Test] public virtual void TestSortedSetTwoDocumentsFirstMissingMerge() | Improve this Doc View Source TestSortedSetTwoDocumentsLastMissing() Declaration [Test] public virtual void TestSortedSetTwoDocumentsLastMissing() | Improve this Doc View Source TestSortedSetTwoDocumentsLastMissingMerge() Declaration [Test] public virtual void TestSortedSetTwoDocumentsLastMissingMerge() | Improve this Doc View Source TestSortedSetTwoDocumentsMerged() Declaration [Test] public virtual void TestSortedSetTwoDocumentsMerged() | Improve this Doc View Source TestSortedSetTwoFields() Declaration [Test] public virtual void TestSortedSetTwoFields() | Improve this Doc View Source TestSortedSetTwoValues() Declaration [Test] public virtual void TestSortedSetTwoValues() | Improve this Doc View Source TestSortedSetTwoValuesUnordered() Declaration [Test] public virtual void TestSortedSetTwoValuesUnordered() | Improve this Doc View Source TestSortedSetVariableLengthSingleValuedVsStoredFields() Declaration [Test] public virtual void TestSortedSetVariableLengthSingleValuedVsStoredFields() | Improve this Doc View Source TestSortedSetVariableLengthVsStoredFields() Declaration [Test] public virtual void TestSortedSetVariableLengthVsStoredFields() | Improve this Doc View Source TestSortedSetVariableLengthVsUninvertedField() Declaration [Test] public virtual void TestSortedSetVariableLengthVsUninvertedField() | Improve this Doc View Source TestSortedTermsEnum() Declaration [Test] public virtual void TestSortedTermsEnum() | Improve this Doc View Source TestSortedVariableLengthVsFieldCache() Declaration [Test] public virtual void TestSortedVariableLengthVsFieldCache() | Improve this Doc View Source TestSortedVariableLengthVsStoredFields() Declaration [Test] public virtual void TestSortedVariableLengthVsStoredFields() | Improve this Doc View Source TestThreads() Tests dv against stored fields with threads (binary/numeric/sorted, no missing) Declaration [Test] public virtual void TestThreads() | Improve this Doc View Source TestThreads2() Tests dv against stored fields with threads (all types + missing) Declaration [Test] public virtual void TestThreads2() | Improve this Doc View Source TestThreeBytesOneMissingWithMerging() Declaration [Test] public virtual void TestThreeBytesOneMissingWithMerging() | Improve this Doc View Source TestThreeFieldsMixed() Declaration [Test] public virtual void TestThreeFieldsMixed() | Improve this Doc View Source TestThreeFieldsMixed2() Declaration [Test] public virtual void TestThreeFieldsMixed2() | Improve this Doc View Source TestThreeNumbersOneMissingWithMerging() Declaration [Test] public virtual void TestThreeNumbersOneMissingWithMerging() | Improve this Doc View Source TestTwoBinaryValues() Declaration [Test] public virtual void TestTwoBinaryValues() | Improve this Doc View Source TestTwoBytesOneMissing() Declaration [Test] public virtual void TestTwoBytesOneMissing() | Improve this Doc View Source TestTwoBytesOneMissingWithMerging() Declaration [Test] public virtual void TestTwoBytesOneMissingWithMerging() | Improve this Doc View Source TestTwoDocumentsMerged() Declaration [Test] public virtual void TestTwoDocumentsMerged() | Improve this Doc View Source TestTwoDocumentsNumeric() Declaration [Test] public virtual void TestTwoDocumentsNumeric() | Improve this Doc View Source TestTwoFieldsMixed() Declaration [Test] public virtual void TestTwoFieldsMixed() | Improve this Doc View Source TestTwoNumbers() Declaration [Test] public virtual void TestTwoNumbers() | Improve this Doc View Source TestTwoNumbersOneMissing() Declaration [Test] public virtual void TestTwoNumbersOneMissing() | Improve this Doc View Source TestTwoNumbersOneMissingWithMerging() Declaration [Test] public virtual void TestTwoNumbersOneMissingWithMerging() | Improve this Doc View Source TestVeryLargeButLegalBytes() Declaration [Test] public virtual void TestVeryLargeButLegalBytes() | Improve this Doc View Source TestVeryLargeButLegalSortedBytes() Declaration [Test] public virtual void TestVeryLargeButLegalSortedBytes() | Improve this Doc View Source TestZeroOrMin() Declaration [Test] public virtual void TestZeroOrMin() | Improve this Doc View Source TestZeros() Declaration [Test] public virtual void TestZeros()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseIndexFileFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseIndexFileFormatTestCase.html",
    "title": "Class BaseIndexFileFormatTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseIndexFileFormatTestCase Common tests to all index formats. Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseDocValuesFormatTestCase BasePostingsFormatTestCase BaseStoredFieldsFormatTestCase BaseTermVectorsFormatTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseIndexFileFormatTestCase : LuceneTestCase Properties | Improve this Doc View Source ExcludedExtensionsFromByteCounts Return the list of extensions that should be excluded from byte counts when comparing indices that store the same content. Declaration protected virtual ICollection<string> ExcludedExtensionsFromByteCounts { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source AddRandomFields(Document) Add random fields to the provided document. Declaration protected abstract void AddRandomFields(Document doc) Parameters Type Name Description Document doc | Improve this Doc View Source GetCodec() Returns the codec to run tests against Declaration protected abstract Codec GetCodec() Returns Type Description Codec | Improve this Doc View Source SetUp() Declaration public override void SetUp() Overrides LuceneTestCase.SetUp() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides LuceneTestCase.TearDown() | Improve this Doc View Source TestMergeStability() The purpose of this test is to make sure that bulk merge doesn't accumulate useless data over runs. Declaration [Test] public virtual void TestMergeStability()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseMergePolicyTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseMergePolicyTestCase.html",
    "title": "Class BaseMergePolicyTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseMergePolicyTestCase Base test case for MergePolicy . Inheritance System.Object LuceneTestCase BaseMergePolicyTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseMergePolicyTestCase : LuceneTestCase Methods | Improve this Doc View Source NewMergePolicy() Create a new MergePolicy instance. Declaration protected abstract MergePolicy NewMergePolicy() Returns Type Description MergePolicy | Improve this Doc View Source TestForceMergeNotNeeded() Declaration [Test] public virtual void TestForceMergeNotNeeded()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BasePostingsFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BasePostingsFormatTestCase.html",
    "title": "Class BasePostingsFormatTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasePostingsFormatTestCase Abstract class to do basic tests for a PostingsFormat . NOTE: this test focuses on the postings (docs/freqs/positions/payloads/offsets) impl, not the terms dict. The [stretch] goal is for this test to be so thorough in testing a new PostingsFormat that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given PostingsFormat that this test fails to catch then this test needs to be improved! Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BasePostingsFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BasePostingsFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document doc) Parameters Type Name Description Document doc Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source AfterClass() Declaration [OneTimeTearDown] public override void AfterClass() Overrides LuceneTestCase.AfterClass() | Improve this Doc View Source BeforeClass() Declaration [OneTimeSetUp] public override void BeforeClass() Overrides LuceneTestCase.BeforeClass() | Improve this Doc View Source TestDocsAndFreqs() Declaration [Test] public virtual void TestDocsAndFreqs() | Improve this Doc View Source TestDocsAndFreqsAndPositions() Declaration [Test] public virtual void TestDocsAndFreqsAndPositions() | Improve this Doc View Source TestDocsAndFreqsAndPositionsAndOffsets() Declaration [Test] public virtual void TestDocsAndFreqsAndPositionsAndOffsets() | Improve this Doc View Source TestDocsAndFreqsAndPositionsAndOffsetsAndPayloads() Declaration [Test] public virtual void TestDocsAndFreqsAndPositionsAndOffsetsAndPayloads() | Improve this Doc View Source TestDocsAndFreqsAndPositionsAndPayloads() Declaration [Test] public virtual void TestDocsAndFreqsAndPositionsAndPayloads() | Improve this Doc View Source TestDocsOnly() Declaration [Test] public virtual void TestDocsOnly() | Improve this Doc View Source TestRandom() Declaration [Test] public virtual void TestRandom()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseStoredFieldsFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseStoredFieldsFormatTestCase.html",
    "title": "Class BaseStoredFieldsFormatTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseStoredFieldsFormatTestCase Base class aiming at testing StoredFieldsFormat . To test a new format, all you need is to register a new Codec which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseStoredFieldsFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseStoredFieldsFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document d) Parameters Type Name Description Document d Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source TestBigDocuments() Declaration [Test] public virtual void TestBigDocuments() | Improve this Doc View Source TestBinaryFieldOffsetLength() Declaration [Test] public virtual void TestBinaryFieldOffsetLength() | Improve this Doc View Source TestBulkMergeWithDeletes() Declaration [Test] public virtual void TestBulkMergeWithDeletes() | Improve this Doc View Source TestConcurrentReads() Declaration [Test] public virtual void TestConcurrentReads() | Improve this Doc View Source TestEmptyDocs() Declaration [Test] public virtual void TestEmptyDocs() | Improve this Doc View Source TestIndexedBit() Declaration [Test] public virtual void TestIndexedBit() | Improve this Doc View Source TestNumericField() Declaration [Test] public virtual void TestNumericField() | Improve this Doc View Source TestRandomStoredFields() Declaration [Test] public virtual void TestRandomStoredFields() | Improve this Doc View Source TestReadSkip() Declaration [Test] public virtual void TestReadSkip() | Improve this Doc View Source TestStoredFieldsOrder() Declaration [Test] public virtual void TestStoredFieldsOrder() | Improve this Doc View Source TestWriteReadMerge() Declaration [Test] public virtual void TestWriteReadMerge()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.html",
    "title": "Class BaseTermVectorsFormatTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase Base class aiming at testing TermVectorsFormat . To test a new format, all you need is to register a new Codec which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseTermVectorsFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() System.Object.Equals(System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseTermVectorsFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddId(Document, String) Declaration protected virtual Document AddId(Document doc, string id) Parameters Type Name Description Document doc System.String id Returns Type Description Document | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document doc) Parameters Type Name Description Document doc Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source AssertEquals(BaseTermVectorsFormatTestCase.RandomDocument, Fields) Declaration protected virtual void AssertEquals(BaseTermVectorsFormatTestCase.RandomDocument doc, Fields fields) Parameters Type Name Description BaseTermVectorsFormatTestCase.RandomDocument doc Fields fields | Improve this Doc View Source AssertEquals(BaseTermVectorsFormatTestCase.RandomTokenStream, FieldType, Terms) Declaration protected virtual void AssertEquals(BaseTermVectorsFormatTestCase.RandomTokenStream tk, FieldType ft, Terms terms) Parameters Type Name Description BaseTermVectorsFormatTestCase.RandomTokenStream tk FieldType ft Terms terms | Improve this Doc View Source DocID(IndexReader, String) Declaration protected virtual int DocID(IndexReader reader, string id) Parameters Type Name Description IndexReader reader System.String id Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object, Object) Declaration protected static bool Equals(object o1, object o2) Parameters Type Name Description System.Object o1 System.Object o2 Returns Type Description System.Boolean | Improve this Doc View Source FieldType(BaseTermVectorsFormatTestCase.Options) Declaration protected virtual FieldType FieldType(BaseTermVectorsFormatTestCase.Options options) Parameters Type Name Description BaseTermVectorsFormatTestCase.Options options Returns Type Description FieldType | Improve this Doc View Source RandomOptions() Declaration protected virtual BaseTermVectorsFormatTestCase.Options RandomOptions() Returns Type Description BaseTermVectorsFormatTestCase.Options | Improve this Doc View Source RandomPayload() Declaration protected virtual BytesRef RandomPayload() Returns Type Description BytesRef | Improve this Doc View Source TestClone() Declaration [Test] public virtual void TestClone() | Improve this Doc View Source TestHighFreqs() Declaration [Test] public virtual void TestHighFreqs() | Improve this Doc View Source TestLotsOfFields() Declaration [Test] public virtual void TestLotsOfFields() | Improve this Doc View Source TestMerge() Declaration [Test] public virtual void TestMerge() | Improve this Doc View Source TestMixedOptions() Declaration [Test] public virtual void TestMixedOptions() | Improve this Doc View Source TestRandom() Declaration [Test] public virtual void TestRandom() | Improve this Doc View Source TestRareVectors() Declaration [Test] public virtual void TestRareVectors() | Improve this Doc View Source ValidOptions() Declaration protected virtual IEnumerable<BaseTermVectorsFormatTestCase.Options> ValidOptions() Returns Type Description System.Collections.Generic.IEnumerable < BaseTermVectorsFormatTestCase.Options > | Improve this Doc View Source ValidOptions(BaseTermVectorsFormatTestCase.Options, BaseTermVectorsFormatTestCase.Options) Declaration protected virtual IEnumerable<BaseTermVectorsFormatTestCase.Options> ValidOptions(BaseTermVectorsFormatTestCase.Options startInc, BaseTermVectorsFormatTestCase.Options endInc) Parameters Type Name Description BaseTermVectorsFormatTestCase.Options startInc BaseTermVectorsFormatTestCase.Options endInc Returns Type Description System.Collections.Generic.IEnumerable < BaseTermVectorsFormatTestCase.Options >"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.Options.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.Options.html",
    "title": "Enum BaseTermVectorsFormatTestCase.Options | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum BaseTermVectorsFormatTestCase.Options A combination of term vectors options. Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected enum Options Fields Name Description NONE OFFSETS POSITIONS POSITIONS_AND_OFFSETS POSITIONS_AND_OFFSETS_AND_PAYLOADS POSITIONS_AND_PAYLOADS"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocument.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocument.html",
    "title": "Class BaseTermVectorsFormatTestCase.RandomDocument | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase.RandomDocument Inheritance System.Object BaseTermVectorsFormatTestCase.RandomDocument 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected class RandomDocument Constructors | Improve this Doc View Source RandomDocument(BaseTermVectorsFormatTestCase, Int32, Int32, BaseTermVectorsFormatTestCase.Options, String[], String[], BytesRef[]) Declaration protected RandomDocument(BaseTermVectorsFormatTestCase outerInstance, int fieldCount, int maxTermCount, BaseTermVectorsFormatTestCase.Options options, string[] fieldNames, string[] sampleTerms, BytesRef[] sampleTermBytes) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 fieldCount System.Int32 maxTermCount BaseTermVectorsFormatTestCase.Options options System.String [] fieldNames System.String [] sampleTerms BytesRef [] sampleTermBytes Methods | Improve this Doc View Source ToDocument() Declaration public virtual Document ToDocument() Returns Type Description Document"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocumentFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocumentFactory.html",
    "title": "Class BaseTermVectorsFormatTestCase.RandomDocumentFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase.RandomDocumentFactory Inheritance System.Object BaseTermVectorsFormatTestCase.RandomDocumentFactory 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected class RandomDocumentFactory Constructors | Improve this Doc View Source RandomDocumentFactory(BaseTermVectorsFormatTestCase, Int32, Int32) Declaration protected RandomDocumentFactory(BaseTermVectorsFormatTestCase outerInstance, int distinctFieldNames, int disctinctTerms) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 distinctFieldNames System.Int32 disctinctTerms Methods | Improve this Doc View Source NewDocument(Int32, Int32, BaseTermVectorsFormatTestCase.Options) Declaration public virtual BaseTermVectorsFormatTestCase.RandomDocument NewDocument(int fieldCount, int maxTermCount, BaseTermVectorsFormatTestCase.Options options) Parameters Type Name Description System.Int32 fieldCount System.Int32 maxTermCount BaseTermVectorsFormatTestCase.Options options Returns Type Description BaseTermVectorsFormatTestCase.RandomDocument"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomTokenStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomTokenStream.html",
    "title": "Class BaseTermVectorsFormatTestCase.RandomTokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase.RandomTokenStream Inheritance System.Object AttributeSource TokenStream BaseTermVectorsFormatTestCase.RandomTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Reset() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected class RandomTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source RandomTokenStream(BaseTermVectorsFormatTestCase, Int32, String[], BytesRef[]) Declaration protected RandomTokenStream(BaseTermVectorsFormatTestCase outerInstance, int len, string[] sampleTerms, BytesRef[] sampleTermBytes) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 len System.String [] sampleTerms BytesRef [] sampleTermBytes | Improve this Doc View Source RandomTokenStream(BaseTermVectorsFormatTestCase, Int32, String[], BytesRef[], Boolean) Declaration protected RandomTokenStream(BaseTermVectorsFormatTestCase outerInstance, int len, string[] sampleTerms, BytesRef[] sampleTermBytes, bool offsetsGoBackwards) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 len System.String [] sampleTerms BytesRef [] sampleTermBytes System.Boolean offsetsGoBackwards Methods | Improve this Doc View Source HasPayloads() Declaration public virtual bool HasPayloads() Returns Type Description System.Boolean | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.FieldFilterAtomicReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.FieldFilterAtomicReader.html",
    "title": "Class FieldFilterAtomicReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldFilterAtomicReader A FilterAtomicReader that exposes only a subset of fields from the underlying wrapped reader. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader FieldFilterAtomicReader Implements System.IDisposable Inherited Members FilterAtomicReader.Unwrap(AtomicReader) FilterAtomicReader.m_input FilterAtomicReader.LiveDocs FilterAtomicReader.NumDocs FilterAtomicReader.MaxDoc FilterAtomicReader.DoClose() FilterAtomicReader.GetSortedSetDocValues(String) FilterAtomicReader.CheckIntegrity() AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class FieldFilterAtomicReader : FilterAtomicReader, IDisposable Constructors | Improve this Doc View Source FieldFilterAtomicReader(AtomicReader, ISet<String>, Boolean) Declaration public FieldFilterAtomicReader(AtomicReader in, ISet<string> fields, bool negate) Parameters Type Name Description AtomicReader in System.Collections.Generic.ISet < System.String > fields System.Boolean negate Properties | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides FilterAtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides FilterAtomicReader.Fields Methods | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides FilterAtomicReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides FilterAtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides FilterAtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides FilterAtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides FilterAtomicReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FilterAtomicReader.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.html",
    "title": "Namespace Lucene.Net.Index | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Index <!-- 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. --> Misc index tools and index support. Classes AlcoholicMergePolicy Merge policy for testing, it is like an alcoholic. It drinks (merges) at night, and randomly decides what to drink. During the daytime it sleeps. If tests pass with this, then they are likely to pass with any bizarro merge policy users might write. It is a fine bottle of champagne (Ordered by Martijn). AllDeletedFilterReader Filters the incoming reader and makes all documents appear deleted. AssertingAtomicReader A FilterAtomicReader that can be used to apply additional checks for tests. AssertingBinaryDocValues Wraps a BinaryDocValues but with additional asserts AssertingBits Wraps a IBits but with additional asserts AssertingDirectoryReader A DirectoryReader that wraps all its subreaders with AssertingAtomicReader AssertingDocsEnum Wraps a DocsEnum with additional checks AssertingFields Wraps a Fields but with additional asserts AssertingNumericDocValues Wraps a NumericDocValues but with additional asserts AssertingSortedDocValues Wraps a SortedDocValues but with additional asserts AssertingSortedSetDocValues Wraps a SortedSetDocValues but with additional asserts AssertingTerms Wraps a Terms but with additional asserts BaseCompressingDocValuesFormatTestCase Extends BaseDocValuesFormatTestCase to add compression checks. BaseDocValuesFormatTestCase Abstract class to do basic tests for a DocValuesFormat . NOTE: this test focuses on the docvalues impl, nothing else. The [stretch] goal is for this test to be so thorough in testing a new DocValuesFormat that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given DocValuesFormat that this test fails to catch then this test needs to be improved! BaseIndexFileFormatTestCase Common tests to all index formats. BaseMergePolicyTestCase Base test case for MergePolicy . BasePostingsFormatTestCase Abstract class to do basic tests for a PostingsFormat . NOTE: this test focuses on the postings (docs/freqs/positions/payloads/offsets) impl, not the terms dict. The [stretch] goal is for this test to be so thorough in testing a new PostingsFormat that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given PostingsFormat that this test fails to catch then this test needs to be improved! BaseStoredFieldsFormatTestCase Base class aiming at testing StoredFieldsFormat . To test a new format, all you need is to register a new Codec which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BaseTermVectorsFormatTestCase Base class aiming at testing TermVectorsFormat . To test a new format, all you need is to register a new Codec which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BaseTermVectorsFormatTestCase.RandomDocument BaseTermVectorsFormatTestCase.RandomDocumentFactory BaseTermVectorsFormatTestCase.RandomTokenStream FieldFilterAtomicReader A FilterAtomicReader that exposes only a subset of fields from the underlying wrapped reader. MockIndexInput IndexInput backed by a byte[] for testing. MockRandomMergePolicy MergePolicy that makes random decisions for testing. RandomCodec Codec that assigns per-field random PostingsFormat s. The same field/format assignment will happen regardless of order, a hash is computed up front that determines the mapping. This means fields can be put into things like System.Collections.Generic.HashSet`1 s and added to documents in different orders and the test will still be deterministic and reproducable. RandomIndexWriter Silly class that randomizes the indexing experience. EG it may swap in a different merge policy/scheduler; may commit periodically; may or may not forceMerge in the end, may flush by doc count instead of RAM, etc. TestPointInfoStream ThreadedIndexingAndSearchingTestCase Utility class that spawns multiple indexing and searching threads. Interfaces ITestPoint Simple interface that is executed for each TP InfoStream component message. See also MockIndexWriter(Directory, IndexWriterConfig, ITestPoint) . Enums BaseTermVectorsFormatTestCase.Options A combination of term vectors options."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.ITestPoint.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.ITestPoint.html",
    "title": "Interface ITestPoint | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITestPoint Simple interface that is executed for each TP InfoStream component message. See also MockIndexWriter(Directory, IndexWriterConfig, ITestPoint) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public interface ITestPoint Methods | Improve this Doc View Source Apply(String) Declaration void Apply(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockIndexInput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockIndexInput.html",
    "title": "Class MockIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockIndexInput IndexInput backed by a byte[] for testing. Inheritance System.Object DataInput IndexInput BufferedIndexInput MockIndexInput Implements System.IDisposable Inherited Members BufferedIndexInput.BUFFER_SIZE BufferedIndexInput.MERGE_BUFFER_SIZE BufferedIndexInput.m_buffer BufferedIndexInput.ReadByte() BufferedIndexInput.SetBufferSize(Int32) BufferedIndexInput.NewBuffer(Byte[]) BufferedIndexInput.BufferSize BufferedIndexInput.ReadBytes(Byte[], Int32, Int32) BufferedIndexInput.ReadBytes(Byte[], Int32, Int32, Boolean) BufferedIndexInput.ReadInt16() BufferedIndexInput.ReadInt32() BufferedIndexInput.ReadInt64() BufferedIndexInput.ReadVInt32() BufferedIndexInput.ReadVInt64() BufferedIndexInput.GetFilePointer() BufferedIndexInput.Seek(Int64) BufferedIndexInput.Clone() BufferedIndexInput.FlushBuffer(IndexOutput, Int64) BufferedIndexInput.GetBufferSize(IOContext) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class MockIndexInput : BufferedIndexInput, IDisposable Constructors | Improve this Doc View Source MockIndexInput(Byte[]) Declaration public MockIndexInput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Declaration protected override void ReadInternal(byte[] dest, int destOffset, int len) Parameters Type Name Description System.Byte [] dest System.Int32 destOffset System.Int32 len Overrides BufferedIndexInput.ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos Overrides BufferedIndexInput.SeekInternal(Int64) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockRandomMergePolicy.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockRandomMergePolicy.html",
    "title": "Class MockRandomMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockRandomMergePolicy MergePolicy that makes random decisions for testing. Inheritance System.Object MergePolicy MockRandomMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class MockRandomMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source MockRandomMergePolicy(Random) Declaration public MockRandomMergePolicy(Random random) Parameters Type Name Description System.Random random Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo mergedInfo Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomCodec.html",
    "title": "Class RandomCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomCodec Codec that assigns per-field random PostingsFormat s. The same field/format assignment will happen regardless of order, a hash is computed up front that determines the mapping. This means fields can be put into things like System.Collections.Generic.HashSet`1 s and added to documents in different orders and the test will still be deterministic and reproducable. Inheritance System.Object Codec Lucene46Codec RandomCodec Inherited Members Lucene46Codec.StoredFieldsFormat Lucene46Codec.TermVectorsFormat Lucene46Codec.PostingsFormat Lucene46Codec.FieldInfosFormat Lucene46Codec.SegmentInfoFormat Lucene46Codec.LiveDocsFormat Lucene46Codec.DocValuesFormat Lucene46Codec.NormsFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomCodec : Lucene46Codec Constructors | Improve this Doc View Source RandomCodec(Random) Declaration public RandomCodec(Random random) Parameters Type Name Description System.Random random | Improve this Doc View Source RandomCodec(Random, ISet<String>) Declaration public RandomCodec(Random random, ISet<string> avoidCodecs) Parameters Type Name Description System.Random random System.Collections.Generic.ISet < System.String > avoidCodecs Properties | Improve this Doc View Source DvFormatNames unique set of docvalues format names this codec knows about Declaration public ISet<string> DvFormatNames { get; set; } Property Value Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source FormatNames unique set of format names this codec knows about Declaration public ISet<string> FormatNames { get; set; } Property Value Type Description System.Collections.Generic.ISet < System.String > Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Declaration public override DocValuesFormat GetDocValuesFormatForField(string name) Parameters Type Name Description System.String name Returns Type Description DocValuesFormat Overrides Lucene46Codec.GetDocValuesFormatForField(String) | Improve this Doc View Source GetPostingsFormatForField(String) Declaration public override PostingsFormat GetPostingsFormatForField(string name) Parameters Type Name Description System.String name Returns Type Description PostingsFormat Overrides Lucene46Codec.GetPostingsFormatForField(String) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Codec.ToString()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomIndexWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomIndexWriter.html",
    "title": "Class RandomIndexWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomIndexWriter Silly class that randomizes the indexing experience. EG it may swap in a different merge policy/scheduler; may commit periodically; may or may not forceMerge in the end, may flush by doc count instead of RAM, etc. Inheritance System.Object RandomIndexWriter 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomIndexWriter : IDisposable Constructors | Improve this Doc View Source RandomIndexWriter(Random, Directory) Create a RandomIndexWriter with a random config: Uses TEST_VERSION_CURRENT and MockAnalyzer . Declaration public RandomIndexWriter(Random r, Directory dir) Parameters Type Name Description System.Random r Directory dir | Improve this Doc View Source RandomIndexWriter(Random, Directory, Analyzer) Create a RandomIndexWriter with a random config: Uses TEST_VERSION_CURRENT . Declaration public RandomIndexWriter(Random r, Directory dir, Analyzer a) Parameters Type Name Description System.Random r Directory dir Analyzer a | Improve this Doc View Source RandomIndexWriter(Random, Directory, IndexWriterConfig) Creates a RandomIndexWriter with the provided config Declaration public RandomIndexWriter(Random r, Directory dir, IndexWriterConfig c) Parameters Type Name Description System.Random r Directory dir IndexWriterConfig c | Improve this Doc View Source RandomIndexWriter(Random, Directory, LuceneVersion, Analyzer) Creates a RandomIndexWriter with a random config. Declaration public RandomIndexWriter(Random r, Directory dir, LuceneVersion v, Analyzer a) Parameters Type Name Description System.Random r Directory dir LuceneVersion v Analyzer a Properties | Improve this Doc View Source DoRandomForceMerge Declaration public virtual bool DoRandomForceMerge { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source DoRandomForceMergeAssert Declaration public virtual bool DoRandomForceMergeAssert { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexWriter Declaration public IndexWriter IndexWriter { get; set; } Property Value Type Description IndexWriter | Improve this Doc View Source MaxDoc Declaration public virtual int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Declaration public virtual int NumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Adds a Document. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > doc See Also AddDocument(IEnumerable<IIndexableField>) | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc, Analyzer a) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > doc Analyzer a | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs | Improve this Doc View Source AddIndexes(IndexReader[]) Declaration public virtual void AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers | Improve this Doc View Source AddIndexes(Directory[]) Declaration public virtual void AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs | Improve this Doc View Source Commit() Declaration public virtual void Commit() | Improve this Doc View Source DeleteAll() Declaration public virtual void DeleteAll() | Improve this Doc View Source DeleteDocuments(Term) Declaration public virtual void DeleteDocuments(Term term) Parameters Type Name Description Term term | Improve this Doc View Source DeleteDocuments(Query) Declaration public virtual void DeleteDocuments(Query q) Parameters Type Name Description Query q | Improve this Doc View Source Dispose() Dispose this writer. Declaration public void Dispose() See Also Dispose() | Improve this Doc View Source Dispose(Boolean) Dispose this writer. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing See Also Dispose(Boolean) | Improve this Doc View Source ForceMerge(Int32) Forces a forceMerge. NOTE: this should be avoided in tests unless absolutely necessary, as it will result in less test coverage. Declaration public virtual void ForceMerge(int maxSegmentCount) Parameters Type Name Description System.Int32 maxSegmentCount See Also ForceMerge(Int32) | Improve this Doc View Source ForceMergeDeletes() Declaration public virtual void ForceMergeDeletes() | Improve this Doc View Source ForceMergeDeletes(Boolean) Declaration public virtual void ForceMergeDeletes(bool doWait) Parameters Type Name Description System.Boolean doWait | Improve this Doc View Source GetReader() Declaration public virtual DirectoryReader GetReader() Returns Type Description DirectoryReader | Improve this Doc View Source GetReader(Boolean) Declaration public virtual DirectoryReader GetReader(bool applyDeletions) Parameters Type Name Description System.Boolean applyDeletions Returns Type Description DirectoryReader | Improve this Doc View Source MockIndexWriter(Directory, IndexWriterConfig, ITestPoint) Declaration public static IndexWriter MockIndexWriter(Directory dir, IndexWriterConfig conf, ITestPoint testPoint) Parameters Type Name Description Directory dir IndexWriterConfig conf ITestPoint testPoint Returns Type Description IndexWriter | Improve this Doc View Source MockIndexWriter(Directory, IndexWriterConfig, Random) Declaration public static IndexWriter MockIndexWriter(Directory dir, IndexWriterConfig conf, Random r) Parameters Type Name Description Directory dir IndexWriterConfig conf System.Random r Returns Type Description IndexWriter | Improve this Doc View Source UpdateBinaryDocValue(Term, String, BytesRef) Declaration public virtual void UpdateBinaryDocValue(Term term, string field, BytesRef value) Parameters Type Name Description Term term System.String field BytesRef value | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Updates a document. Declaration public virtual void UpdateDocument(Term t, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < IIndexableField > doc | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term delTerm System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs | Improve this Doc View Source UpdateNumericDocValue(Term, String, Nullable<Int64>) Declaration public virtual void UpdateNumericDocValue(Term term, string field, long? value) Parameters Type Name Description Term term System.String field System.Nullable < System.Int64 > value Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.TestPointInfoStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.TestPointInfoStream.html",
    "title": "Class TestPointInfoStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TestPointInfoStream Inheritance System.Object InfoStream TestPointInfoStream Implements System.IDisposable Inherited Members InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class TestPointInfoStream : InfoStream, IDisposable Constructors | Improve this Doc View Source TestPointInfoStream(InfoStream, ITestPoint) Declaration public TestPointInfoStream(InfoStream delegate, ITestPoint testPoint) Parameters Type Name Description InfoStream delegate ITestPoint testPoint Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides InfoStream.Dispose(Boolean) | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean Overrides InfoStream.IsEnabled(String) | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message Overrides InfoStream.Message(String, String) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.ThreadedIndexingAndSearchingTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.ThreadedIndexingAndSearchingTestCase.html",
    "title": "Class ThreadedIndexingAndSearchingTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ThreadedIndexingAndSearchingTestCase Utility class that spawns multiple indexing and searching threads. Inheritance System.Object LuceneTestCase ThreadedIndexingAndSearchingTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ThreadedIndexingAndSearchingTestCase : LuceneTestCase Fields | Improve this Doc View Source m_addCount Declaration protected readonly AtomicInt32 m_addCount Field Value Type Description J2N.Threading.Atomic.AtomicInt32 | Improve this Doc View Source m_assertMergedSegmentsWarmed Declaration protected bool m_assertMergedSegmentsWarmed Field Value Type Description System.Boolean | Improve this Doc View Source m_delCount Declaration protected readonly AtomicInt32 m_delCount Field Value Type Description J2N.Threading.Atomic.AtomicInt32 | Improve this Doc View Source m_dir Declaration protected Directory m_dir Field Value Type Description Directory | Improve this Doc View Source m_failed Declaration protected readonly AtomicBoolean m_failed Field Value Type Description J2N.Threading.Atomic.AtomicBoolean | Improve this Doc View Source m_packCount Declaration protected readonly AtomicInt32 m_packCount Field Value Type Description J2N.Threading.Atomic.AtomicInt32 | Improve this Doc View Source m_writer Declaration protected IndexWriter m_writer Field Value Type Description IndexWriter Methods | Improve this Doc View Source AddDocument(Term, IEnumerable<IIndexableField>) Declaration protected virtual void AddDocument(Term id, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term id System.Collections.Generic.IEnumerable < IIndexableField > doc | Improve this Doc View Source AddDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Declaration protected virtual void AddDocuments(Term id, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term id System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs | Improve this Doc View Source DeleteDocuments(Term) Declaration protected virtual void DeleteDocuments(Term term) Parameters Type Name Description Term term | Improve this Doc View Source DoAfterIndexingThreadDone() Declaration protected virtual void DoAfterIndexingThreadDone() | Improve this Doc View Source DoAfterWriter(TaskScheduler) Declaration protected virtual void DoAfterWriter(TaskScheduler es) Parameters Type Name Description System.Threading.Tasks.TaskScheduler es | Improve this Doc View Source DoClose() Declaration protected virtual void DoClose() | Improve this Doc View Source DoSearching(TaskScheduler, Int64) Declaration protected abstract void DoSearching(TaskScheduler es, long stopTime) Parameters Type Name Description System.Threading.Tasks.TaskScheduler es System.Int64 stopTime | Improve this Doc View Source GetCurrentSearcher() Declaration protected abstract IndexSearcher GetCurrentSearcher() Returns Type Description IndexSearcher | Improve this Doc View Source GetDirectory(Directory) Declaration protected virtual Directory GetDirectory(Directory in) Parameters Type Name Description Directory in Returns Type Description Directory | Improve this Doc View Source GetFinalSearcher() Declaration protected abstract IndexSearcher GetFinalSearcher() Returns Type Description IndexSearcher | Improve this Doc View Source ReleaseSearcher(IndexSearcher) Declaration protected virtual void ReleaseSearcher(IndexSearcher s) Parameters Type Name Description IndexSearcher s | Improve this Doc View Source RunSearchThreads(Int64) Declaration protected virtual void RunSearchThreads(long stopTime) Parameters Type Name Description System.Int64 stopTime | Improve this Doc View Source RunTest(String) Declaration public virtual void RunTest(string testName) Parameters Type Name Description System.String testName | Improve this Doc View Source SmokeTestSearcher(IndexSearcher) Declaration protected virtual void SmokeTestSearcher(IndexSearcher s) Parameters Type Name Description IndexSearcher s | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Declaration protected virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term term System.Collections.Generic.IEnumerable < IIndexableField > doc | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Declaration protected virtual void UpdateDocuments(Term id, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term id System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.RandomExtensions.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.RandomExtensions.html",
    "title": "Class RandomExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomExtensions Extensions to System.Random in order to randomly generate types and specially formatted strings that assist with testing custom extensions to Lucene.Net. Inheritance System.Object RandomExtensions 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 Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomExtensions Methods | Improve this Doc View Source NextAnalysisString(Random, Int32, Boolean) Declaration public static string NextAnalysisString(this Random random, int maxLength, bool simple) Parameters Type Name Description System.Random random System.Int32 maxLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source NextBoolean(Random) Generates a random System.Boolean , with a random distribution of approximately 50/50. Declaration public static bool NextBoolean(this Random random) Parameters Type Name Description System.Random random This System.Random . Returns Type Description System.Boolean A random System.Boolean . | Improve this Doc View Source NextFilterStrategy(Random) Declaration public static FilteredQuery.FilterStrategy NextFilterStrategy(this Random random) Parameters Type Name Description System.Random random Returns Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source NextFixedByteLengthUnicodeString(Random, Int32) Returns random string, with a given UTF-8 byte length . Declaration public static string NextFixedByteLengthUnicodeString(this Random random, int length) Parameters Type Name Description System.Random random System.Int32 length Returns Type Description System.String | Improve this Doc View Source NextFixedLengthUnicodeString(Random, Char[], Int32, Int32) Fills provided char[] with valid random unicode code unit sequence. Declaration public static void NextFixedLengthUnicodeString(this Random random, char[] chars, int offset, int length) Parameters Type Name Description System.Random random System.Char [] chars System.Int32 offset System.Int32 length | Improve this Doc View Source NextFrom<T>(Random, ICollection<T>) Pick a random object from the collection . Declaration public static T NextFrom<T>(this Random random, ICollection<T> collection) Parameters Type Name Description System.Random random System.Collections.Generic.ICollection <T> collection Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source NextHtmlishString(Random, Int32) Returns a random HTML-like string. Declaration public static string NextHtmlishString(this Random random, int numElements) Parameters Type Name Description System.Random random System.Int32 numElements Returns Type Description System.String | Improve this Doc View Source NextInt64(Random) Generates a random System.Int64 . Declaration public static long NextInt64(this Random random) Parameters Type Name Description System.Random random This System.Random . Returns Type Description System.Int64 A random System.Int64 . | Improve this Doc View Source NextInt64(Random, Int64, Int64) Generates a random System.Int64 . start and end are BOTH inclusive. Declaration public static long NextInt64(this Random random, long start, long end) Parameters Type Name Description System.Random random This System.Random . System.Int64 start The inclusive start. System.Int64 end The inclusive end. Returns Type Description System.Int64 A random System.Int64 . | Improve this Doc View Source NextRealisticUnicodeString(Random) Returns random string of length between 0-20 codepoints, all codepoints within the same unicode block. Declaration public static string NextRealisticUnicodeString(this Random random) Parameters Type Name Description System.Random random Returns Type Description System.String | Improve this Doc View Source NextRealisticUnicodeString(Random, Int32) Returns random string of length up to maxLength codepoints, all codepoints within the same unicode block. Declaration public static string NextRealisticUnicodeString(this Random random, int maxLength) Parameters Type Name Description System.Random random System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextRealisticUnicodeString(Random, Int32, Int32) Returns random string of length between min and max codepoints, all codepoints within the same unicode block. Declaration public static string NextRealisticUnicodeString(this Random random, int minLength, int maxLength) Parameters Type Name Description System.Random random System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextRecasedString(Random, String) Randomly upcases, downcases, or leaves intact each code point in the given string. Declaration public static string NextRecasedString(this Random random, string str) Parameters Type Name Description System.Random random System.String str Returns Type Description System.String | Improve this Doc View Source NextRegex(Random) Returns a valid (compiling) System.Text.RegularExpressions.Regex instance with random stuff inside. Be careful when applying random patterns to longer strings as certain types of patterns may explode into exponential times in backtracking implementations (such as Java's). Declaration public static Regex NextRegex(this Random random) Parameters Type Name Description System.Random random Returns Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source NextRegexishString(Random) Returns a System.String thats \"regexish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Declaration public static string NextRegexishString(this Random random) Parameters Type Name Description System.Random random Returns Type Description System.String | Improve this Doc View Source NextRegexishString(Random, Int32) Returns a System.String thats \"regexish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Note: to avoid practically endless backtracking patterns we replace asterisk and plus operators with bounded repetitions. See LUCENE-4111 for more info. Declaration public static string NextRegexishString(this Random random, int maxLength) Parameters Type Name Description System.Random random System.Int32 maxLength A hint about maximum length of the regexpish string. It may be exceeded by a few characters. Returns Type Description System.String | Improve this Doc View Source NextSimpleString(Random) Returns a random string consisting only of lowercase characters 'a' through 'z', between 0 and 20 characters in length. Declaration public static string NextSimpleString(this Random random) Parameters Type Name Description System.Random random Returns Type Description System.String | Improve this Doc View Source NextSimpleString(Random, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string NextSimpleString(this Random random, int maxLength) Parameters Type Name Description System.Random random System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextSimpleString(Random, Int32, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string NextSimpleString(this Random random, int minLength, int maxLength) Parameters Type Name Description System.Random random System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextSimpleStringRange(Random, Char, Char, Int32) Returns a random string consisting only of characters between minChar and maxChar . Declaration public static string NextSimpleStringRange(this Random random, char minChar, char maxChar, int maxLength) Parameters Type Name Description System.Random random System.Char minChar System.Char maxChar System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextSingle(Random) Generates a random System.Single . Declaration public static float NextSingle(this Random random) Parameters Type Name Description System.Random random This System.Random . Returns Type Description System.Single A random System.Single . | Improve this Doc View Source NextSubString(Random, Int32, Boolean) Declaration public static string NextSubString(this Random random, int wordLength, bool simple) Parameters Type Name Description System.Random random System.Int32 wordLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source NextUnicodeString(Random) Returns random string, including full unicode range. Declaration public static string NextUnicodeString(this Random random) Parameters Type Name Description System.Random random Returns Type Description System.String | Improve this Doc View Source NextUnicodeString(Random, Int32) Returns a random string up to a certain length. Declaration public static string NextUnicodeString(this Random random, int maxLength) Parameters Type Name Description System.Random random System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextWhitespace(Random, Int32, Int32) Returns a random string in the specified length range consisting entirely of whitespace characters. Declaration public static string NextWhitespace(this Random random, int minLength, int maxLength) Parameters Type Name Description System.Random random System.Int32 minLength System.Int32 maxLength Returns Type Description System.String See Also WHITESPACE_CHARACTERS"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.html",
    "title": "Namespace Lucene.Net.Randomized.Generators | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Randomized.Generators Classes RandomBytes Random byte sequence generators. RandomInts Utility class for random integer and integer sequences. RandomPicks Random selections of objects."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomBytes.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomBytes.html",
    "title": "Class RandomBytes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomBytes Random byte sequence generators. Inheritance System.Object RandomBytes 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.Randomized.Generators Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomBytes Methods | Improve this Doc View Source RandomBytesOfLength(Random, Int32) Declaration public static byte[] RandomBytesOfLength(Random r, int length) Parameters Type Name Description System.Random r Random generator. System.Int32 length The length of the byte array. Can be zero. Returns Type Description System.Byte [] Returns a byte array with random content. | Improve this Doc View Source RandomBytesOfLengthBetween(Random, Int32, Int32) Declaration public static byte[] RandomBytesOfLengthBetween(Random r, int minLength, int maxLength) Parameters Type Name Description System.Random r Random generator. System.Int32 minLength The minimum length of the byte array. Can be zero. System.Int32 maxLength The maximum length of the byte array. Can be zero. Returns Type Description System.Byte [] Returns a byte array with random content."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomInts.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomInts.html",
    "title": "Class RandomInts | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomInts Utility class for random integer and integer sequences. Inheritance System.Object RandomInts 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.Randomized.Generators Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomInts Methods | Improve this Doc View Source RandomInt32Between(Random, Int32, Int32) A random integer from min to max (inclusive). Declaration public static int RandomInt32Between(Random random, int min, int max) Parameters Type Name Description System.Random random System.Int32 min System.Int32 max Returns Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomPicks.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomPicks.html",
    "title": "Class RandomPicks | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomPicks Random selections of objects. Inheritance System.Object RandomPicks 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.Randomized.Generators Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomPicks Methods | Improve this Doc View Source RandomFrom<T>(Random, ICollection<T>) Pick a random object from the collection . Declaration public static T RandomFrom<T>(Random random, ICollection<T> collection) Parameters Type Name Description System.Random random System.Collections.Generic.ICollection <T> collection Returns Type Description T Type Parameters Name Description T"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.html",
    "title": "Namespace Lucene.Net.Randomized | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Randomized Classes RandomizedTest Common scaffolding for subclassing randomized tests."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.RandomizedTest.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.RandomizedTest.html",
    "title": "Class RandomizedTest | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomizedTest Common scaffolding for subclassing randomized tests. Inheritance System.Object RandomizedTest 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.Randomized Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomizedTest Methods | Improve this Doc View Source AssumeFalse(String, Boolean) Declaration public static void AssumeFalse(string msg, bool condition) Parameters Type Name Description System.String msg Message to be included in the exception's string. System.Boolean condition If true an NUnit.Framework.InconclusiveException is thrown by this method and the test case (should be) ignored (or rather technically, flagged as a failure not passing a certain assumption). Tests that are assumption-failures do not break builds (again: typically). | Improve this Doc View Source AssumeNoException(String, Exception) Assume t is null . Declaration public static void AssumeNoException(string msg, Exception t) Parameters Type Name Description System.String msg System.Exception t | Improve this Doc View Source AssumeTrue(String, Boolean) Declaration public static void AssumeTrue(string msg, bool condition) Parameters Type Name Description System.String msg Message to be included in the exception's string. System.Boolean condition If false an NUnit.Framework.InconclusiveException is thrown by this method and the test case (should be) ignored (or rather technically, flagged as a failure not passing a certain assumption). Tests that are assumption-failures do not break builds (again: typically)."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkOutOfOrderScorer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkOutOfOrderScorer.html",
    "title": "Class AssertingBulkOutOfOrderScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingBulkOutOfOrderScorer A crazy BulkScorer that wraps another BulkScorer but shuffles the order of the collected documents. Inheritance System.Object BulkScorer AssertingBulkOutOfOrderScorer 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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBulkOutOfOrderScorer : BulkScorer Constructors | Improve this Doc View Source AssertingBulkOutOfOrderScorer(Random, BulkScorer) Declaration public AssertingBulkOutOfOrderScorer(Random random, BulkScorer in) Parameters Type Name Description System.Random random BulkScorer in Methods | Improve this Doc View Source Score(ICollector) Declaration public override void Score(ICollector collector) Parameters Type Name Description ICollector collector Overrides BulkScorer.Score(ICollector) | Improve this Doc View Source Score(ICollector, Int32) Declaration public override bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector System.Int32 max Returns Type Description System.Boolean Overrides BulkScorer.Score(ICollector, Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkScorer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkScorer.html",
    "title": "Class AssertingBulkScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingBulkScorer Wraps a Scorer with additional checks. Inheritance System.Object BulkScorer AssertingBulkScorer 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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBulkScorer : BulkScorer Properties | Improve this Doc View Source In Declaration public virtual BulkScorer In { get; } Property Value Type Description BulkScorer Methods | Improve this Doc View Source Score(ICollector) Declaration public override void Score(ICollector collector) Parameters Type Name Description ICollector collector Overrides BulkScorer.Score(ICollector) | Improve this Doc View Source Score(ICollector, Int32) Declaration public override bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector System.Int32 max Returns Type Description System.Boolean Overrides BulkScorer.Score(ICollector, Int32) | Improve this Doc View Source ShouldWrap(BulkScorer) Declaration public static bool ShouldWrap(BulkScorer inScorer) Parameters Type Name Description BulkScorer inScorer Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Wrap(Random, BulkScorer) Declaration public static BulkScorer Wrap(Random random, BulkScorer other) Parameters Type Name Description System.Random random BulkScorer other Returns Type Description BulkScorer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingCollector.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingCollector.html",
    "title": "Class AssertingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingCollector Wraps another ICollector and checks that AcceptsDocsOutOfOrder is respected. Inheritance System.Object AssertingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer | Improve this Doc View Source Wrap(Random, ICollector, Boolean) Declaration public static ICollector Wrap(Random random, ICollector other, bool inOrder) Parameters Type Name Description System.Random random ICollector other System.Boolean inOrder Returns Type Description ICollector Implements ICollector"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingIndexSearcher.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingIndexSearcher.html",
    "title": "Class AssertingIndexSearcher | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingIndexSearcher Helper class that adds some extra checks to ensure correct usage of IndexSearcher and Weight . Inheritance System.Object IndexSearcher AssertingIndexSearcher Inherited Members IndexSearcher.m_readerContext IndexSearcher.m_leafContexts IndexSearcher.m_leafSlices IndexSearcher.DefaultSimilarity IndexSearcher.Slices(IList<AtomicReaderContext>) IndexSearcher.IndexReader IndexSearcher.Doc(Int32) IndexSearcher.Doc(Int32, StoredFieldVisitor) IndexSearcher.Doc(Int32, ISet<String>) IndexSearcher.Document(Int32, ISet<String>) IndexSearcher.Similarity IndexSearcher.SearchAfter(ScoreDoc, Query, Int32) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32) IndexSearcher.Search(Query, Int32) IndexSearcher.Search(Query, Filter, Int32) IndexSearcher.Search(Query, Filter, ICollector) IndexSearcher.Search(Query, ICollector) IndexSearcher.Search(Query, Filter, Int32, Sort) IndexSearcher.Search(Query, Filter, Int32, Sort, Boolean, Boolean) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) IndexSearcher.Search(Query, Int32, Sort) IndexSearcher.SearchAfter(ScoreDoc, Query, Int32, Sort) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean) IndexSearcher.Search(Weight, ScoreDoc, Int32) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, ScoreDoc, Int32) IndexSearcher.Search(Weight, Int32, Sort, Boolean, Boolean) IndexSearcher.Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) IndexSearcher.Explain(Query, Int32) IndexSearcher.Explain(Weight, Int32) IndexSearcher.TopReaderContext IndexSearcher.TermStatistics(Term, TermContext) IndexSearcher.CollectionStatistics(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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingIndexSearcher : IndexSearcher Constructors | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReader) Declaration public AssertingIndexSearcher(Random random, IndexReader r) Parameters Type Name Description System.Random random IndexReader r | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReader, TaskScheduler) Declaration public AssertingIndexSearcher(Random random, IndexReader r, TaskScheduler ex) Parameters Type Name Description System.Random random IndexReader r System.Threading.Tasks.TaskScheduler ex | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReaderContext) Declaration public AssertingIndexSearcher(Random random, IndexReaderContext context) Parameters Type Name Description System.Random random IndexReaderContext context | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReaderContext, TaskScheduler) Declaration public AssertingIndexSearcher(Random random, IndexReaderContext context, TaskScheduler ex) Parameters Type Name Description System.Random random IndexReaderContext context System.Threading.Tasks.TaskScheduler ex Methods | Improve this Doc View Source CreateNormalizedWeight(Query) Ensures, that the returned Weight is not normalized again, which may produce wrong scores. Declaration public override Weight CreateNormalizedWeight(Query query) Parameters Type Name Description Query query Returns Type Description Weight Overrides IndexSearcher.CreateNormalizedWeight(Query) | Improve this Doc View Source Rewrite(Query) Declaration public override Query Rewrite(Query original) Parameters Type Name Description Query original Returns Type Description Query Overrides IndexSearcher.Rewrite(Query) | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ICollector) Declaration protected override void Search(IList<AtomicReaderContext> leaves, Weight weight, ICollector collector) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves Weight weight ICollector collector Overrides IndexSearcher.Search(IList<AtomicReaderContext>, Weight, ICollector) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides IndexSearcher.ToString() | Improve this Doc View Source WrapFilter(Query, Filter) Declaration protected override Query WrapFilter(Query query, Filter filter) Parameters Type Name Description Query query Filter filter Returns Type Description Query Overrides IndexSearcher.WrapFilter(Query, Filter)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingQuery.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingQuery.html",
    "title": "Class AssertingQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingQuery Assertion-enabled query. Inheritance System.Object Query AssertingQuery Inherited Members Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingQuery : Query Constructors | Improve this Doc View Source AssertingQuery(Random, Query) Sole constructor. Declaration public AssertingQuery(Random random, Query in) Parameters Type Name Description System.Random random Query in Properties | Improve this Doc View Source Boost Declaration public override float Boost { get; set; } Property Value Type Description System.Single Overrides Query.Boost Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | 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 ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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) | Improve this Doc View Source Wrap(Random, Query) Wrap a query if necessary. Declaration public static Query Wrap(Random random, Query query) Parameters Type Name Description System.Random random Query query Returns Type Description Query"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingScorer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingScorer.html",
    "title": "Class AssertingScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AssertingScorer Wraps a Scorer with additional checks. Inheritance System.Object DocIdSetIterator DocsEnum Scorer AssertingScorer Inherited Members Scorer.m_weight Scorer.Weight DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingScorer : Scorer Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source In Declaration public virtual Scorer In { get; } Property Value Type Description Scorer Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetChildren() Declaration public override ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description System.Collections.Generic.ICollection < Scorer.ChildScorer > Overrides Scorer.GetChildren() | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Wrap(Random, Scorer) Declaration public static Scorer Wrap(Random random, Scorer other) Parameters Type Name Description System.Random random Scorer other Returns Type Description Scorer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.CheckHits.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.CheckHits.html",
    "title": "Class CheckHits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckHits Utility class for asserting expected hits in tests. Inheritance System.Object CheckHits Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public static class CheckHits Fields | Improve this Doc View Source EXPLAIN_SCORE_TOLERANCE_DELTA Some explains methods calculate their values though a slightly different order of operations from the actual scoring method ... this allows for a small amount of relative variation Declaration public static float EXPLAIN_SCORE_TOLERANCE_DELTA Field Value Type Description System.Single | Improve this Doc View Source EXPLAIN_SCORE_TOLERANCE_MINIMUM In general we use a relative epsilon, but some tests do crazy things like boost documents with 0, creating tiny tiny scores where the relative difference is large but the absolute difference is tiny. we ensure the the epsilon is always at least this big. Declaration public static float EXPLAIN_SCORE_TOLERANCE_MINIMUM Field Value Type Description System.Single Methods | Improve this Doc View Source CheckDocIds(String, Int32[], ScoreDoc[]) Tests that a Hits has an expected order of documents. Declaration public static void CheckDocIds(string mes, int[] results, ScoreDoc[] hits) Parameters Type Name Description System.String mes System.Int32 [] results ScoreDoc [] hits | Improve this Doc View Source CheckEqual(Query, ScoreDoc[], ScoreDoc[]) Declaration public static void CheckEqual(Query query, ScoreDoc[] hits1, ScoreDoc[] hits2) Parameters Type Name Description Query query ScoreDoc [] hits1 ScoreDoc [] hits2 | Improve this Doc View Source CheckExplanations(Query, String, IndexSearcher) Asserts that the explanation value for every document matching a query corresponds with the true score. See CheckExplanations(Query, String, IndexSearcher, Boolean) for a \"deep\" testing of the explanation details. Declaration public static void CheckExplanations(Query query, string defaultFieldName, IndexSearcher searcher) Parameters Type Name Description Query query The query to test. System.String defaultFieldName Used for displaing the query in assertion messages. IndexSearcher searcher The searcher to test the query against. See Also ExplanationAsserter CheckExplanations(Query, String, IndexSearcher, Boolean) | Improve this Doc View Source CheckExplanations(Query, String, IndexSearcher, Boolean) Asserts that the explanation value for every document matching a query corresponds with the true score. Optionally does \"deep\" testing of the explanation details. Declaration public static void CheckExplanations(Query query, string defaultFieldName, IndexSearcher searcher, bool deep) Parameters Type Name Description Query query The query to test. System.String defaultFieldName Used for displaing the query in assertion messages. IndexSearcher searcher The searcher to test the query against. System.Boolean deep Indicates whether a deep comparison of sub-Explanation details should be executed. See Also ExplanationAsserter | Improve this Doc View Source CheckHitCollector(Random, Query, String, IndexSearcher, Int32[]) Tests that a query matches the an expected set of documents using a HitCollector. Note that when using the HitCollector API, documents will be collected if they \"match\" regardless of what their score is. Declaration public static void CheckHitCollector(Random random, Query query, string defaultFieldName, IndexSearcher searcher, int[] results) Parameters Type Name Description System.Random random Query query The query to test. System.String defaultFieldName Used for displaying the query in assertion messages. IndexSearcher searcher The searcher to test the query against. System.Int32 [] results A list of documentIds that must match the query. See Also DoCheckHits(Random, Query, String, IndexSearcher, Int32[]) | Improve this Doc View Source CheckHitsQuery(Query, ScoreDoc[], ScoreDoc[], Int32[]) Tests that two queries have an expected order of documents, and that the two queries have the same score values. Declaration public static void CheckHitsQuery(Query query, ScoreDoc[] hits1, ScoreDoc[] hits2, int[] results) Parameters Type Name Description Query query ScoreDoc [] hits1 ScoreDoc [] hits2 System.Int32 [] results | Improve this Doc View Source CheckNoMatchExplanations(Query, String, IndexSearcher, Int32[]) Tests that all documents up to maxDoc which are not in the expected result set, have an explanation which indicates that the document does not match Declaration public static void CheckNoMatchExplanations(Query q, string defaultFieldName, IndexSearcher searcher, int[] results) Parameters Type Name Description Query q System.String defaultFieldName IndexSearcher searcher System.Int32 [] results | Improve this Doc View Source DoCheckHits(Random, Query, String, IndexSearcher, Int32[]) Tests that a query matches the an expected set of documents using Hits. Note that when using the Hits API, documents will only be returned if they have a positive normalized score. Declaration public static void DoCheckHits(Random random, Query query, string defaultFieldName, IndexSearcher searcher, int[] results) Parameters Type Name Description System.Random random Query query the query to test System.String defaultFieldName used for displaing the query in assertion messages IndexSearcher searcher the searcher to test the query against System.Int32 [] results a list of documentIds that must match the query See Also CheckHitCollector(Random, Query, String, IndexSearcher, Int32[]) | Improve this Doc View Source ExplainToleranceDelta(Single, Single) Returns a reasonable epsilon for comparing two floats, where minor differences are acceptable such as score vs. explain. Declaration public static float ExplainToleranceDelta(float f1, float f2) Parameters Type Name Description System.Single f1 System.Single f2 Returns Type Description System.Single | Improve this Doc View Source Hits2str(ScoreDoc[], ScoreDoc[], Int32, Int32) Declaration public static string Hits2str(ScoreDoc[] hits1, ScoreDoc[] hits2, int start, int end) Parameters Type Name Description ScoreDoc [] hits1 ScoreDoc [] hits2 System.Int32 start System.Int32 end Returns Type Description System.String | Improve this Doc View Source TopDocsString(TopDocs, Int32, Int32) Declaration public static string TopDocsString(TopDocs docs, int start, int end) Parameters Type Name Description TopDocs docs System.Int32 start System.Int32 end Returns Type Description System.String | Improve this Doc View Source VerifyExplanation(String, Int32, Single, Boolean, Explanation) Assert that an explanation has the expected score, and optionally that its sub-details max/sum/factor match to that score. Declaration public static void VerifyExplanation(string q, int doc, float score, bool deep, Explanation expl) Parameters Type Name Description System.String q String representation of the query for assertion messages. System.Int32 doc Document ID for assertion messages. System.Single score Real score value of doc with query q . System.Boolean deep Indicates whether a deep comparison of sub-Explanation details should be executed. Explanation expl The Explanation to match against score."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAsserter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAsserter.html",
    "title": "Class ExplanationAsserter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExplanationAsserter Asserts that the score explanation for every document matching a query corresponds with the true score. NOTE: this HitCollector should only be used with the Query and IndexSearcher specified at when it is constructed. Inheritance System.Object ExplanationAsserter Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class ExplanationAsserter : ICollector Constructors | Improve this Doc View Source ExplanationAsserter(Query, String, IndexSearcher) Constructs an instance which does shallow tests on the Explanation Declaration public ExplanationAsserter(Query q, string defaultFieldName, IndexSearcher s) Parameters Type Name Description Query q System.String defaultFieldName IndexSearcher s | Improve this Doc View Source ExplanationAsserter(Query, String, IndexSearcher, Boolean) Declaration public ExplanationAsserter(Query q, string defaultFieldName, IndexSearcher s, bool deep) Parameters Type Name Description Query q System.String defaultFieldName IndexSearcher s System.Boolean deep Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector See Also VerifyExplanation(String, Int32, Single, Boolean, Explanation)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAssertingSearcher.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAssertingSearcher.html",
    "title": "Class ExplanationAssertingSearcher | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExplanationAssertingSearcher An IndexSearcher that implicitly checks hte explanation of every match whenever it executes a search. Inheritance System.Object IndexSearcher ExplanationAssertingSearcher Inherited Members IndexSearcher.m_readerContext IndexSearcher.m_leafContexts IndexSearcher.m_leafSlices IndexSearcher.DefaultSimilarity IndexSearcher.Slices(IList<AtomicReaderContext>) IndexSearcher.IndexReader IndexSearcher.Doc(Int32) IndexSearcher.Doc(Int32, StoredFieldVisitor) IndexSearcher.Doc(Int32, ISet<String>) IndexSearcher.Document(Int32, ISet<String>) IndexSearcher.Similarity IndexSearcher.WrapFilter(Query, Filter) IndexSearcher.SearchAfter(ScoreDoc, Query, Int32) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32) IndexSearcher.Search(Query, Int32) IndexSearcher.Search(Query, Filter, Int32, Sort, Boolean, Boolean) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) IndexSearcher.Search(Query, Int32, Sort) IndexSearcher.SearchAfter(ScoreDoc, Query, Int32, Sort) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean) IndexSearcher.Search(Weight, ScoreDoc, Int32) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, ScoreDoc, Int32) IndexSearcher.Search(Weight, Int32, Sort, Boolean, Boolean) IndexSearcher.Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, ICollector) IndexSearcher.Rewrite(Query) IndexSearcher.Explain(Query, Int32) IndexSearcher.Explain(Weight, Int32) IndexSearcher.CreateNormalizedWeight(Query) IndexSearcher.TopReaderContext IndexSearcher.ToString() IndexSearcher.TermStatistics(Term, TermContext) IndexSearcher.CollectionStatistics(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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class ExplanationAssertingSearcher : IndexSearcher Constructors | Improve this Doc View Source ExplanationAssertingSearcher(IndexReader) Declaration public ExplanationAssertingSearcher(IndexReader r) Parameters Type Name Description IndexReader r Methods | Improve this Doc View Source CheckExplanations(Query) Declaration protected virtual void CheckExplanations(Query q) Parameters Type Name Description Query q | Improve this Doc View Source Search(Query, Filter, ICollector) Declaration public override void Search(Query query, Filter filter, ICollector results) Parameters Type Name Description Query query Filter filter ICollector results Overrides IndexSearcher.Search(Query, Filter, ICollector) | Improve this Doc View Source Search(Query, Filter, Int32) Declaration public override TopDocs Search(Query query, Filter filter, int n) Parameters Type Name Description Query query Filter filter System.Int32 n Returns Type Description TopDocs Overrides IndexSearcher.Search(Query, Filter, Int32) | Improve this Doc View Source Search(Query, Filter, Int32, Sort) Declaration public override TopFieldDocs Search(Query query, Filter filter, int n, Sort sort) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort Returns Type Description TopFieldDocs Overrides IndexSearcher.Search(Query, Filter, Int32, Sort) | Improve this Doc View Source Search(Query, ICollector) Declaration public override void Search(Query query, ICollector results) Parameters Type Name Description Query query ICollector results Overrides IndexSearcher.Search(Query, ICollector) See Also ExplanationAsserter"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.FCInvisibleMultiReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.FCInvisibleMultiReader.html",
    "title": "Class FCInvisibleMultiReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FCInvisibleMultiReader This is a MultiReader that can be used for randomly wrapping other readers without creating FieldCache insanity. The trick is to use an opaque/fake cache key. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < IndexReader > MultiReader FCInvisibleMultiReader Implements System.IDisposable Inherited Members MultiReader.DoClose() BaseCompositeReader<IndexReader>.GetTermVectors(Int32) BaseCompositeReader<IndexReader>.NumDocs BaseCompositeReader<IndexReader>.MaxDoc BaseCompositeReader<IndexReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<IndexReader>.DocFreq(Term) BaseCompositeReader<IndexReader>.TotalTermFreq(Term) BaseCompositeReader<IndexReader>.GetSumDocFreq(String) BaseCompositeReader<IndexReader>.GetDocCount(String) BaseCompositeReader<IndexReader>.GetSumTotalTermFreq(String) BaseCompositeReader<IndexReader>.ReaderIndex(Int32) BaseCompositeReader<IndexReader>.ReaderBase(Int32) BaseCompositeReader<IndexReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class FCInvisibleMultiReader : MultiReader, IDisposable Constructors | Improve this Doc View Source FCInvisibleMultiReader(IndexReader[]) Declaration public FCInvisibleMultiReader(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.html",
    "title": "Namespace Lucene.Net.Search | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.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. --> Code to search indices. Table Of Contents Search Basics 2. The Query Classes 3. Scoring: Introduction 4. Scoring: Basics 5. Changing the Scoring 6. Appendix: Search Algorithm Search Basics Lucene offers a wide variety of Query implementations, most of which are in this package, its subpackages ( spans , payloads ), or the queries module . These implementations can be combined in a wide variety of ways to provide complex querying capabilities along with information about where matches took place in the document collection. The Query Classes section below highlights some of the more important Query classes. For details on implementing your own Query class, see Custom Queries -- Expert Level below. To perform a search, applications usually call #search(Query,int) or #search(Query,Filter,int) . Once a Query has been created and submitted to the IndexSearcher , the scoring process begins. After some infrastructure setup, control finally passes to the Weight implementation and its Scorer or BulkScore instances. See the Algorithm section for more notes on the process. <!-- TODO: this page over-links the same things too many times --> Query Classes [TermQuery](xref:Lucene.Net.Search.TermQuery) Of the various implementations of Query , the TermQuery is the easiest to understand and the most often used in applications. A TermQuery matches all the documents that contain the specified Term , which is a word that occurs in a certain Field . Thus, a TermQuery identifies and scores all Document s that have a Field with the specified string in it. Constructing a TermQuery is as simple as: TermQuery tq = new TermQuery(new Term(\"fieldName\", \"term\")); In this example, the Query identifies all Document s that have the Field named \"fieldName\" containing the word \"term\" . [BooleanQuery](xref:Lucene.Net.Search.BooleanQuery) Things start to get interesting when one combines multiple TermQuery instances into a BooleanQuery . A BooleanQuery contains multiple BooleanClause s, where each clause contains a sub-query ( Query instance) and an operator (from BooleanClause.Occur ) describing how that sub-query is combined with the other clauses: 1. SHOULD — Use this operator when a clause can occur in the result set, but is not required. If a query is made up of all SHOULD clauses, then every document in the result set matches at least one of these clauses. 2. MUST — Use this operator when a clause is required to occur in the result set. Every document in the result set will match all such clauses. 3. NOT — Use this operator when a clause must not occur in the result set. No document in the result set will match any such clauses. Boolean queries are constructed by adding two or more BooleanClause instances. If too many clauses are added, a TooManyClauses exception will be thrown during searching. This most often occurs when a Query is rewritten into a BooleanQuery with many TermQuery clauses, for example by WildcardQuery . The default setting for the maximum number of clauses 1024, but this can be changed via the static method #setMaxClauseCount(int) . Phrases Another common search is to find documents containing certain phrases. This is handled three different ways: PhraseQuery — Matches a sequence of Term s. PhraseQuery uses a slop factor to determine how many positions may occur between any two terms in the phrase and still be considered a match. The slop is 0 by default, meaning the phrase must match exactly. MultiPhraseQuery — A more general form of PhraseQuery that accepts multiple Terms for a position in the phrase. For example, this can be used to perform phrase queries that also incorporate synonyms. 3. SpanNearQuery — Matches a sequence of other SpanQuery instances. SpanNearQuery allows for much more complicated phrase queries since it is constructed from other SpanQuery instances, instead of only TermQuery instances. [TermRangeQuery](xref:Lucene.Net.Search.TermRangeQuery) The TermRangeQuery matches all documents that occur in the exclusive range of a lower Term and an upper Term according to TermsEnum.getComparator . It is not intended for numerical ranges; use NumericRangeQuery instead. For example, one could find all documents that have terms beginning with the letters a through c . [NumericRangeQuery](xref:Lucene.Net.Search.NumericRangeQuery) The NumericRangeQuery matches all documents that occur in a numeric range. For NumericRangeQuery to work, you must index the values using a one of the numeric fields ( IntField , LongField , FloatField , or DoubleField ). [PrefixQuery](xref:Lucene.Net.Search.PrefixQuery), [WildcardQuery](xref:Lucene.Net.Search.WildcardQuery), [RegexpQuery](xref:Lucene.Net.Search.RegexpQuery) While the PrefixQuery has a different implementation, it is essentially a special case of the WildcardQuery . The PrefixQuery allows an application to identify all documents with terms that begin with a certain string. The WildcardQuery generalizes this by allowing for the use of (matches 0 or more characters) and ? (matches exactly one character) wildcards. Note that the WildcardQuery can be quite slow. Also note that WildcardQuery should not start with and ? , as these are extremely slow. Some QueryParsers may not allow this by default, but provide a setAllowLeadingWildcard method to remove that protection. The RegexpQuery is even more general than WildcardQuery, allowing an application to identify all documents with terms that match a regular expression pattern. [FuzzyQuery](xref:Lucene.Net.Search.FuzzyQuery) A FuzzyQuery matches documents that contain terms similar to the specified term. Similarity is determined using Levenshtein (edit) distance . This type of query can be useful when accounting for spelling variations in the collection. Scoring — Introduction Lucene scoring is the heart of why we all love Lucene. It is blazingly fast and it hides almost all of the complexity from the user. In a nutshell, it works. At least, that is, until it doesn't work, or doesn't work as one would expect it to work. Then we are left digging into Lucene internals or asking for help on java-user@lucene.apache.org to figure out why a document with five of our query terms scores lower than a different document with only one of the query terms. While this document won't answer your specific scoring issues, it will, hopefully, point you to the places that can help you figure out the what and why of Lucene scoring. Lucene scoring supports a number of pluggable information retrieval models , including: * Vector Space Model (VSM) * Probablistic Models such as Okapi BM25 and DFR * Language models These models can be plugged in via the Similarity API , and offer extension hooks and parameters for tuning. In general, Lucene first finds the documents that need to be scored based on boolean logic in the Query specification, and then ranks this subset of matching documents via the retrieval model. For some valuable references on VSM and IR in general refer to Lucene Wiki IR references . The rest of this document will cover Scoring basics and explain how to change your Similarity . Next, it will cover ways you can customize the lucene internals in Custom Queries -- Expert Level , which gives details on implementing your own Query class and related functionality. Finally, we will finish up with some reference material in the Appendix . Scoring — Basics Scoring is very much dependent on the way documents are indexed, so it is important to understand indexing. (see Lucene overview before continuing on with this section) Be sure to use the useful Doc) to understand how the score for a certain matching document was computed. Generally, the Query determines which documents match (a binary decision), while the Similarity determines how to assign scores to the matching documents. Fields and Documents In Lucene, the objects we are scoring are Document s. A Document is a collection of Field s. Each Field has semantics about how it is created and stored ( Tokenized , Stored , etc). It is important to note that Lucene scoring works on Fields and then combines the results to return Documents. This is important because two Documents with the exact same content, but one having the content in two Fields and the other in one Field may return different scores for the same query due to length normalization. Score Boosting Lucene allows influencing search results by \"boosting\" at different times: * Index-time boost by calling Field.setBoost before a document is added to the index. * Query-time boost by setting a boost on a query clause, calling Query.setBoost . Indexing time boosts are pre-processed for storage efficiency and written to storage for a field as follows: * All boosts of that field (i.e. all boosts under the same field name in that doc) are multiplied. * The boost is then encoded into a normalization value by the Similarity object at index-time: ComputeNorm . The actual encoding depends upon the Similarity implementation, but note that most use a lossy encoding (such as multiplying the boost with document length or similar, packed into a single byte!). * Decoding of any index-time normalization values and integration into the document's score is also performed at search time by the Similarity. Changing Scoring — Similarity Changing Similarity is an easy way to influence scoring, this is done at index-time with IndexWriterConfig.setSimilarity and at query-time with IndexSearcher.setSimilarity . Be sure to use the same Similarity at query-time as at index-time (so that norms are encoded/decoded correctly); Lucene makes no effort to verify this. You can influence scoring by configuring a different built-in Similarity implementation, or by tweaking its parameters, subclassing it to override behavior. Some implementations also offer a modular API which you can extend by plugging in a different component (e.g. term frequency normalizer). Finally, you can extend the low level Similarity directly to implement a new retrieval model, or to use external scoring factors particular to your application. For example, a custom Similarity can access per-document values via FieldCache or NumericDocValues and integrate them into the score. See the Lucene.Net.Search.Similarities package documentation for information on the built-in available scoring models and extending or changing Similarity. Custom Queries — Expert Level Custom queries are an expert level task, so tread carefully and be prepared to share your code if you want help. With the warning out of the way, it is possible to change a lot more than just the Similarity when it comes to matching and scoring in Lucene. Lucene's search is a complex mechanism that is grounded by three main classes : 1. Query — The abstract object representation of the user's information need. 2. Weight — The internal interface representation of the user's Query, so that Query objects may be reused. This is global (across all segments of the index) and generally will require global statistics (such as docFreq for a given term across all segments). 3. Scorer — An abstract class containing common functionality for scoring. Provides both scoring and explanation capabilities. This is created per-segment. 4. BulkScorer — An abstract class that scores a range of documents. A default implementation simply iterates through the hits from Scorer , but some queries such as BooleanQuery have more efficient implementations. Details on each of these classes, and their children, can be found in the subsections below. The Query Class In some sense, the Query class is where it all begins. Without a Query, there would be nothing to score. Furthermore, the Query class is the catalyst for the other scoring classes as it is often responsible for creating them or coordinating the functionality between them. The Query class has several methods that are important for derived classes: 1. Searcher) — A Weight is the internal representation of the Query, so each Query implementation must provide an implementation of Weight. See the subsection on The Weight Interface below for details on implementing the Weight interface. 2. Reader) — Rewrites queries into primitive queries. Primitive queries are: TermQuery , BooleanQuery , and other queries that implement Searcher) The Weight Interface The Weight interface provides an internal representation of the Query so that it can be reused. Any IndexSearcher dependent state should be stored in the Weight implementation, not in the Query class. The interface defines five methods that must be implemented: 1. GetQuery — Pointer to the Query that this Weight represents. 2. GetValueForNormalization — A weight can return a floating point value to indicate its magnitude for query normalization. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#getValueForNormalization . For example, with Lucene's classic vector-space formula , this is implemented as the sum of squared weights: ` 3. [TopLevelBoost)](xref:Lucene.Net.Search.Weight#methods) — Performs query normalization: * topLevelBoost : A query-boost factor from any wrapping queries that should be multiplied into every document's score. For example, a TermQuery that is wrapped within a BooleanQuery with a boost of 5 would receive this value at this time. This allows the TermQuery (the leaf node in this case) to compute this up-front a single time (e.g. by multiplying into the IDF), rather than for every document. * norm`: Passes in a a normalization factor which may allow for comparing scores between queries. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#normalize . 4. AcceptDocs) — Construct a new Scorer for this Weight. See The Scorer Class below for help defining a Scorer. As the name implies, the Scorer is responsible for doing the actual scoring of documents given the Query. 5. AcceptDocs) — Construct a new BulkScorer for this Weight. See The BulkScorer Class below for help defining a BulkScorer. This is an optional method, and most queries do not implement it. 6. Doc) — Provide a means for explaining why a given document was scored the way it was. Typically a weight such as TermWeight that scores via a Similarity will make use of the Similarity's implementation: Freq) . The Scorer Class The Scorer abstract class provides common scoring functionality for all Scorer implementations and is the heart of the Lucene scoring process. The Scorer defines the following abstract (some of them are not yet abstract, but will be in future versions and should be considered as such now) methods which must be implemented (some of them inherited from DocIdSetIterator ): 1. NextDoc — Advances to the next document that matches this Query, returning true if and only if there is another document that matches. 2. DocID — Returns the id of the Document that contains the match. 3. Score — Return the score of the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the configured Similarity: Freq) . 4. Freq — Returns the number of matches for the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the term frequency from the inverted index: DocsEnum.freq . 5. Advance — Skip ahead in the document matches to the document whose id is greater than or equal to the passed in value. In many instances, advance can be implemented more efficiently than simply looping through all the matching documents until the target document is identified. 6. GetChildren — Returns any child subscorers underneath this scorer. This allows for users to navigate the scorer hierarchy and receive more fine-grained details on the scoring process. The BulkScorer Class The BulkScorer scores a range of documents. There is only one abstract method: 1. Score — Score all documents up to but not including the specified max document. Why would I want to add my own Query? In a nutshell, you want to add your own custom Query implementation when you think that Lucene's aren't appropriate for the task that you want to do. You might be doing some cutting edge research or you need more information back out of Lucene (similar to Doug adding SpanQuery functionality). Appendix: Search Algorithm This section is mostly notes on stepping through the Scoring process and serves as fertilizer for the earlier sections. In the typical search application, a Query is passed to the IndexSearcher , beginning the scoring process. Once inside the IndexSearcher, a Collector is used for the scoring and sorting of the search results. These important objects are involved in a search: 1. The Weight object of the Query. The Weight object is an internal representation of the Query that allows the Query to be reused by the IndexSearcher. 2. The IndexSearcher that initiated the call. 3. A Filter for limiting the result set. Note, the Filter may be null. 4. A Sort object for specifying how to sort the results if the standard score-based sort method is not desired. Assuming we are not sorting (since sorting doesn't affect the raw Lucene score), we call one of the search methods of the IndexSearcher, passing in the Weight object created by IndexSearcher.createNormalizedWeight , Filter and the number of results we want. This method returns a TopDocs object, which is an internal collection of search results. The IndexSearcher creates a TopScoreDocCollector and passes it along with the Weight, Filter to another expert search method (for more on the Collector mechanism, see IndexSearcher ). The TopScoreDocCollector uses a PriorityQueue to collect the top results for the search. If a Filter is being used, some initial setup is done to determine which docs to include. Otherwise, we ask the Weight for a Scorer for each IndexReader segment and proceed by calling BulkScorer.score . At last, we are actually going to score some documents. The score method takes in the Collector (most likely the TopScoreDocCollector or TopFieldCollector) and does its business.Of course, here is where things get involved. The Scorer that is returned by the Weight object depends on what type of Query was submitted. In most real world applications with multiple query terms, the Scorer is going to be a BooleanScorer2 created from BooleanWeight (see the section on custom queries for info on changing this). Assuming a BooleanScorer2, we first initialize the Coordinator, which is used to apply the coord() factor. We then get a internal Scorer based on the required, optional and prohibited parts of the query. Using this internal Scorer, the BooleanScorer2 then proceeds into a while loop based on the Scorer.nextDoc method. The nextDoc() method advances to the next document matching the query. This is an abstract method in the Scorer class and is thus overridden by all derived implementations. If you have a simple OR query your internal Scorer is most likely a DisjunctionSumScorer, which essentially combines the scorers from the sub scorers of the OR'd terms. Classes AssertingBulkOutOfOrderScorer A crazy BulkScorer that wraps another BulkScorer but shuffles the order of the collected documents. AssertingBulkScorer Wraps a Scorer with additional checks. AssertingCollector Wraps another ICollector and checks that AcceptsDocsOutOfOrder is respected. AssertingIndexSearcher Helper class that adds some extra checks to ensure correct usage of IndexSearcher and Weight . AssertingQuery Assertion-enabled query. AssertingScorer Wraps a Scorer with additional checks. CheckHits Utility class for asserting expected hits in tests. ExplanationAsserter Asserts that the score explanation for every document matching a query corresponds with the true score. NOTE: this HitCollector should only be used with the Query and IndexSearcher specified at when it is constructed. ExplanationAssertingSearcher An IndexSearcher that implicitly checks hte explanation of every match whenever it executes a search. FCInvisibleMultiReader This is a MultiReader that can be used for randomly wrapping other readers without creating FieldCache insanity. The trick is to use an opaque/fake cache key. QueryUtils Utility class for sanity-checking queries. RandomSimilarityProvider Similarity implementation that randomizes Similarity implementations per-field. The choices are 'sticky', so the selected algorithm is always used for the same field. SearchEquivalenceTestBase Simple base class for checking search equivalence. Extend it, and write tests that create RandomTerm() s (all terms are single characters a-z), and use AssertSameSet(Query, Query) and AssertSubsetOf(Query, Query) . SearcherExpiredException Thrown when the lease for a searcher has expired. SetCollector Just collects document ids into a set. ShardSearchingTestBase Base test class for simulating distributed search across multiple shards. ShardSearchingTestBase.NodeState ShardSearchingTestBase.NodeState.ShardIndexSearcher Matches docs in the local shard but scores based on aggregated stats (\"mock distributed scoring\") from all nodes. ShardSearchingTestBase.SearcherAndVersion An IndexSearcher and associated version (lease)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.QueryUtils.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.QueryUtils.html",
    "title": "Class QueryUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryUtils Utility class for sanity-checking queries. Inheritance System.Object QueryUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public static class QueryUtils Methods | Improve this Doc View Source Check(Query) Check the types of things query objects should be able to do. Declaration public static void Check(Query q) Parameters Type Name Description Query q | Improve this Doc View Source Check(Random, Query, IndexSearcher) Various query sanity checks on a searcher, some checks are only done for instance of IndexSearcher . Declaration public static void Check(Random random, Query q1, IndexSearcher s) Parameters Type Name Description System.Random random A random instance (usually Random ). Query q1 A Query . IndexSearcher s An IndexSearcher . See Also Check(Query) CheckFirstSkipTo(Query, IndexSearcher) CheckSkipTo(Query, IndexSearcher) CheckExplanations(Query, IndexSearcher) CheckEqual(Query, Query) | Improve this Doc View Source Check(Random, Query, IndexSearcher, Boolean) Declaration public static void Check(Random random, Query q1, IndexSearcher s, bool wrap) Parameters Type Name Description System.Random random Query q1 IndexSearcher s System.Boolean wrap | Improve this Doc View Source CheckEqual(Query, Query) Declaration public static void CheckEqual(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source CheckExplanations(Query, IndexSearcher) Deep check that explanations of a query 'score' correctly. Declaration public static void CheckExplanations(Query q, IndexSearcher s) Parameters Type Name Description Query q IndexSearcher s | Improve this Doc View Source CheckFirstSkipTo(Query, IndexSearcher) Check that first skip on just created scorers always goes to the right doc. Declaration public static void CheckFirstSkipTo(Query q, IndexSearcher s) Parameters Type Name Description Query q IndexSearcher s | Improve this Doc View Source CheckHashEquals(Query) Check very basic System.Object.GetHashCode() and System.Object.Equals(System.Object) . Declaration public static void CheckHashEquals(Query q) Parameters Type Name Description Query q | Improve this Doc View Source CheckSkipTo(Query, IndexSearcher) Alternate scorer skipTo(),skipTo(),next(),next(),skipTo(),skipTo(), etc and ensure a hitcollector receives same docs and scores. Declaration public static void CheckSkipTo(Query q, IndexSearcher s) Parameters Type Name Description Query q IndexSearcher s | Improve this Doc View Source CheckUnequal(Query, Query) Declaration public static void CheckUnequal(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source PurgeFieldCache(IndexReader) Declaration public static void PurgeFieldCache(IndexReader r) Parameters Type Name Description IndexReader r | Improve this Doc View Source WrapUnderlyingReader(Random, IndexSearcher, Int32) Given an IndexSearcher , returns a new IndexSearcher whose IndexReader is a MultiReader containing the IndexReader of the original IndexSearcher , as well as several \"empty\" IndexReader s -- some of which will have deleted documents in them. This new IndexSearcher should behave exactly the same as the original IndexSearcher . Declaration public static IndexSearcher WrapUnderlyingReader(Random random, IndexSearcher s, int edge) Parameters Type Name Description System.Random random IndexSearcher s The searcher to wrap. System.Int32 edge If negative, s will be the first sub; if 0, s will be in the middle, if positive s will be the last sub. Returns Type Description IndexSearcher"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.RandomSimilarityProvider.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.RandomSimilarityProvider.html",
    "title": "Class RandomSimilarityProvider | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomSimilarityProvider Similarity implementation that randomizes Similarity implementations per-field. The choices are 'sticky', so the selected algorithm is always used for the same field. Inheritance System.Object Similarity PerFieldSimilarityWrapper RandomSimilarityProvider Inherited Members PerFieldSimilarityWrapper.ComputeNorm(FieldInvertState) PerFieldSimilarityWrapper.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) PerFieldSimilarityWrapper.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomSimilarityProvider : PerFieldSimilarityWrapper Constructors | Improve this Doc View Source RandomSimilarityProvider(Random) Declaration public RandomSimilarityProvider(Random random) Parameters Type Name Description System.Random random Methods | Improve this Doc View Source Coord(Int32, Int32) Declaration public override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single Overrides Similarity.Coord(Int32, Int32) | Improve this Doc View Source Get(String) Declaration public override Similarity Get(string field) Parameters Type Name Description System.String field Returns Type Description Similarity Overrides PerFieldSimilarityWrapper.Get(String) | Improve this Doc View Source QueryNorm(Single) Declaration public override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights Returns Type Description System.Single Overrides Similarity.QueryNorm(Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearchEquivalenceTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearchEquivalenceTestBase.html",
    "title": "Class SearchEquivalenceTestBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearchEquivalenceTestBase Simple base class for checking search equivalence. Extend it, and write tests that create RandomTerm() s (all terms are single characters a-z), and use AssertSameSet(Query, Query) and AssertSubsetOf(Query, Query) . Inheritance System.Object LuceneTestCase SearchEquivalenceTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class SearchEquivalenceTestBase : LuceneTestCase Fields | Improve this Doc View Source m_analyzer Declaration protected static Analyzer m_analyzer Field Value Type Description Analyzer | Improve this Doc View Source m_directory Declaration protected static Directory m_directory Field Value Type Description Directory | Improve this Doc View Source m_reader Declaration protected static IndexReader m_reader Field Value Type Description IndexReader | Improve this Doc View Source m_s1 Declaration protected static IndexSearcher m_s1 Field Value Type Description IndexSearcher | Improve this Doc View Source m_s2 Declaration protected static IndexSearcher m_s2 Field Value Type Description IndexSearcher | Improve this Doc View Source m_stopword Declaration protected static string m_stopword Field Value Type Description System.String Methods | Improve this Doc View Source AfterClass() Declaration [OneTimeTearDown] public override void AfterClass() Overrides LuceneTestCase.AfterClass() | Improve this Doc View Source AssertSameSet(Query, Query) Asserts that the documents returned by q1 are the same as of those returned by q2 . Declaration public virtual void AssertSameSet(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source AssertSubsetOf(Query, Query) Asserts that the documents returned by q1 are a subset of those returned by q2 . Declaration public virtual void AssertSubsetOf(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source AssertSubsetOf(Query, Query, Filter) Asserts that the documents returned by q1 are a subset of those returned by q2 . Both queries will be filtered by filter . Declaration protected virtual void AssertSubsetOf(Query q1, Query q2, Filter filter) Parameters Type Name Description Query q1 Query q2 Filter filter | Improve this Doc View Source BeforeClass() Declaration [OneTimeSetUp] public override void BeforeClass() Overrides LuceneTestCase.BeforeClass() | Improve this Doc View Source RandomFilter() Returns a random filter over the document set. Declaration protected virtual Filter RandomFilter() Returns Type Description Filter | Improve this Doc View Source RandomTerm() Returns a term suitable for searching. Terms are single characters in lowercase (a-z). Declaration protected virtual Term RandomTerm() Returns Type Description Term"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearcherExpiredException.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearcherExpiredException.html",
    "title": "Class SearcherExpiredException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearcherExpiredException Thrown when the lease for a searcher has expired. Inheritance System.Object System.Exception SearcherExpiredException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class SearcherExpiredException : Exception, ISerializable Constructors | Improve this Doc View Source SearcherExpiredException(String) Declaration public SearcherExpiredException(string message) Parameters Type Name Description System.String message Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.SetCollector.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.SetCollector.html",
    "title": "Class SetCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SetCollector Just collects document ids into a set. Inheritance System.Object SetCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class SetCollector : ICollector Constructors | Improve this Doc View Source SetCollector(ISet<Nullable<Int32>>) Declaration public SetCollector(ISet<int?> bag) Parameters Type Name Description System.Collections.Generic.ISet < System.Nullable < System.Int32 >> bag Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.html",
    "title": "Class ShardSearchingTestBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShardSearchingTestBase Base test class for simulating distributed search across multiple shards. Inheritance System.Object LuceneTestCase ShardSearchingTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ShardSearchingTestBase : LuceneTestCase Fields | Improve this Doc View Source m_nodes Declaration protected ShardSearchingTestBase.NodeState[] m_nodes Field Value Type Description ShardSearchingTestBase.NodeState [] Methods | Improve this Doc View Source Finish() Declaration protected virtual void Finish() | Improve this Doc View Source Start(Int32, Double, Int32) Declaration protected virtual void Start(int numNodes, double runTimeSec, int maxSearcherAgeSeconds) Parameters Type Name Description System.Int32 numNodes System.Double runTimeSec System.Int32 maxSearcherAgeSeconds"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.html",
    "title": "Class ShardSearchingTestBase.NodeState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShardSearchingTestBase.NodeState Inheritance System.Object ShardSearchingTestBase.NodeState 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.Search Assembly : Lucene.Net.TestFramework.dll Syntax protected sealed class NodeState : IDisposable Constructors | Improve this Doc View Source NodeState(ShardSearchingTestBase, Random, Int32, Int32) Declaration public NodeState(ShardSearchingTestBase shardSearchingTestBase, Random random, int nodeID, int numNodes) Parameters Type Name Description ShardSearchingTestBase shardSearchingTestBase System.Random random System.Int32 nodeID System.Int32 numNodes Properties | Improve this Doc View Source Dir Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source Mgr Declaration public SearcherManager Mgr { get; } Property Value Type Description SearcherManager | Improve this Doc View Source MyNodeID Declaration public int MyNodeID { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Searchers Declaration public SearcherLifetimeManager Searchers { get; } Property Value Type Description SearcherLifetimeManager | Improve this Doc View Source Writer Declaration public IndexWriter Writer { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source Acquire() Declaration public ShardSearchingTestBase.NodeState.ShardIndexSearcher Acquire() Returns Type Description ShardSearchingTestBase.NodeState.ShardIndexSearcher | Improve this Doc View Source Acquire(Int64[]) Declaration public ShardSearchingTestBase.NodeState.ShardIndexSearcher Acquire(long[] nodeVersions) Parameters Type Name Description System.Int64 [] nodeVersions Returns Type Description ShardSearchingTestBase.NodeState.ShardIndexSearcher | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source GetCurrentNodeVersions() Declaration public long[] GetCurrentNodeVersions() Returns Type Description System.Int64 [] | Improve this Doc View Source InitSearcher(Int64[]) Declaration public void InitSearcher(long[] nodeVersions) Parameters Type Name Description System.Int64 [] nodeVersions | Improve this Doc View Source Release(ShardSearchingTestBase.NodeState.ShardIndexSearcher) Declaration public void Release(ShardSearchingTestBase.NodeState.ShardIndexSearcher s) Parameters Type Name Description ShardSearchingTestBase.NodeState.ShardIndexSearcher s | Improve this Doc View Source Reopen() Declaration public void Reopen() | Improve this Doc View Source UpdateNodeVersion(Int32, Int64) Declaration public void UpdateNodeVersion(int nodeID, long version) Parameters Type Name Description System.Int32 nodeID System.Int64 version Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.ShardIndexSearcher.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.ShardIndexSearcher.html",
    "title": "Class ShardSearchingTestBase.NodeState.ShardIndexSearcher | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShardSearchingTestBase.NodeState.ShardIndexSearcher Matches docs in the local shard but scores based on aggregated stats (\"mock distributed scoring\") from all nodes. Inheritance System.Object IndexSearcher ShardSearchingTestBase.NodeState.ShardIndexSearcher Inherited Members IndexSearcher.m_readerContext IndexSearcher.m_leafContexts IndexSearcher.m_leafSlices IndexSearcher.DefaultSimilarity IndexSearcher.Slices(IList<AtomicReaderContext>) IndexSearcher.IndexReader IndexSearcher.Doc(Int32) IndexSearcher.Doc(Int32, StoredFieldVisitor) IndexSearcher.Doc(Int32, ISet<String>) IndexSearcher.Document(Int32, ISet<String>) IndexSearcher.Similarity IndexSearcher.WrapFilter(Query, Filter) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32) IndexSearcher.Search(Query, Filter, Int32) IndexSearcher.Search(Query, Filter, ICollector) IndexSearcher.Search(Query, ICollector) IndexSearcher.Search(Query, Filter, Int32, Sort) IndexSearcher.Search(Query, Filter, Int32, Sort, Boolean, Boolean) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) IndexSearcher.SearchAfter(ScoreDoc, Query, Int32, Sort) IndexSearcher.SearchAfter(ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean) IndexSearcher.Search(Weight, ScoreDoc, Int32) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, ScoreDoc, Int32) IndexSearcher.Search(Weight, Int32, Sort, Boolean, Boolean) IndexSearcher.Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) IndexSearcher.Search(IList<AtomicReaderContext>, Weight, ICollector) IndexSearcher.Explain(Query, Int32) IndexSearcher.Explain(Weight, Int32) IndexSearcher.CreateNormalizedWeight(Query) IndexSearcher.TopReaderContext IndexSearcher.ToString() 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.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class ShardIndexSearcher : IndexSearcher Constructors | Improve this Doc View Source ShardIndexSearcher(ShardSearchingTestBase.NodeState, Int64[], IndexReader, Int32) Declaration public ShardIndexSearcher(ShardSearchingTestBase.NodeState nodeState, long[] nodeVersions, IndexReader localReader, int nodeID) Parameters Type Name Description ShardSearchingTestBase.NodeState nodeState System.Int64 [] nodeVersions IndexReader localReader System.Int32 nodeID Properties | Improve this Doc View Source MyNodeID Declaration public int MyNodeID { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CollectionStatistics(String) Declaration public override CollectionStatistics CollectionStatistics(string field) Parameters Type Name Description System.String field Returns Type Description CollectionStatistics Overrides IndexSearcher.CollectionStatistics(String) | Improve this Doc View Source GetNodeVersions() Declaration public long[] GetNodeVersions() Returns Type Description System.Int64 [] | Improve this Doc View Source LocalSearch(Query, Int32) Declaration public virtual TopDocs LocalSearch(Query query, int numHits) Parameters Type Name Description Query query System.Int32 numHits Returns Type Description TopDocs | Improve this Doc View Source LocalSearch(Query, Int32, Sort) Declaration public virtual TopFieldDocs LocalSearch(Query query, int numHits, Sort sort) Parameters Type Name Description Query query System.Int32 numHits Sort sort Returns Type Description TopFieldDocs | Improve this Doc View Source LocalSearchAfter(ScoreDoc, Query, Int32) Declaration public virtual TopDocs LocalSearchAfter(ScoreDoc after, Query query, int numHits) Parameters Type Name Description ScoreDoc after Query query System.Int32 numHits Returns Type Description TopDocs | Improve this Doc View Source Rewrite(Query) Declaration public override Query Rewrite(Query original) Parameters Type Name Description Query original Returns Type Description Query Overrides IndexSearcher.Rewrite(Query) | Improve this Doc View Source Search(Query, Int32) Declaration public override TopDocs Search(Query query, int numHits) Parameters Type Name Description Query query System.Int32 numHits Returns Type Description TopDocs Overrides IndexSearcher.Search(Query, Int32) | Improve this Doc View Source Search(Query, Int32, Sort) Declaration public override TopFieldDocs Search(Query query, int numHits, Sort sort) Parameters Type Name Description Query query System.Int32 numHits Sort sort Returns Type Description TopFieldDocs Overrides IndexSearcher.Search(Query, Int32, Sort) | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32) Declaration public override TopDocs SearchAfter(ScoreDoc after, Query query, int numHits) Parameters Type Name Description ScoreDoc after Query query System.Int32 numHits Returns Type Description TopDocs Overrides IndexSearcher.SearchAfter(ScoreDoc, Query, Int32) | Improve this Doc View Source TermStatistics(Term, TermContext) Declaration public override TermStatistics TermStatistics(Term term, TermContext context) Parameters Type Name Description Term term TermContext context Returns Type Description TermStatistics Overrides IndexSearcher.TermStatistics(Term, TermContext)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.SearcherAndVersion.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.SearcherAndVersion.html",
    "title": "Class ShardSearchingTestBase.SearcherAndVersion | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ShardSearchingTestBase.SearcherAndVersion An IndexSearcher and associated version (lease) Inheritance System.Object ShardSearchingTestBase.SearcherAndVersion Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax protected class SearcherAndVersion Constructors | Improve this Doc View Source SearcherAndVersion(IndexSearcher, Int64) Declaration public SearcherAndVersion(IndexSearcher searcher, long version) Parameters Type Name Description IndexSearcher searcher System.Int64 version Properties | Improve this Doc View Source Searcher Declaration public IndexSearcher Searcher { get; } Property Value Type Description IndexSearcher | Improve this Doc View Source Version Declaration public long Version { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryTestCase.html",
    "title": "Class BaseDirectoryTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseDirectoryTestCase Base class for per-Directory tests. Inheritance System.Object LuceneTestCase BaseDirectoryTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Store Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseDirectoryTestCase : LuceneTestCase Methods | Improve this Doc View Source GetDirectory(DirectoryInfo) A subclass returns the Directory to be tested; if it's an FS-based directory it should point to the specified path, else it can ignore it. Declaration protected abstract Directory GetDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path Returns Type Description Directory | Improve this Doc View Source TestByte() Declaration [Test] public virtual void TestByte() | Improve this Doc View Source TestChecksum() Declaration [Test] public virtual void TestChecksum() | Improve this Doc View Source TestCopyBytes() Declaration [Test] public virtual void TestCopyBytes() | Improve this Doc View Source TestCopyBytesWithThreads() Declaration [Test] public virtual void TestCopyBytesWithThreads() | Improve this Doc View Source TestDeleteFile() Declaration [Test] public virtual void TestDeleteFile() | Improve this Doc View Source TestDetectClose() Make sure directory throws System.ObjectDisposedException if you try to CreateOutput(String, IOContext) after disposing. Declaration [Test] public virtual void TestDetectClose() | Improve this Doc View Source TestFileExistsInListAfterCreated() LUCENE-1468: once we create an output, we should see it in the dir listing. Declaration [Test] public virtual void TestFileExistsInListAfterCreated() | Improve this Doc View Source TestFsyncDoesntCreateNewFiles() Declaration [Test] public virtual void TestFsyncDoesntCreateNewFiles() | Improve this Doc View Source TestIllegalEOF() Declaration [Test] public virtual void TestIllegalEOF() | Improve this Doc View Source TestInt16() Declaration [Test] public virtual void TestInt16() | Improve this Doc View Source TestInt32() Declaration [Test] public virtual void TestInt32() | Improve this Doc View Source TestInt64() Declaration [Test] public virtual void TestInt64() | Improve this Doc View Source TestLargeWrites() This test that writes larger than the size of the buffer output will correctly increment the file pointer. Declaration [Test] public virtual void TestLargeWrites() | Improve this Doc View Source TestNoDir() Declaration [Test] public virtual void TestNoDir() | Improve this Doc View Source TestSeekToEndOfFile() Declaration [Test] public virtual void TestSeekToEndOfFile() | Improve this Doc View Source TestSeekToEOFThenBack() Declaration [Test] public void TestSeekToEOFThenBack() | Improve this Doc View Source TestString() Declaration [Test] public virtual void TestString() | Improve this Doc View Source TestVInt32() Declaration [Test] public virtual void TestVInt32() | Improve this Doc View Source TestVInt64() Declaration [Test] public virtual void TestVInt64()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryWrapper.html",
    "title": "Class BaseDirectoryWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseDirectoryWrapper Calls check index on dispose. Inheritance System.Object Directory FilterDirectory BaseDirectoryWrapper MockDirectoryWrapper Implements System.IDisposable Inherited Members FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ListAll() FilterDirectory.FileExists(String) FilterDirectory.DeleteFile(String) FilterDirectory.FileLength(String) FilterDirectory.CreateOutput(String, IOContext) FilterDirectory.Sync(ICollection<String>) FilterDirectory.OpenInput(String, IOContext) FilterDirectory.MakeLock(String) FilterDirectory.ClearLock(String) FilterDirectory.SetLockFactory(LockFactory) FilterDirectory.GetLockID() FilterDirectory.LockFactory FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() 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.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class BaseDirectoryWrapper : FilterDirectory, IDisposable Constructors | Improve this Doc View Source BaseDirectoryWrapper(Directory) Declaration public BaseDirectoryWrapper(Directory delegate) Parameters Type Name Description Directory delegate Properties | Improve this Doc View Source CheckIndexOnDispose Set whether or not checkindex should be run on dispose Declaration public virtual bool CheckIndexOnDispose { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source CrossCheckTermVectorsOnDispose Declaration public virtual bool CrossCheckTermVectorsOnDispose { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsOpen Declaration public virtual bool IsOpen { get; protected set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides Directory.Copy(Directory, String, String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FilterDirectory.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.Failure.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.Failure.html",
    "title": "Class Failure | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Failure Objects that represent fail-able conditions. Objects of a derived class are created and registered with the mock directory. After register, each object will be invoked once for each first write of a file, giving the object a chance to throw an System.IO.IOException . Inheritance System.Object Failure 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.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class Failure Fields | Improve this Doc View Source m_doFail Declaration protected bool m_doFail Field Value Type Description System.Boolean Methods | Improve this Doc View Source ClearDoFail() Declaration public virtual void ClearDoFail() | Improve this Doc View Source Eval(MockDirectoryWrapper) Eval is called on the first write of every new file. Declaration public virtual void Eval(MockDirectoryWrapper dir) Parameters Type Name Description MockDirectoryWrapper dir | Improve this Doc View Source Reset() Reset should set the state of the failure to its default (freshly constructed) state. Reset is convenient for tests that want to create one failure object and then reuse it in multiple cases. This, combined with the fact that Failure subclasses are often anonymous classes makes reset difficult to do otherwise. A typical example of use is Failure failure = new Failure() { ... }; ... mock.FailOn(failure.Reset()) Declaration public virtual Failure Reset() Returns Type Description Failure | Improve this Doc View Source SetDoFail() Declaration public virtual void SetDoFail()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.FakeIOException.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.FakeIOException.html",
    "title": "Class FakeIOException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FakeIOException Use this when throwing fake System.IO.IOException , e.g. from Failure . Inheritance System.Object System.Exception System.SystemException System.IO.IOException FakeIOException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class FakeIOException : IOException, ISerializable Constructors | Improve this Doc View Source FakeIOException() Declaration public FakeIOException() Implements System.Runtime.Serialization.ISerializable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.html",
    "title": "Namespace Lucene.Net.Store | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Store <!-- 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. --> Binary i/o API, used for all index data. Classes BaseDirectoryTestCase Base class for per-Directory tests. BaseDirectoryWrapper Calls check index on dispose. Failure Objects that represent fail-able conditions. Objects of a derived class are created and registered with the mock directory. After register, each object will be invoked once for each first write of a file, giving the object a chance to throw an System.IO.IOException . FakeIOException Use this when throwing fake System.IO.IOException , e.g. from Failure . MockDirectoryWrapper This is a Directory Wrapper that adds methods intended to be used only by unit tests. It also adds a number of features useful for testing: Instances created by NewDirectory() are tracked to ensure they are disposed by the test. When a MockDirectoryWrapper is disposed, it will throw an exception if it has any open files against it (with a stacktrace indicating where they were opened from). When a MockDirectoryWrapper is disposed, it runs CheckIndex to test if the index was corrupted. MockDirectoryWrapper simulates some \"features\" of Windows, such as refusing to write/delete to open files. MockIndexInputWrapper Used by MockDirectoryWrapper to create an input stream that keeps track of when it's been disposed. MockIndexOutputWrapper Used by MockDirectoryWrapper to create an output stream that will throw an System.IO.IOException on fake disk full, track max disk space actually used, and maybe throw random System.IO.IOException s. MockLockFactoryWrapper Used by MockDirectoryWrapper to wrap another factory and track open locks. TestHelper This class provides access to namespace-level features defined in the Store namespace. It is used for testing only. Enums Throttling Enum for controlling hard disk throttling. Set via Throttling WARNING: can make tests very slow."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockDirectoryWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockDirectoryWrapper.html",
    "title": "Class MockDirectoryWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockDirectoryWrapper This is a Directory Wrapper that adds methods intended to be used only by unit tests. It also adds a number of features useful for testing: Instances created by NewDirectory() are tracked to ensure they are disposed by the test. When a MockDirectoryWrapper is disposed, it will throw an exception if it has any open files against it (with a stacktrace indicating where they were opened from). When a MockDirectoryWrapper is disposed, it runs CheckIndex to test if the index was corrupted. MockDirectoryWrapper simulates some \"features\" of Windows, such as refusing to write/delete to open files. Inheritance System.Object Directory FilterDirectory BaseDirectoryWrapper MockDirectoryWrapper Implements System.IDisposable Inherited Members BaseDirectoryWrapper.IsOpen BaseDirectoryWrapper.CheckIndexOnDispose BaseDirectoryWrapper.CrossCheckTermVectorsOnDispose FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() 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.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockDirectoryWrapper : BaseDirectoryWrapper, IDisposable Constructors | Improve this Doc View Source MockDirectoryWrapper(Random, Directory) Declaration public MockDirectoryWrapper(Random random, Directory delegate) Parameters Type Name Description System.Random random Directory delegate Fields | Improve this Doc View Source m_lockFactory Declaration protected LockFactory m_lockFactory Field Value Type Description LockFactory Properties | Improve this Doc View Source AllowRandomFileNotFoundException If set to true (the default), when we throw random System.IO.IOException on OpenInput(String, IOContext) or CreateOutput(String, IOContext) , we may sometimes throw System.IO.FileNotFoundException . Declaration public virtual bool AllowRandomFileNotFoundException { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AllowReadingFilesStillOpenForWrite If set to true, you can open an inputstream on a file that is still open for writes. Declaration public virtual bool AllowReadingFilesStillOpenForWrite { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AssertNoDeleteOpenFile Trip a test assert if there is an attempt to delete an open file. Declaration public virtual bool AssertNoDeleteOpenFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AssertNoUnreferencedFilesOnClose Declaration public virtual bool AssertNoUnreferencedFilesOnClose { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FailOnCreateOutput Declaration public virtual bool FailOnCreateOutput { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FailOnOpenInput Declaration public virtual bool FailOnOpenInput { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source InputCloneCount Declaration public virtual int InputCloneCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides FilterDirectory.LockFactory | Improve this Doc View Source MaxSizeInBytes Declaration public virtual long MaxSizeInBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxUsedSizeInBytes Returns the peek actual storage used (bytes) in this directory. Declaration public virtual long MaxUsedSizeInBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NoDeleteOpenFile Emulate Windows whereby deleting an open file is not allowed (raise System.IO.IOException ). Declaration public virtual bool NoDeleteOpenFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source PreventDoubleWrite If set to true, we throw an System.IO.IOException if the same file is opened by CreateOutput(String, IOContext) , ever. Declaration public virtual bool PreventDoubleWrite { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source RandomIOExceptionRate If 0.0, no exceptions will be thrown. Else this should be a double 0.0 - 1.0. We will randomly throw an System.IO.IOException on the first write to a System.IO.Stream based on this probability. Declaration public virtual double RandomIOExceptionRate { get; set; } Property Value Type Description System.Double | Improve this Doc View Source RandomIOExceptionRateOnOpen If 0.0, no exceptions will be thrown during OpenInput(String, IOContext) and CreateOutput(String, IOContext) . Else this should be a double 0.0 - 1.0 and we will randomly throw an System.IO.IOException in OpenInput(String, IOContext) and CreateOutput(String, IOContext) with this probability. Declaration public virtual double RandomIOExceptionRateOnOpen { get; set; } Property Value Type Description System.Double | Improve this Doc View Source Throttling Declaration public virtual Throttling Throttling { get; set; } Property Value Type Description Throttling | Improve this Doc View Source TrackDiskUsage Declaration public virtual bool TrackDiskUsage { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source WrapLockFactory Set to false if you want to return the pure lockfactory and not wrap it with MockLockFactoryWrapper . Be careful if you turn this off: MockDirectoryWrapper might no longer be able to detect if you forget to close an IndexWriter , and spit out horribly scary confusing exceptions instead of simply telling you that. Declaration public virtual bool WrapLockFactory { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ClearCrash() Declaration public virtual void ClearCrash() | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides FilterDirectory.ClearLock(String) | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides BaseDirectoryWrapper.Copy(Directory, String, String, IOContext) | Improve this Doc View Source Crash() Simulates a crash of OS or machine by overwriting unsynced files. Declaration public virtual void Crash() | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides FilterDirectory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides BaseDirectoryWrapper.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides FilterDirectory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides BaseDirectoryWrapper.Dispose(Boolean) | Improve this Doc View Source FailOn(Failure) Add a Failure object to the list of objects to be evaluated at every potential failure point. Declaration public virtual void FailOn(Failure fail) Parameters Type Name Description Failure fail | Improve this Doc View Source FileExists(String) Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides FilterDirectory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides FilterDirectory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides FilterDirectory.GetLockID() | Improve this Doc View Source GetOpenDeletedFiles() Declaration public virtual ICollection<string> GetOpenDeletedFiles() Returns Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source GetRecomputedActualSizeInBytes() Like GetRecomputedSizeInBytes() , but, uses actual file lengths rather than buffer allocations (which are quantized up to nearest Lucene.Net.Store.RAMOutputStream.BUFFER_SIZE (now 1024) bytes. Declaration public long GetRecomputedActualSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source GetRecomputedSizeInBytes() Provided for testing purposes. Use GetSizeInBytes() instead. Declaration public long GetRecomputedSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source GetSizeInBytes() Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides FilterDirectory.ListAll() | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides FilterDirectory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides FilterDirectory.OpenInput(String, IOContext) | Improve this Doc View Source RemoveIndexInput(IndexInput, String) Declaration public virtual void RemoveIndexInput(IndexInput in, string name) Parameters Type Name Description IndexInput in System.String name | Improve this Doc View Source RemoveIndexOutput(IndexOutput, String) Declaration public virtual void RemoveIndexOutput(IndexOutput out, string name) Parameters Type Name Description IndexOutput out System.String name | Improve this Doc View Source ResetMaxUsedSizeInBytes() Declaration public virtual void ResetMaxUsedSizeInBytes() | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides FilterDirectory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides FilterDirectory.Sync(ICollection<String>) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexInputWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexInputWrapper.html",
    "title": "Class MockIndexInputWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockIndexInputWrapper Used by MockDirectoryWrapper to create an input stream that keeps track of when it's been disposed. Inheritance System.Object DataInput IndexInput MockIndexInputWrapper Implements System.IDisposable Inherited Members IndexInput.Dispose() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockIndexInputWrapper : IndexInput, IDisposable Constructors | Improve this Doc View Source MockIndexInputWrapper(MockDirectoryWrapper, String, IndexInput) Construct an empty output buffer. Declaration public MockIndexInputWrapper(MockDirectoryWrapper dir, string name, IndexInput delegate) Parameters Type Name Description MockDirectoryWrapper dir System.String name IndexInput delegate Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Declaration public override void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len System.Boolean useBuffer Overrides DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source ReadString() Declaration public override string ReadString() Returns Type Description System.String Overrides DataInput.ReadString() | Improve this Doc View Source ReadStringStringMap() Declaration public override IDictionary<string, string> ReadStringStringMap() Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String > Overrides DataInput.ReadStringStringMap() | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override int ReadVInt32() Returns Type Description System.Int32 Overrides DataInput.ReadVInt32() | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override long ReadVInt64() Returns Type Description System.Int64 Overrides DataInput.ReadVInt64() | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides IndexInput.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexOutputWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexOutputWrapper.html",
    "title": "Class MockIndexOutputWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockIndexOutputWrapper Used by MockDirectoryWrapper to create an output stream that will throw an System.IO.IOException on fake disk full, track max disk space actually used, and maybe throw random System.IO.IOException s. Inheritance System.Object DataOutput IndexOutput MockIndexOutputWrapper Implements System.IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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) Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockIndexOutputWrapper : IndexOutput, IDisposable Constructors | Improve this Doc View Source MockIndexOutputWrapper(MockDirectoryWrapper, IndexOutput, String) Construct an empty output buffer. Declaration public MockIndexOutputWrapper(MockDirectoryWrapper dir, IndexOutput delegate, string name) Parameters Type Name Description MockDirectoryWrapper dir IndexOutput delegate System.String name Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; set; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source CopyBytes(DataInput, Int64) Declaration public override void CopyBytes(DataInput input, long numBytes) Parameters Type Name Description DataInput input System.Int64 numBytes Overrides DataOutput.CopyBytes(DataInput, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source Seek(Int64) Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockLockFactoryWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockLockFactoryWrapper.html",
    "title": "Class MockLockFactoryWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MockLockFactoryWrapper Used by MockDirectoryWrapper to wrap another factory and track open locks. Inheritance System.Object LockFactory MockLockFactoryWrapper Inherited Members LockFactory.m_lockPrefix 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.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockLockFactoryWrapper : LockFactory Constructors | Improve this Doc View Source MockLockFactoryWrapper(MockDirectoryWrapper, LockFactory) Declaration public MockLockFactoryWrapper(MockDirectoryWrapper dir, LockFactory delegate) Parameters Type Name Description MockDirectoryWrapper dir LockFactory delegate Properties | Improve this Doc View Source LockPrefix Declaration public override string LockPrefix { get; set; } Property Value Type Description System.String Overrides LockFactory.LockPrefix Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.TestHelper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.TestHelper.html",
    "title": "Class TestHelper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TestHelper This class provides access to namespace-level features defined in the Store namespace. It is used for testing only. Inheritance System.Object TestHelper 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.Store Assembly : Lucene.Net.TestFramework.dll Syntax public static class TestHelper Methods | Improve this Doc View Source IsSimpleFSIndexInput(IndexInput) Returns true if the instance of the provided input stream is actually an . Declaration public static bool IsSimpleFSIndexInput(IndexInput is) Parameters Type Name Description IndexInput is Returns Type Description System.Boolean | Improve this Doc View Source IsSimpleFSIndexInputClone(IndexInput) Returns true if the provided input stream is an and is a clone, that is it does not own its underlying file descriptor. Declaration public static bool IsSimpleFSIndexInputClone(IndexInput is) Parameters Type Name Description IndexInput is Returns Type Description System.Boolean | Improve this Doc View Source IsSimpleFSIndexInputOpen(IndexInput) Given an instance of , this method returns true if the underlying file descriptor is valid, and false otherwise. this can be used to determine if the OS file has been closed. The descriptor becomes invalid when the non-clone instance of the that owns this descriptor is disposed. However, the descriptor may possibly become invalid in other ways as well. Declaration public static bool IsSimpleFSIndexInputOpen(IndexInput is) Parameters Type Name Description IndexInput is Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.Throttling.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.Throttling.html",
    "title": "Enum Throttling | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Throttling Enum for controlling hard disk throttling. Set via Throttling WARNING: can make tests very slow. Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public enum Throttling Fields Name Description ALWAYS always emulate a slow hard disk. could be very slow! NEVER never throttle output SOMETIMES sometimes (2% of the time) emulate a slow hard disk."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.CrankyTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.CrankyTokenFilter.html",
    "title": "Class CrankyTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CrankyTokenFilter Throws System.IO.IOException from random TokenStream methods. This can be used to simulate a buggy analyzer in IndexWriter , where we must delete the document but not abort everything in the buffer. Inheritance System.Object AttributeSource TokenStream TokenFilter CrankyTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.TestFramework.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CrankyTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CrankyTokenFilter(TokenStream, Random) Creates a new CrankyTokenFilter . Declaration public CrankyTokenFilter(TokenStream input, Random random) Parameters Type Name Description TokenStream input System.Random random Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenFilter.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.html",
    "title": "Namespace Lucene.Net.TestFramework.Analysis | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.TestFramework.Analysis Classes CrankyTokenFilter Throws System.IO.IOException from random TokenStream methods. This can be used to simulate a buggy analyzer in IndexWriter , where we must delete the document but not abort everything in the buffer."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.AbstractBeforeAfterRule.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.AbstractBeforeAfterRule.html",
    "title": "Class AbstractBeforeAfterRule | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractBeforeAfterRule LUCENENET specific for mimicking the JUnit rule functionality. We simplify things by just running the rules inside LuceneTestCase. Inheritance System.Object AbstractBeforeAfterRule 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class AbstractBeforeAfterRule Methods | Improve this Doc View Source After(LuceneTestCase) Declaration public virtual void After(LuceneTestCase testInstance) Parameters Type Name Description LuceneTestCase testInstance | Improve this Doc View Source Before(LuceneTestCase) Declaration public virtual void Before(LuceneTestCase testInstance) Parameters Type Name Description LuceneTestCase testInstance"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.ApiScanTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.ApiScanTestBase.html",
    "title": "Class ApiScanTestBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ApiScanTestBase LUCENENET specific - functionality for scanning the API to ensure naming and .NET conventions are followed consistently. Not for use by end users. Inheritance System.Object LuceneTestCase ApiScanTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ApiScanTestBase : LuceneTestCase Methods | Improve this Doc View Source TestClassNames(Type) Declaration public virtual void TestClassNames(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForMembersAcceptingOrReturningIEnumerable(Type) Declaration public virtual void TestForMembersAcceptingOrReturningIEnumerable(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForMembersAcceptingOrReturningIEnumerable(Type, String) Declaration public virtual void TestForMembersAcceptingOrReturningIEnumerable(Type typeFromTargetAssembly, string exceptionRegex) Parameters Type Name Description System.Type typeFromTargetAssembly System.String exceptionRegex | Improve this Doc View Source TestForMembersAcceptingOrReturningListOrDictionary(Type) Declaration public virtual void TestForMembersAcceptingOrReturningListOrDictionary(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForMembersAcceptingOrReturningListOrDictionary(Type, String) Declaration public virtual void TestForMembersAcceptingOrReturningListOrDictionary(Type typeFromTargetAssembly, string exceptionRegex) Parameters Type Name Description System.Type typeFromTargetAssembly System.String exceptionRegex | Improve this Doc View Source TestForMethodsThatReturnWritableArray(Type) Declaration public virtual void TestForMethodsThatReturnWritableArray(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForPropertiesThatReturnArray(Type) Declaration public virtual void TestForPropertiesThatReturnArray(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForPropertiesWithNoGetter(Type) Declaration public virtual void TestForPropertiesWithNoGetter(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersContainingComparer(Type) Declaration public virtual void TestForPublicMembersContainingComparer(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersContainingNonNetNumeric(Type) Declaration public virtual void TestForPublicMembersContainingNonNetNumeric(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersNamedSize(Type) Declaration public virtual void TestForPublicMembersNamedSize(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersWithNullableEnum(Type) Declaration public virtual void TestForPublicMembersWithNullableEnum(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestForTypesContainingNonNetNumeric(Type) Declaration public virtual void TestForTypesContainingNonNetNumeric(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestInterfaceNames(Type) Declaration public virtual void TestInterfaceNames(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestMethodParameterNames(Type) Declaration public virtual void TestMethodParameterNames(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestPrivateFieldNames(Type) Declaration public virtual void TestPrivateFieldNames(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestPrivateFieldNames(Type, String) Declaration public virtual void TestPrivateFieldNames(Type typeFromTargetAssembly, string exceptionRegex) Parameters Type Name Description System.Type typeFromTargetAssembly System.String exceptionRegex | Improve this Doc View Source TestProtectedFieldNames(Type) Declaration public virtual void TestProtectedFieldNames(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly | Improve this Doc View Source TestPublicFields(Type) Declaration public virtual void TestPublicFields(Type typeFromTargetAssembly) Parameters Type Name Description System.Type typeFromTargetAssembly"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.AutomatonTestUtil.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.AutomatonTestUtil.html",
    "title": "Class AutomatonTestUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AutomatonTestUtil Utilities for testing automata. Capable of generating random regular expressions, and automata, and also provides a number of very basic unoptimized implementations (*slow) for testing. Inheritance System.Object AutomatonTestUtil 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.Util.Automaton Assembly : Lucene.Net.TestFramework.dll Syntax public static class AutomatonTestUtil Methods | Improve this Doc View Source AssertNoDetachedStates(Automaton) Checks that an automaton has no detached states that are unreachable from the initial state. Declaration public static void AssertNoDetachedStates(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source DeterminizeSimple(Automaton) Simple, original brics implementation of Determinize() Declaration public static void DeterminizeSimple(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source DeterminizeSimple(Automaton, ISet<State>) Simple, original brics implementation of Determinize() Determinizes the given automaton using the given set of initial states. Declaration public static void DeterminizeSimple(Automaton a, ISet<State> initialset) Parameters Type Name Description Automaton a System.Collections.Generic.ISet < State > initialset | Improve this Doc View Source IsFiniteSlow(Automaton) Returns true if the language of this automaton is finite. WARNING: this method is slow, it will blow up if the automaton is large. this is only used to test the correctness of our faster implementation. Declaration public static bool IsFiniteSlow(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source MinimizeSimple(Automaton) Simple, original brics implementation of Brzozowski Minimize() Declaration public static void MinimizeSimple(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source RandomAutomaton(Random) Return a random NFA/DFA for testing. Declaration public static Automaton RandomAutomaton(Random random) Parameters Type Name Description System.Random random Returns Type Description Automaton | Improve this Doc View Source RandomRegexp(Random) Returns random string, including full unicode range. Declaration public static string RandomRegexp(Random r) Parameters Type Name Description System.Random r Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.html",
    "title": "Namespace Lucene.Net.Util.Automaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Automaton <!-- dk.brics.automaton Copyright (c) 2001-2009 Anders Moeller All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> Finite-state automaton for regular expressions. This package contains a full DFA/NFA implementation with Unicode alphabet and support for all standard (and a number of non-standard) regular expression operations. The most commonly used functionality is located in the classes Automaton and RegExp . For more information, go to the package home page at http://www.brics.dk/automaton/ . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Classes AutomatonTestUtil Utilities for testing automata. Capable of generating random regular expressions, and automata, and also provides a number of very basic unoptimized implementations (*slow) for testing. RandomAcceptedStrings Lets you retrieve random strings accepted by an Automaton . Once created, call GetRandomAcceptedString(Random) to get a new string (in UTF-32 codepoints)."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.RandomAcceptedStrings.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.RandomAcceptedStrings.html",
    "title": "Class RandomAcceptedStrings | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomAcceptedStrings Lets you retrieve random strings accepted by an Automaton . Once created, call GetRandomAcceptedString(Random) to get a new string (in UTF-32 codepoints). Inheritance System.Object RandomAcceptedStrings 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.Util.Automaton Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomAcceptedStrings Constructors | Improve this Doc View Source RandomAcceptedStrings(Automaton) Declaration public RandomAcceptedStrings(Automaton a) Parameters Type Name Description Automaton a Methods | Improve this Doc View Source GetRandomAcceptedString(Random) Declaration public int[] GetRandomAcceptedString(Random r) Parameters Type Name Description System.Random r Returns Type Description System.Int32 []"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.BaseDocIdSetTestCase-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.BaseDocIdSetTestCase-1.html",
    "title": "Class BaseDocIdSetTestCase<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseDocIdSetTestCase<T> Base test class for DocIdSet s. Inheritance System.Object LuceneTestCase BaseDocIdSetTestCase<T> Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseDocIdSetTestCase<T> : LuceneTestCase where T : DocIdSet Type Parameters Name Description T Methods | Improve this Doc View Source AssertEquals(Int32, BitArray, T) Assert that the content of the DocIdSet is the same as the content of the System.Collections.BitArray . Declaration public virtual void AssertEquals(int numBits, BitArray ds1, T ds2) Parameters Type Name Description System.Int32 numBits System.Collections.BitArray ds1 T ds2 | Improve this Doc View Source CopyOf(BitArray, Int32) Create a copy of the given System.Collections.BitArray which has length bits. Declaration public abstract T CopyOf(BitArray bs, int length) Parameters Type Name Description System.Collections.BitArray bs System.Int32 length Returns Type Description T | Improve this Doc View Source RandomSet(Int32, Int32) Create a random set which has numBitsSet of its numBits bits set. Declaration protected static BitArray RandomSet(int numBits, int numBitsSet) Parameters Type Name Description System.Int32 numBits System.Int32 numBitsSet Returns Type Description System.Collections.BitArray | Improve this Doc View Source RandomSet(Int32, Single) Same as RandomSet(Int32, Int32) but given a load factor. Declaration protected static BitArray RandomSet(int numBits, float percentSet) Parameters Type Name Description System.Int32 numBits System.Single percentSet Returns Type Description System.Collections.BitArray | Improve this Doc View Source Test1Bit() Test length=1. Declaration [Test] public virtual void Test1Bit() | Improve this Doc View Source Test2Bits() Test length=2. Declaration [Test] public virtual void Test2Bits() | Improve this Doc View Source TestAgainstBitSet() Compare the content of the set against a System.Collections.BitArray . Declaration [Test] public virtual void TestAgainstBitSet() | Improve this Doc View Source TestNoBit() Test length=0. Declaration [Test] public virtual void TestNoBit()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.CultureInfoSupport.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.CultureInfoSupport.html",
    "title": "Class CultureInfoSupport | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CultureInfoSupport Inheritance System.Object CultureInfoSupport 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class CultureInfoSupport Methods | Improve this Doc View Source GetNeutralAndSpecificCultures() Declaration public static CultureInfo[] GetNeutralAndSpecificCultures() Returns Type Description System.Globalization.CultureInfo []"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.English.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.English.html",
    "title": "Class English | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class English Converts numbers to english strings for testing. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object English 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class English Methods | Improve this Doc View Source Int32ToEnglish(Int32) Declaration public static string Int32ToEnglish(int i) Parameters Type Name Description System.Int32 i Returns Type Description System.String | Improve this Doc View Source Int32ToEnglish(Int32, StringBuilder) Declaration public static void Int32ToEnglish(int i, StringBuilder result) Parameters Type Name Description System.Int32 i System.Text.StringBuilder result | Improve this Doc View Source Int64ToEnglish(Int64) Declaration public static string Int64ToEnglish(long i) Parameters Type Name Description System.Int64 i Returns Type Description System.String | Improve this Doc View Source Int64ToEnglish(Int64, StringBuilder) Declaration public static void Int64ToEnglish(long i, StringBuilder result) Parameters Type Name Description System.Int64 i System.Text.StringBuilder result | Improve this Doc View Source ToEnglish(Int32) Declaration public static string ToEnglish(this int i) Parameters Type Name Description System.Int32 i Returns Type Description System.String | Improve this Doc View Source ToEnglish(Int32, StringBuilder) Declaration public static void ToEnglish(this int i, StringBuilder result) Parameters Type Name Description System.Int32 i System.Text.StringBuilder result | Improve this Doc View Source ToEnglish(Int64) Declaration public static string ToEnglish(this long i) Parameters Type Name Description System.Int64 i Returns Type Description System.String | Improve this Doc View Source ToEnglish(Int64, StringBuilder) Declaration public static void ToEnglish(this long i, StringBuilder result) Parameters Type Name Description System.Int64 i System.Text.StringBuilder result"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.ExceptionSerializationTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.ExceptionSerializationTestBase.html",
    "title": "Class ExceptionSerializationTestBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExceptionSerializationTestBase Inheritance System.Object LuceneTestCase ExceptionSerializationTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ExceptionSerializationTestBase : LuceneTestCase Methods | Improve this Doc View Source TryInstantiate(Type) Declaration protected static object TryInstantiate(Type type) Parameters Type Name Description System.Type type Returns Type Description System.Object | Improve this Doc View Source TypeCanSerialize<T>(T) Declaration protected static bool TypeCanSerialize<T>(T exception) Parameters Type Name Description T exception Returns Type Description System.Boolean Type Parameters Name Description T"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.FailOnNonBulkMergesInfoStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.FailOnNonBulkMergesInfoStream.html",
    "title": "Class FailOnNonBulkMergesInfoStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FailOnNonBulkMergesInfoStream Hackidy-Häck-Hack to cause a test to fail on non-bulk merges Inheritance System.Object InfoStream FailOnNonBulkMergesInfoStream Implements System.IDisposable Inherited Members InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class FailOnNonBulkMergesInfoStream : InfoStream, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides InfoStream.Dispose(Boolean) | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean Overrides InfoStream.IsEnabled(String) | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message Overrides InfoStream.Message(String, String) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.FSTTester-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.FSTTester-1.html",
    "title": "Class FSTTester<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTTester<T> Helper class to test FSTs. Inheritance System.Object FSTTester<T> 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.Util.Fst Assembly : Lucene.Net.TestFramework.dll Syntax public class FSTTester<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FSTTester(Random, Directory, Int32, IList<InputOutput<T>>, Outputs<T>, Boolean) Declaration public FSTTester(Random random, Directory dir, int inputMode, IList<InputOutput<T>> pairs, Outputs<T> outputs, bool doReverseLookup) Parameters Type Name Description System.Random random Directory dir System.Int32 inputMode System.Collections.Generic.IList < InputOutput <T>> pairs Outputs <T> outputs System.Boolean doReverseLookup Methods | Improve this Doc View Source DoTest(Boolean) Declaration public virtual void DoTest(bool testPruning) Parameters Type Name Description System.Boolean testPruning | Improve this Doc View Source OutputsEqual(T, T) Declaration protected virtual bool OutputsEqual(T a, T b) Parameters Type Name Description T a T b Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.html",
    "title": "Namespace Lucene.Net.Util.Fst | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Fst <!-- 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. --> Misc FST classes. Classes FSTTester<T> Helper class to test FSTs. InputOutput<T> Holds one input/output pair."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.InputOutput-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.InputOutput-1.html",
    "title": "Class InputOutput<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InputOutput<T> Holds one input/output pair. Inheritance System.Object InputOutput<T> Implements System.IComparable < InputOutput <T>> 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.Util.Fst Assembly : Lucene.Net.TestFramework.dll Syntax public class InputOutput<T> : IComparable<InputOutput<T>> Type Parameters Name Description T Constructors | Improve this Doc View Source InputOutput(Int32sRef, T) Declaration public InputOutput(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; } Property Value Type Description T Methods | Improve this Doc View Source CompareTo(InputOutput<T>) Declaration public virtual int CompareTo(InputOutput<T> other) Parameters Type Name Description InputOutput <T> other Returns Type Description System.Int32 Implements System.IComparable<T>"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.html",
    "title": "Namespace Lucene.Net.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util <!-- 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. --> Some utility classes. Classes AbstractBeforeAfterRule LUCENENET specific for mimicking the JUnit rule functionality. We simplify things by just running the rules inside LuceneTestCase. ApiScanTestBase LUCENENET specific - functionality for scanning the API to ensure naming and .NET conventions are followed consistently. Not for use by end users. BaseDocIdSetTestCase<T> Base test class for DocIdSet s. CultureInfoSupport English Converts numbers to english strings for testing. This is a Lucene.NET INTERNAL API, use at your own risk ExceptionSerializationTestBase FailOnNonBulkMergesInfoStream Hackidy-Häck-Hack to cause a test to fail on non-bulk merges LineFileDocs Minimal port of benchmark's LneDocSource + DocMaker, so tests can enum docs from a line file created by benchmark's WriteLineDoc task LuceneTestCase LUCENENET specific extensions to LuceneTestCase to make it easier to port tests from Java with fewer changes. LuceneTestCase.ConcurrentMergeSchedulerFactories Contains a list of all the Func<IConcurrentMergeSchedulers> to be tested. Delegate method allows them to be created on their target thread instead of the test thread and also ensures a separate instance is created in each case (which can affect the result of the test). LUCENENET specific for injection into tests (i.e. using NUnit.Framework.ValueSourceAttribute) LuceneTestCase.SuppressCodecsAttribute Annotation for test classes that should avoid certain codec types (because they are expensive, for example). LuceneTestCase.SuppressTempFileChecksAttribute Marks any suites which are known not to close all the temporary files. This may prevent temp files and folders from being cleaned up after the suite is completed. NullInfoStream Prints nothing. Just to make sure tests pass w/ and without enabled InfoStream without actually making noise. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StackTraceHelper LUCENENET specific class to normalize stack trace behavior between different .NET Framework and .NET Standard 1.x, which did not support the StackTrace class. TestUtil General utility methods for Lucene unit tests. ThrottledIndexOutput Intentionally slow IndexOutput for testing. TimeUnits Time unit constants for use in annotations."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LineFileDocs.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LineFileDocs.html",
    "title": "Class LineFileDocs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LineFileDocs Minimal port of benchmark's LneDocSource + DocMaker, so tests can enum docs from a line file created by benchmark's WriteLineDoc task Inheritance System.Object LineFileDocs 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class LineFileDocs : IDisposable Constructors | Improve this Doc View Source LineFileDocs(Random) Declaration public LineFileDocs(Random random) Parameters Type Name Description System.Random random | Improve this Doc View Source LineFileDocs(Random, Boolean) Declaration public LineFileDocs(Random random, bool useDocValues) Parameters Type Name Description System.Random random System.Boolean useDocValues | Improve this Doc View Source LineFileDocs(Random, String, Boolean) If forever is true, we rewind the file at EOF (repeat the docs over and over) Declaration public LineFileDocs(Random random, string path, bool useDocValues) Parameters Type Name Description System.Random random System.String path System.Boolean useDocValues Methods | 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 NextDoc() Note: Document instance is re-used per-thread Declaration public virtual Document NextDoc() Returns Type Description Document | Improve this Doc View Source Reset(Random) Declaration public virtual void Reset(Random random) Parameters Type Name Description System.Random random Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.ConcurrentMergeSchedulerFactories.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.ConcurrentMergeSchedulerFactories.html",
    "title": "Class LuceneTestCase.ConcurrentMergeSchedulerFactories | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LuceneTestCase.ConcurrentMergeSchedulerFactories Contains a list of all the Func<IConcurrentMergeSchedulers> to be tested. Delegate method allows them to be created on their target thread instead of the test thread and also ensures a separate instance is created in each case (which can affect the result of the test). LUCENENET specific for injection into tests (i.e. using NUnit.Framework.ValueSourceAttribute) Inheritance System.Object LuceneTestCase.ConcurrentMergeSchedulerFactories 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class ConcurrentMergeSchedulerFactories Fields | Improve this Doc View Source Values Declaration public static readonly Func<IConcurrentMergeScheduler>[] Values Field Value Type Description System.Func < IConcurrentMergeScheduler >[]"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.html",
    "title": "Class LuceneTestCase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LuceneTestCase LUCENENET specific extensions to LuceneTestCase to make it easier to port tests from Java with fewer changes. Inheritance System.Object LuceneTestCase BaseTokenStreamTestCase CollationTestBase BaseIndexFileFormatTestCase BaseMergePolicyTestCase ThreadedIndexingAndSearchingTestCase SearchEquivalenceTestBase ShardSearchingTestBase BaseDirectoryTestCase ApiScanTestBase BaseDocIdSetTestCase<T> ExceptionSerializationTestBase 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax [TestFixture] public abstract class LuceneTestCase Fields | Improve this Doc View Source DEFAULT_LINE_DOCS_FILE TODO: javadoc? Declaration public static readonly string DEFAULT_LINE_DOCS_FILE Field Value Type Description System.String | Improve this Doc View Source INFOSTREAM TODO: javadoc? Declaration public static readonly bool INFOSTREAM Field Value Type Description System.Boolean | Improve this Doc View Source JENKINS_LARGE_LINE_DOCS_FILE TODO: javadoc? Declaration public static readonly string JENKINS_LARGE_LINE_DOCS_FILE Field Value Type Description System.String | Improve this Doc View Source LEAVE_TEMPORARY Leave temporary files on disk, even on successful runs. Declaration public static readonly bool LEAVE_TEMPORARY Field Value Type Description System.Boolean | Improve this Doc View Source RANDOM_MULTIPLIER A random multiplier which you should use when writing random tests: multiply it by the number of iterations to scale your tests (for nightly builds). Declaration public static readonly int RANDOM_MULTIPLIER Field Value Type Description System.Int32 | Improve this Doc View Source SuiteFailureMarker Suite failure marker (any error in the test or suite scope). Declaration public static readonly bool SuiteFailureMarker Field Value Type Description System.Boolean | Improve this Doc View Source TEST_CODEC Gets the codec to run tests with. Declaration public static readonly string TEST_CODEC Field Value Type Description System.String | Improve this Doc View Source TEST_DIRECTORY Gets the directory to run tests with Declaration public static readonly string TEST_DIRECTORY Field Value Type Description System.String | Improve this Doc View Source TEST_DOCVALUESFORMAT Gets the docValuesFormat to run tests with Declaration public static readonly string TEST_DOCVALUESFORMAT Field Value Type Description System.String | Improve this Doc View Source TEST_LINE_DOCS_FILE The line file used by LineFileDocs Declaration public static readonly string TEST_LINE_DOCS_FILE Field Value Type Description System.String | Improve this Doc View Source TEST_POSTINGSFORMAT Gets the postingsFormat to run tests with. Declaration public static readonly string TEST_POSTINGSFORMAT Field Value Type Description System.String | Improve this Doc View Source TEST_VERSION_CURRENT Use this constant when creating Analyzers and any other version-dependent stuff. NOTE: Change this when development starts for new Lucene version: Declaration public static readonly LuceneVersion TEST_VERSION_CURRENT Field Value Type Description LuceneVersion | Improve this Doc View Source VERBOSE True if and only if tests are run in verbose mode. If this flag is false tests are not expected to print any messages. Declaration public static readonly bool VERBOSE Field Value Type Description System.Boolean Properties | Improve this Doc View Source CodecFactory Declaration public static ICodecFactory CodecFactory { get; set; } Property Value Type Description ICodecFactory | Improve this Doc View Source DefaultCodecSupportsDocsWithField Returns true if the codec \"supports\" docsWithField (other codecs return MatchAllBits, because you couldnt write missing values before) Declaration public static bool DefaultCodecSupportsDocsWithField { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsDocValues Declaration public static bool DefaultCodecSupportsDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsFieldUpdates Returns true if the codec \"supports\" field updates. Declaration public static bool DefaultCodecSupportsFieldUpdates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsMissingDocValues Returns true if the default codec supports single valued docvalues with missing values Declaration public static bool DefaultCodecSupportsMissingDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsSortedSet Returns true if the default codec supports SORTED_SET docvalues Declaration public static bool DefaultCodecSupportsSortedSet { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DocValuesFormatFactory Declaration public static IDocValuesFormatFactory DocValuesFormatFactory { get; set; } Property Value Type Description IDocValuesFormatFactory | Improve this Doc View Source DoesntSupportOffsets Declaration protected static ICollection<string> DoesntSupportOffsets { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source OldFormatImpersonationIsActive When true , Codecs for old Lucene version will support writing indexes in that format. Defaults to false , can be disabled by specific tests on demand. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static bool OldFormatImpersonationIsActive { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source PostingsFormatFactory Declaration public static IPostingsFormatFactory PostingsFormatFactory { get; set; } Property Value Type Description IPostingsFormatFactory | Improve this Doc View Source Random Access to the current System.Random instance. It is safe to use this method from multiple threads, etc., but it should be called while within a runner's scope (so no static initializers). The returned System.Random instance will be different when this method is called inside a BeforeClass() hook (static suite scope) and within NUnit.Framework.SetUpAttribute / NUnit.Framework.TearDownAttribute hooks or test methods. The returned instance must not be shared with other threads or cross a single scope's boundary. For example, a System.Random acquired within a test method shouldn't be reused for another test case. There is an overhead connected with getting the System.Random for a particular context and thread. It is better to cache the System.Random locally if tight loops with multiple invocations are present or create a derivative local System.Random for millions of calls like this: Random random = new Random(Random.Next()); // tight loop with many invocations. Declaration public static Random Random { get; } Property Value Type Description System.Random | Improve this Doc View Source TestName Return the name of the currently executing test case. Declaration public virtual string TestName { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AfterClass() Tears down random defaults and cleans up temporary files. If you override this method, be sure to call base.AfterClass() AFTER tearing down your test fixture. Declaration [OneTimeTearDown] public virtual void AfterClass() | Improve this Doc View Source AssertDeletedDocsEquals(String, IndexReader, IndexReader) Declaration public virtual void AssertDeletedDocsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) Checks docs + freqs + positions + payloads, sequentially. Declaration public virtual void AssertDocsAndPositionsEnumEquals(string info, DocsAndPositionsEnum leftDocs, DocsAndPositionsEnum rightDocs) Parameters Type Name Description System.String info DocsAndPositionsEnum leftDocs DocsAndPositionsEnum rightDocs | Improve this Doc View Source AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) Checks docs + freqs, sequentially. Declaration public virtual void AssertDocsEnumEquals(string info, DocsEnum leftDocs, DocsEnum rightDocs, bool hasFreqs) Parameters Type Name Description System.String info DocsEnum leftDocs DocsEnum rightDocs System.Boolean hasFreqs | Improve this Doc View Source AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) Checks advancing docs. Declaration public virtual void AssertDocsSkippingEquals(string info, IndexReader leftReader, int docFreq, DocsEnum leftDocs, DocsEnum rightDocs, bool hasFreqs) Parameters Type Name Description System.String info IndexReader leftReader System.Int32 docFreq DocsEnum leftDocs DocsEnum rightDocs System.Boolean hasFreqs | Improve this Doc View Source AssertDocValuesEquals(String, IndexReader, IndexReader) Checks that docvalues across all fields are equivalent. Declaration public virtual void AssertDocValuesEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) Declaration public virtual void AssertDocValuesEquals(string info, int num, NumericDocValues leftDocValues, NumericDocValues rightDocValues) Parameters Type Name Description System.String info System.Int32 num NumericDocValues leftDocValues NumericDocValues rightDocValues | Improve this Doc View Source AssertFieldInfosEquals(String, IndexReader, IndexReader) Declaration public virtual void AssertFieldInfosEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) Fields API equivalency. Declaration public virtual void AssertFieldsEquals(string info, IndexReader leftReader, Fields leftFields, Fields rightFields, bool deep) Parameters Type Name Description System.String info IndexReader leftReader Fields leftFields Fields rightFields System.Boolean deep | Improve this Doc View Source AssertFieldStatisticsEquals(String, Fields, Fields) Checks that top-level statistics on Fields are the same. Declaration public virtual void AssertFieldStatisticsEquals(string info, Fields leftFields, Fields rightFields) Parameters Type Name Description System.String info Fields leftFields Fields rightFields | Improve this Doc View Source AssertNormsEquals(String, IndexReader, IndexReader) Checks that norms are the same across all fields. Declaration public virtual void AssertNormsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) Checks advancing docs + positions. Declaration public virtual void AssertPositionsSkippingEquals(string info, IndexReader leftReader, int docFreq, DocsAndPositionsEnum leftDocs, DocsAndPositionsEnum rightDocs) Parameters Type Name Description System.String info IndexReader leftReader System.Int32 docFreq DocsAndPositionsEnum leftDocs DocsAndPositionsEnum rightDocs | Improve this Doc View Source AssertReaderEquals(String, IndexReader, IndexReader) Declaration public virtual void AssertReaderEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertReaderStatisticsEquals(String, IndexReader, IndexReader) Checks that reader-level statistics are the same. Declaration public virtual void AssertReaderStatisticsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertSaneFieldCaches(String) Asserts that FieldCacheSanityChecker does not detect any problems with DEFAULT . If any problems are found, they are logged to Error (allong with the msg) when the Assertion is thrown. This method is called by TearDown() after every test method, however IndexReader s scoped inside test methods may be garbage collected prior to this method being called, causing errors to be overlooked. Tests are encouraged to keep their IndexReader s scoped at the class level, or to explicitly call this method directly in the same scope as the IndexReader . Declaration protected static void AssertSaneFieldCaches(string msg) Parameters Type Name Description System.String msg See Also FieldCacheSanityChecker | Improve this Doc View Source AssertStoredFieldEquals(String, IIndexableField, IIndexableField) Checks that two stored fields are equivalent. Declaration public virtual void AssertStoredFieldEquals(string info, IIndexableField leftField, IIndexableField rightField) Parameters Type Name Description System.String info IIndexableField leftField IIndexableField rightField | Improve this Doc View Source AssertStoredFieldsEquals(String, IndexReader, IndexReader) Checks that stored fields of all documents are the same. Declaration public virtual void AssertStoredFieldsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) Checks the terms enum sequentially. If deep is false, it does a 'shallow' test that doesnt go down to the docsenums. Declaration public virtual void AssertTermsEnumEquals(string info, IndexReader leftReader, TermsEnum leftTermsEnum, TermsEnum rightTermsEnum, bool deep) Parameters Type Name Description System.String info IndexReader leftReader TermsEnum leftTermsEnum TermsEnum rightTermsEnum System.Boolean deep | Improve this Doc View Source AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) Terms API equivalency. Declaration public virtual void AssertTermsEquals(string info, IndexReader leftReader, Terms leftTerms, Terms rightTerms, bool deep) Parameters Type Name Description System.String info IndexReader leftReader Terms leftTerms Terms rightTerms System.Boolean deep | Improve this Doc View Source AssertTermsStatisticsEquals(String, Terms, Terms) Checks collection-level statistics on Terms . Declaration public virtual void AssertTermsStatisticsEquals(string info, Terms leftTerms, Terms rightTerms) Parameters Type Name Description System.String info Terms leftTerms Terms rightTerms | Improve this Doc View Source AssertTermStatsEquals(String, TermsEnum, TermsEnum) Checks term-level statistics. Declaration public virtual void AssertTermStatsEquals(string info, TermsEnum leftTermsEnum, TermsEnum rightTermsEnum) Parameters Type Name Description System.String info TermsEnum leftTermsEnum TermsEnum rightTermsEnum | Improve this Doc View Source AssertTermVectorsEquals(String, IndexReader, IndexReader) Checks that term vectors across all fields are equivalent. Declaration public virtual void AssertTermVectorsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AsSet(Object[]) Return args as a System.Collections.Generic.ISet<T> instance. The order of elements is not preserved in enumerators. Declaration public static ISet<object> AsSet(params object[] args) Parameters Type Name Description System.Object [] args Returns Type Description System.Collections.Generic.ISet < System.Object > | Improve this Doc View Source AssumeFalse(String, Boolean) Declaration public static void AssumeFalse(string msg, bool condition) Parameters Type Name Description System.String msg System.Boolean condition | Improve this Doc View Source AssumeNoException(String, Exception) Declaration public static void AssumeNoException(string msg, Exception e) Parameters Type Name Description System.String msg System.Exception e | Improve this Doc View Source AssumeTrue(String, Boolean) Declaration public static void AssumeTrue(string msg, bool condition) Parameters Type Name Description System.String msg System.Boolean condition | Improve this Doc View Source AtLeast(Int32) Declaration public static int AtLeast(int i) Parameters Type Name Description System.Int32 i Returns Type Description System.Int32 | Improve this Doc View Source AtLeast(Random, Int32) Returns a number of at least i The actual number returned will be influenced by whether Lucene.Net.Util.LuceneTestCase.TEST_NIGHTLY is active and RANDOM_MULTIPLIER , but also with some random fudge. Declaration public static int AtLeast(Random random, int i) Parameters Type Name Description System.Random random System.Int32 i Returns Type Description System.Int32 | Improve this Doc View Source BeforeClass() Sets up dependency injection of codec factories for running the test class, and also picks random defaults for culture, time zone, similarity, and default codec. If you override this method, be sure to call base.BeforeClass() BEFORE setting up your test fixture. Declaration [OneTimeSetUp] public virtual void BeforeClass() | Improve this Doc View Source CreateTempDir() Creates an empty, temporary folder (when the name of the folder is of no importance). Declaration public static DirectoryInfo CreateTempDir() Returns Type Description System.IO.DirectoryInfo See Also CreateTempDir(String) | Improve this Doc View Source CreateTempDir(String) Creates an empty, temporary folder with the given name prefix under the system's System.IO.Path.GetTempPath . The folder will be automatically removed after the test class completes successfully. The test should close any file handles that would prevent the folder from being removed. Declaration public static DirectoryInfo CreateTempDir(string prefix) Parameters Type Name Description System.String prefix Returns Type Description System.IO.DirectoryInfo | Improve this Doc View Source CreateTempFile() Creates an empty temporary file. Declaration public static FileInfo CreateTempFile() Returns Type Description System.IO.FileInfo See Also CreateTempFile(String, String) | Improve this Doc View Source CreateTempFile(String, String) Creates an empty file with the given prefix and suffix under the system's System.IO.Path.GetTempPath . The file will be automatically removed after the test class completes successfully. The test should close any file handles that would prevent the folder from being removed. Declaration public static FileInfo CreateTempFile(string prefix, string suffix) Parameters Type Name Description System.String prefix System.String suffix Returns Type Description System.IO.FileInfo | Improve this Doc View Source CultureForName(String) return a System.Globalization.CultureInfo object equivalent to its programmatic name. Declaration public static CultureInfo CultureForName(string localeName) Parameters Type Name Description System.String localeName Returns Type Description System.Globalization.CultureInfo | Improve this Doc View Source DumpArray(String, Object[], TextWriter) Convenience method for logging an array. Wraps the array in an enumerator and delegates to DumpEnumerator(String, IEnumerator, TextWriter) Declaration public static void DumpArray(string label, object[] objs, TextWriter stream) Parameters Type Name Description System.String label System.Object [] objs System.IO.TextWriter stream See Also DumpEnumerator(String, IEnumerator, TextWriter) | Improve this Doc View Source DumpEnumerator(String, IEnumerator, TextWriter) Convenience method for logging an enumerator. Declaration public static void DumpEnumerator(string label, IEnumerator iter, TextWriter stream) Parameters Type Name Description System.String label String logged before/after the items in the enumerator. System.Collections.IEnumerator iter Each element is ToString()ed and logged on it's own line. If iter is null this is logged differnetly then an empty enumerator. System.IO.TextWriter stream Stream to log messages to. | Improve this Doc View Source GetDataFile(String) Gets a resource from the classpath as System.IO.Stream . This method should only be used, if a real file is needed. To get a stream, code should prefer J2N.AssemblyExtensions.FindAndGetManifestResourceStream(System.Reflection.Assembly,System.Type,System.String) using this.GetType().Assembly and this.GetType() . Declaration protected virtual Stream GetDataFile(string name) Parameters Type Name Description System.String name Returns Type Description System.IO.Stream | Improve this Doc View Source GetFullMethodName(String) Declaration protected string GetFullMethodName(string memberName = \"\") Parameters Type Name Description System.String memberName Returns Type Description System.String | Improve this Doc View Source GetOnlySegmentReader(DirectoryReader) Some tests expect the directory to contain a single segment, and want to do tests on that segment's reader. This is an utility method to help them. Declaration public static SegmentReader GetOnlySegmentReader(DirectoryReader reader) Parameters Type Name Description DirectoryReader reader Returns Type Description SegmentReader | Improve this Doc View Source GetTestClass() Return the current type being tested. Declaration public static Type GetTestClass() Returns Type Description System.Type | Improve this Doc View Source MaybeWrapReader(IndexReader) Sometimes wrap the IndexReader as slow, parallel or filter reader (or combinations of that) Declaration public static IndexReader MaybeWrapReader(IndexReader r) Parameters Type Name Description IndexReader r Returns Type Description IndexReader | Improve this Doc View Source NewAlcoholicMergePolicy() Declaration public static AlcoholicMergePolicy NewAlcoholicMergePolicy() Returns Type Description AlcoholicMergePolicy | Improve this Doc View Source NewAlcoholicMergePolicy(Random, TimeZoneInfo) Declaration public static AlcoholicMergePolicy NewAlcoholicMergePolicy(Random random, TimeZoneInfo timeZone) Parameters Type Name Description System.Random random System.TimeZoneInfo timeZone Returns Type Description AlcoholicMergePolicy | Improve this Doc View Source NewDirectory() Returns a new Directory instance. Use this when the test does not care about the specific Directory implementation (most tests). The Directory is wrapped with BaseDirectoryWrapper . This means usually it will be picky, such as ensuring that you properly dispose it and close all open files in your test. It will emulate some features of Windows, such as not allowing open files to be overwritten. Declaration public static BaseDirectoryWrapper NewDirectory() Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewDirectory(Directory) Returns a new Directory instance, with contents copied from the provided directory. See NewDirectory() for more information. Declaration public static BaseDirectoryWrapper NewDirectory(Directory d) Parameters Type Name Description Directory d Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewDirectory(Random) Returns a new Directory instance, using the specified random . See NewDirectory() for more information. Declaration public static BaseDirectoryWrapper NewDirectory(Random random) Parameters Type Name Description System.Random random Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewDirectory(Random, Directory) Returns a new Directory instance, using the specified random with contents copied from the provided directory . See NewDirectory() for more information. Declaration public static BaseDirectoryWrapper NewDirectory(Random random, Directory directory) Parameters Type Name Description System.Random random Directory directory Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewField(Random, String, String, FieldType) Declaration public static Field NewField(Random random, string name, string value, FieldType type) Parameters Type Name Description System.Random random System.String name System.String value FieldType type Returns Type Description Field | Improve this Doc View Source NewField(String, String, FieldType) Declaration public static Field NewField(string name, string value, FieldType type) Parameters Type Name Description System.String name System.String value FieldType type Returns Type Description Field | Improve this Doc View Source NewFSDirectory(DirectoryInfo) Returns a new FSDirectory instance over the given file, which must be a folder. Declaration public static BaseDirectoryWrapper NewFSDirectory(DirectoryInfo d) Parameters Type Name Description System.IO.DirectoryInfo d Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewFSDirectory(DirectoryInfo, LockFactory) Returns a new FSDirectory instance over the given file, which must be a folder. Declaration public static BaseDirectoryWrapper NewFSDirectory(DirectoryInfo d, LockFactory lf) Parameters Type Name Description System.IO.DirectoryInfo d LockFactory lf Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewIndexWriterConfig(LuceneVersion, Analyzer) Create a new IndexWriterConfig with random defaults. Declaration public static IndexWriterConfig NewIndexWriterConfig(LuceneVersion v, Analyzer a) Parameters Type Name Description LuceneVersion v Analyzer a Returns Type Description IndexWriterConfig | Improve this Doc View Source NewIndexWriterConfig(Random, LuceneVersion, Analyzer) Create a new IndexWriterConfig with random defaults using the specified random . Declaration public static IndexWriterConfig NewIndexWriterConfig(Random random, LuceneVersion v, Analyzer a) Parameters Type Name Description System.Random random A random instance (usually Random ). LuceneVersion v Analyzer a Returns Type Description IndexWriterConfig | Improve this Doc View Source NewIOContext(Random) TODO: javadoc Declaration public static IOContext NewIOContext(Random random) Parameters Type Name Description System.Random random Returns Type Description IOContext | Improve this Doc View Source NewIOContext(Random, IOContext) TODO: javadoc Declaration public static IOContext NewIOContext(Random random, IOContext oldContext) Parameters Type Name Description System.Random random IOContext oldContext Returns Type Description IOContext | Improve this Doc View Source NewLogMergePolicy() Declaration public static LogMergePolicy NewLogMergePolicy() Returns Type Description LogMergePolicy | Improve this Doc View Source NewLogMergePolicy(Boolean) Declaration public static MergePolicy NewLogMergePolicy(bool useCFS) Parameters Type Name Description System.Boolean useCFS Returns Type Description MergePolicy | Improve this Doc View Source NewLogMergePolicy(Boolean, Int32) Declaration public static MergePolicy NewLogMergePolicy(bool useCFS, int mergeFactor) Parameters Type Name Description System.Boolean useCFS System.Int32 mergeFactor Returns Type Description MergePolicy | Improve this Doc View Source NewLogMergePolicy(Int32) Declaration public static MergePolicy NewLogMergePolicy(int mergeFactor) Parameters Type Name Description System.Int32 mergeFactor Returns Type Description MergePolicy | Improve this Doc View Source NewLogMergePolicy(Random) Declaration public static LogMergePolicy NewLogMergePolicy(Random random) Parameters Type Name Description System.Random random Returns Type Description LogMergePolicy | Improve this Doc View Source NewMergePolicy() Declaration public static MergePolicy NewMergePolicy() Returns Type Description MergePolicy | Improve this Doc View Source NewMergePolicy(Random) Declaration public static MergePolicy NewMergePolicy(Random r) Parameters Type Name Description System.Random r Returns Type Description MergePolicy | Improve this Doc View Source NewMockDirectory() Declaration public static MockDirectoryWrapper NewMockDirectory() Returns Type Description MockDirectoryWrapper | Improve this Doc View Source NewMockDirectory(Random) Declaration public static MockDirectoryWrapper NewMockDirectory(Random random) Parameters Type Name Description System.Random random Returns Type Description MockDirectoryWrapper | Improve this Doc View Source NewMockFSDirectory(DirectoryInfo) Declaration public static MockDirectoryWrapper NewMockFSDirectory(DirectoryInfo d) Parameters Type Name Description System.IO.DirectoryInfo d Returns Type Description MockDirectoryWrapper | Improve this Doc View Source NewSearcher(IndexReader) Create a new searcher over the reader. this searcher might randomly use threads. Declaration public static IndexSearcher NewSearcher(IndexReader r) Parameters Type Name Description IndexReader r Returns Type Description IndexSearcher | Improve this Doc View Source NewSearcher(IndexReader, Boolean) Create a new searcher over the reader. This searcher might randomly use threads. Declaration public static IndexSearcher NewSearcher(IndexReader r, bool maybeWrap) Parameters Type Name Description IndexReader r System.Boolean maybeWrap Returns Type Description IndexSearcher | Improve this Doc View Source NewSearcher(IndexReader, Boolean, Boolean) Create a new searcher over the reader. This searcher might randomly use threads. If maybeWrap is true, this searcher might wrap the reader with one that returns null for GetSequentialSubReaders() . If wrapWithAssertions is true, this searcher might be an AssertingIndexSearcher instance. Declaration public static IndexSearcher NewSearcher(IndexReader r, bool maybeWrap, bool wrapWithAssertions) Parameters Type Name Description IndexReader r System.Boolean maybeWrap System.Boolean wrapWithAssertions Returns Type Description IndexSearcher | Improve this Doc View Source NewStringField(Random, String, String, Field.Store) Declaration public static Field NewStringField(Random random, string name, string value, Field.Store stored) Parameters Type Name Description System.Random random System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewStringField(String, String, Field.Store) Declaration public static Field NewStringField(string name, string value, Field.Store stored) Parameters Type Name Description System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewTextField(Random, String, String, Field.Store) Declaration public static Field NewTextField(Random random, string name, string value, Field.Store stored) Parameters Type Name Description System.Random random System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewTextField(String, String, Field.Store) Declaration public static Field NewTextField(string name, string value, Field.Store stored) Parameters Type Name Description System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewTieredMergePolicy() Declaration public static TieredMergePolicy NewTieredMergePolicy() Returns Type Description TieredMergePolicy | Improve this Doc View Source NewTieredMergePolicy(Random) Declaration public static TieredMergePolicy NewTieredMergePolicy(Random random) Parameters Type Name Description System.Random random Returns Type Description TieredMergePolicy | Improve this Doc View Source RandomCulture(Random) Return a random System.Globalization.CultureInfo from the available cultures on the system. See https://issues.apache.org/jira/browse/LUCENE-4020 . Declaration public static CultureInfo RandomCulture(Random random) Parameters Type Name Description System.Random random Returns Type Description System.Globalization.CultureInfo | Improve this Doc View Source RandomGaussian() Returns the next pseudorandom, Gaussian (\"normally\") distributed double value with mean 0.0 and standard deviation 1.0 from this random number generator's sequence. The general contract of nextGaussian is that one System.Double value, chosen from (approximately) the usual normal distribution with mean 0.0 and standard deviation 1.0 , is pseudorandomly generated and returned. This uses the polar method of G. E. P. Box, M. E. Muller, and G. Marsaglia, as described by Donald E. Knuth in The Art of Computer Programming , Volume 3: Seminumerical Algorithms , section 3.4.1, subsection C, algorithm P. Note that it generates two independent values at the cost of only one call to StrictMath.log and one call to StrictMath.sqrt . Declaration public double RandomGaussian() Returns Type Description System.Double The next pseudorandom, Gaussian (\"normally\") distributed System.Double value with mean 0.0 and standard deviation 1.0 from this random number generator's sequence. | Improve this Doc View Source RandomTimeZone(Random) Return a random System.TimeZoneInfo from the available timezones on the system See https://issues.apache.org/jira/browse/LUCENE-4020 . Declaration public static TimeZoneInfo RandomTimeZone(Random random) Parameters Type Name Description System.Random random Returns Type Description System.TimeZoneInfo | Improve this Doc View Source Rarely() Declaration public static bool Rarely() Returns Type Description System.Boolean | Improve this Doc View Source Rarely(Random) Returns true if something should happen rarely, The actual number returned will be influenced by whether Lucene.Net.Util.LuceneTestCase.TEST_NIGHTLY is active and RANDOM_MULTIPLIER . Declaration public static bool Rarely(Random random) Parameters Type Name Description System.Random random Returns Type Description System.Boolean | Improve this Doc View Source SetUp() For subclasses to override. Overrides must call base.SetUp() . Declaration [SetUp] public virtual void SetUp() | Improve this Doc View Source SlowFileExists(Directory, String) Returns true if the file exists (can be opened), false if it cannot be opened, and (unlike .NET's System.IO.File.Exists(System.String) ) if there's some unexpected error. Declaration public static bool SlowFileExists(Directory dir, string fileName) Parameters Type Name Description Directory dir System.String fileName Returns Type Description System.Boolean | Improve this Doc View Source TearDown() For subclasses to override. Overrides must call base.TearDown() . Declaration [TearDown] public virtual void TearDown() | Improve this Doc View Source Usually() Declaration public static bool Usually() Returns Type Description System.Boolean | Improve this Doc View Source Usually(Random) Declaration public static bool Usually(Random random) Parameters Type Name Description System.Random random Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressCodecsAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressCodecsAttribute.html",
    "title": "Class LuceneTestCase.SuppressCodecsAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LuceneTestCase.SuppressCodecsAttribute Annotation for test classes that should avoid certain codec types (because they are expensive, for example). Inheritance System.Object System.Attribute LuceneTestCase.SuppressCodecsAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class SuppressCodecsAttribute : Attribute Constructors | Improve this Doc View Source SuppressCodecsAttribute(String) Constructor for CLS compliance. Declaration public SuppressCodecsAttribute(string codecs) Parameters Type Name Description System.String codecs A comma-deliminated set of codec names. | Improve this Doc View Source SuppressCodecsAttribute(String[]) Declaration [CLSCompliant(false)] public SuppressCodecsAttribute(params string[] value) Parameters Type Name Description System.String [] value Properties | Improve this Doc View Source Value Declaration public string[] Value { get; } Property Value Type Description System.String []"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressTempFileChecksAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressTempFileChecksAttribute.html",
    "title": "Class LuceneTestCase.SuppressTempFileChecksAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LuceneTestCase.SuppressTempFileChecksAttribute Marks any suites which are known not to close all the temporary files. This may prevent temp files and folders from being cleaned up after the suite is completed. Inheritance System.Object System.Attribute LuceneTestCase.SuppressTempFileChecksAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class SuppressTempFileChecksAttribute : Attribute Properties | Improve this Doc View Source BugUrl Point to issue tracker entry. Declaration public virtual string BugUrl { get; set; } Property Value Type Description System.String See Also CreateTempDir () CreateTempFile ( System.String , System.String )"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.NullInfoStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.NullInfoStream.html",
    "title": "Class NullInfoStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NullInfoStream Prints nothing. Just to make sure tests pass w/ and without enabled InfoStream without actually making noise. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object InfoStream NullInfoStream Implements System.IDisposable Inherited Members InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class NullInfoStream : InfoStream, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides InfoStream.Dispose(Boolean) | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean Overrides InfoStream.IsEnabled(String) | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message Overrides InfoStream.Message(String, String) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.StackTraceHelper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.StackTraceHelper.html",
    "title": "Class StackTraceHelper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StackTraceHelper LUCENENET specific class to normalize stack trace behavior between different .NET Framework and .NET Standard 1.x, which did not support the StackTrace class. Inheritance System.Object StackTraceHelper 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class StackTraceHelper Methods | Improve this Doc View Source DoesStackTraceContainMethod(String) Matches the StackTrace for a method name. IMPORTANT: To make the tests pass in release mode, the method(s) named here must be decorated with [MethodImpl(MethodImplOptions.NoInlining)] . Declaration public static bool DoesStackTraceContainMethod(string methodName) Parameters Type Name Description System.String methodName Returns Type Description System.Boolean | Improve this Doc View Source DoesStackTraceContainMethod(String, String) Matches the StackTrace for a particular class (not fully-qualified) and method name. IMPORTANT: To make the tests pass in release mode, the method(s) named here must be decorated with [MethodImpl(MethodImplOptions.NoInlining)] . Declaration public static bool DoesStackTraceContainMethod(string className, string methodName) Parameters Type Name Description System.String className System.String methodName Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.TestUtil.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.TestUtil.html",
    "title": "Class TestUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TestUtil General utility methods for Lucene unit tests. Inheritance System.Object TestUtil 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class TestUtil Fields | Improve this Doc View Source WHITESPACE_CHARACTERS List of characters that match System.Char.IsWhiteSpace(System.Char) . Declaration public static readonly char[] WHITESPACE_CHARACTERS Field Value Type Description System.Char [] Methods | Improve this Doc View Source AlwaysDocValuesFormat(DocValuesFormat) Return a Codec that can read any of the default codecs and formats, but always writes in the specified format. Declaration public static Codec AlwaysDocValuesFormat(DocValuesFormat format) Parameters Type Name Description DocValuesFormat format Returns Type Description Codec | Improve this Doc View Source AlwaysPostingsFormat(PostingsFormat) Return a Codec that can read any of the default codecs and formats, but always writes in the specified format. Declaration public static Codec AlwaysPostingsFormat(PostingsFormat format) Parameters Type Name Description PostingsFormat format Returns Type Description Codec | Improve this Doc View Source AnyFilesExceptWriteLock(Directory) Declaration public static bool AnyFilesExceptWriteLock(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.Boolean | Improve this Doc View Source AssertAttributeReflection(Attribute, IDictionary<String, Object>) Checks some basic behaviour of an Attribute . Declaration public static void AssertAttributeReflection(Attribute att, IDictionary<string, object> reflectedValues) Parameters Type Name Description Attribute att Attribute to reflect System.Collections.Generic.IDictionary < System.String , System.Object > reflectedValues Contains a System.Collections.Generic.IDictionary<TKey, TValue> with \"AttributeSubclassType/key\" as values. | Improve this Doc View Source AssertEquals(TopDocs, TopDocs) Declaration public static void AssertEquals(TopDocs expected, TopDocs actual) Parameters Type Name Description TopDocs expected TopDocs actual | Improve this Doc View Source BytesToCharSequence(BytesRef, Random) Declaration public static ICharSequence BytesToCharSequence(BytesRef ref, Random random) Parameters Type Name Description BytesRef ref System.Random random Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source CheckIndex(Directory) This runs the CheckIndex tool on the index in. If any issues are hit, an System.Exception is thrown; else, true is returned. Declaration public static CheckIndex.Status CheckIndex(Directory dir) Parameters Type Name Description Directory dir Returns Type Description CheckIndex.Status | Improve this Doc View Source CheckIndex(Directory, Boolean) Declaration public static CheckIndex.Status CheckIndex(Directory dir, bool crossCheckTermVectors) Parameters Type Name Description Directory dir System.Boolean crossCheckTermVectors Returns Type Description CheckIndex.Status | Improve this Doc View Source CheckReader(AtomicReader, Boolean) Declaration public static void CheckReader(AtomicReader reader, bool crossCheckTermVectors) Parameters Type Name Description AtomicReader reader System.Boolean crossCheckTermVectors | Improve this Doc View Source CheckReader(IndexReader) This runs the CheckIndex tool on the IndexReader . If any issues are hit, an System.Exception is thrown. Declaration public static void CheckReader(IndexReader reader) Parameters Type Name Description IndexReader reader | Improve this Doc View Source CloneDocument(Document) Declaration public static Document CloneDocument(Document doc1) Parameters Type Name Description Document doc1 Returns Type Description Document | Improve this Doc View Source Docs(Random, IndexReader, String, BytesRef, IBits, DocsEnum, DocsFlags) Returns a DocsEnum , but randomly sometimes uses a MultiDocsEnum , DocsAndPositionsEnum . Returns null if field/term doesn't exist. Declaration public static DocsEnum Docs(Random random, IndexReader r, string field, BytesRef term, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description System.Random random IndexReader r System.String field BytesRef term IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source Docs(Random, TermsEnum, IBits, DocsEnum, DocsFlags) Returns a DocsEnum from a positioned TermsEnum , but randomly sometimes uses a MultiDocsEnum , DocsAndPositionsEnum . Declaration public static DocsEnum Docs(Random random, TermsEnum termsEnum, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description System.Random random TermsEnum termsEnum IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source FieldSupportsHugeBinaryDocValues(String) Declaration public static bool FieldSupportsHugeBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description System.Boolean | Improve this Doc View Source GetDocValuesFormat(Codec, String) Declaration public static string GetDocValuesFormat(Codec codec, string field) Parameters Type Name Description Codec codec System.String field Returns Type Description System.String | Improve this Doc View Source GetDocValuesFormat(String) Declaration public static string GetDocValuesFormat(string field) Parameters Type Name Description System.String field Returns Type Description System.String | Improve this Doc View Source GetPostingsFormat(Codec, String) Declaration public static string GetPostingsFormat(Codec codec, string field) Parameters Type Name Description Codec codec System.String field Returns Type Description System.String | Improve this Doc View Source GetPostingsFormat(String) Declaration public static string GetPostingsFormat(string field) Parameters Type Name Description System.String field Returns Type Description System.String | Improve this Doc View Source NextInt32(Random, Int32, Int32) start and end are BOTH inclusive Declaration public static int NextInt32(Random r, int start, int end) Parameters Type Name Description System.Random r System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source NextInt64(Random, Int64, Int64) start and end are BOTH inclusive Declaration public static long NextInt64(Random r, long start, long end) Parameters Type Name Description System.Random r System.Int64 start System.Int64 end Returns Type Description System.Int64 | Improve this Doc View Source RandomAnalysisString(Random, Int32, Boolean) Declaration public static string RandomAnalysisString(Random random, int maxLength, bool simple) Parameters Type Name Description System.Random random System.Int32 maxLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source RandomFilterStrategy(Random) Declaration public static FilteredQuery.FilterStrategy RandomFilterStrategy(Random random) Parameters Type Name Description System.Random random Returns Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source RandomFixedByteLengthUnicodeString(Random, Int32) Returns random string, with a given UTF-8 byte length . Declaration public static string RandomFixedByteLengthUnicodeString(Random r, int length) Parameters Type Name Description System.Random r System.Int32 length Returns Type Description System.String | Improve this Doc View Source RandomFixedLengthUnicodeString(Random, Char[], Int32, Int32) Fills provided char[] with valid random unicode code unit sequence. Declaration public static void RandomFixedLengthUnicodeString(Random random, char[] chars, int offset, int length) Parameters Type Name Description System.Random random System.Char [] chars System.Int32 offset System.Int32 length | Improve this Doc View Source RandomHtmlishString(Random, Int32) Returns a random HTML-like string. Declaration public static string RandomHtmlishString(Random random, int numElements) Parameters Type Name Description System.Random random System.Int32 numElements Returns Type Description System.String | Improve this Doc View Source RandomlyRecaseString(Random, String) Randomly upcases, downcases, or leaves intact each code point in the given string. Declaration public static string RandomlyRecaseString(Random random, string str) Parameters Type Name Description System.Random random System.String str Returns Type Description System.String | Improve this Doc View Source RandomRealisticUnicodeString(Random) Returns random string of length between 0-20 codepoints, all codepoints within the same unicode block. Declaration public static string RandomRealisticUnicodeString(Random r) Parameters Type Name Description System.Random r Returns Type Description System.String | Improve this Doc View Source RandomRealisticUnicodeString(Random, Int32) Returns random string of length up to maxLength codepoints, all codepoints within the same unicode block. Declaration public static string RandomRealisticUnicodeString(Random r, int maxLength) Parameters Type Name Description System.Random r System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomRealisticUnicodeString(Random, Int32, Int32) Returns random string of length between min and max codepoints, all codepoints within the same unicode block. Declaration public static string RandomRealisticUnicodeString(Random r, int minLength, int maxLength) Parameters Type Name Description System.Random r System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomRegex(Random) Returns a valid (compiling) System.Text.RegularExpressions.Regex instance with random stuff inside. Be careful when applying random patterns to longer strings as certain types of patterns may explode into exponential times in backtracking implementations (such as Java's). Declaration public static Regex RandomRegex(Random random) Parameters Type Name Description System.Random random Returns Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source RandomRegexpishString(Random) Returns a System.String thats \"regexpish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Declaration public static string RandomRegexpishString(Random r) Parameters Type Name Description System.Random r Returns Type Description System.String | Improve this Doc View Source RandomRegexpishString(Random, Int32) Returns a System.String thats \"regexpish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Note: to avoid practically endless backtracking patterns we replace asterisk and plus operators with bounded repetitions. See LUCENE-4111 for more info. Declaration public static string RandomRegexpishString(Random r, int maxLength) Parameters Type Name Description System.Random r System.Int32 maxLength A hint about maximum length of the regexpish string. It may be exceeded by a few characters. Returns Type Description System.String | Improve this Doc View Source RandomSimpleString(Random) Returns a random string consisting only of lowercase characters 'a' through 'z', between 0 and 20 characters in length. Declaration public static string RandomSimpleString(Random r) Parameters Type Name Description System.Random r Returns Type Description System.String | Improve this Doc View Source RandomSimpleString(Random, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string RandomSimpleString(Random r, int maxLength) Parameters Type Name Description System.Random r System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomSimpleString(Random, Int32, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string RandomSimpleString(Random r, int minLength, int maxLength) Parameters Type Name Description System.Random r System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomSimpleStringRange(Random, Char, Char, Int32) Returns a random string consisting only of characters between minChar and maxChar . Declaration public static string RandomSimpleStringRange(Random r, char minChar, char maxChar, int maxLength) Parameters Type Name Description System.Random r System.Char minChar System.Char maxChar System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomSubString(Random, Int32, Boolean) Declaration public static string RandomSubString(Random random, int wordLength, bool simple) Parameters Type Name Description System.Random random System.Int32 wordLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source RandomUnicodeString(Random) Returns random string, including full unicode range. Declaration public static string RandomUnicodeString(Random r) Parameters Type Name Description System.Random r Returns Type Description System.String | Improve this Doc View Source RandomUnicodeString(Random, Int32) Returns a random string up to a certain length. Declaration public static string RandomUnicodeString(Random r, int maxLength) Parameters Type Name Description System.Random r System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomWhitespace(Random, Int32, Int32) Returns a random string in the specified length range consisting entirely of whitespace characters. Declaration public static string RandomWhitespace(Random r, int minLength, int maxLength) Parameters Type Name Description System.Random r System.Int32 minLength System.Int32 maxLength Returns Type Description System.String See Also WHITESPACE_CHARACTERS | Improve this Doc View Source ReduceOpenFiles(IndexWriter) Just tries to configure things to keep the open file count lowish. Declaration public static void ReduceOpenFiles(IndexWriter w) Parameters Type Name Description IndexWriter w | Improve this Doc View Source Rm(DirectoryInfo[]) Deletes one or more files or directories (and everything underneath it). Declaration public static void Rm(params DirectoryInfo[] locations) Parameters Type Name Description System.IO.DirectoryInfo [] locations Exceptions Type Condition System.IO.IOException If any of the given files (or their subhierarchy files in case of directories) cannot be removed. | Improve this Doc View Source StringToCharSequence(String, Random) Declaration public static ICharSequence StringToCharSequence(string string, Random random) Parameters Type Name Description System.String string System.Random random Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source SyncConcurrentMerges(IMergeScheduler) Declaration public static void SyncConcurrentMerges(IMergeScheduler ms) Parameters Type Name Description IMergeScheduler ms | Improve this Doc View Source SyncConcurrentMerges(IndexWriter) Declaration public static void SyncConcurrentMerges(IndexWriter writer) Parameters Type Name Description IndexWriter writer | Improve this Doc View Source Unzip(Stream, DirectoryInfo) Convenience method unzipping zipFileStream into destDir , cleaning up destDir first. Declaration public static void Unzip(Stream zipFileStream, DirectoryInfo destDir) Parameters Type Name Description System.IO.Stream zipFileStream System.IO.DirectoryInfo destDir"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.ThrottledIndexOutput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.ThrottledIndexOutput.html",
    "title": "Class ThrottledIndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ThrottledIndexOutput Intentionally slow IndexOutput for testing. Inheritance System.Object DataOutput IndexOutput ThrottledIndexOutput Implements System.IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class ThrottledIndexOutput : IndexOutput, IDisposable Constructors | Improve this Doc View Source ThrottledIndexOutput(Int32, Int64, IndexOutput) Declaration public ThrottledIndexOutput(int bytesPerSecond, long delayInMillis, IndexOutput delegate) Parameters Type Name Description System.Int32 bytesPerSecond System.Int64 delayInMillis IndexOutput delegate | Improve this Doc View Source ThrottledIndexOutput(Int32, Int64, Int32, IndexOutput) Declaration public ThrottledIndexOutput(int bytesPerSecond, long delays, int minBytesWritten, IndexOutput delegate) Parameters Type Name Description System.Int32 bytesPerSecond System.Int64 delays System.Int32 minBytesWritten IndexOutput delegate | Improve this Doc View Source ThrottledIndexOutput(Int32, Int64, Int64, Int64, Int64, IndexOutput) Declaration public ThrottledIndexOutput(int bytesPerSecond, long flushDelayMillis, long closeDelayMillis, long seekDelayMillis, long minBytesWritten, IndexOutput delegate) Parameters Type Name Description System.Int32 bytesPerSecond System.Int64 flushDelayMillis System.Int64 closeDelayMillis System.Int64 seekDelayMillis System.Int64 minBytesWritten IndexOutput delegate Fields | Improve this Doc View Source DEFAULT_MIN_WRITTEN_BYTES Declaration public const int DEFAULT_MIN_WRITTEN_BYTES = 1024 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; set; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source CopyBytes(DataInput, Int64) Declaration public override void CopyBytes(DataInput input, long numBytes) Parameters Type Name Description DataInput input System.Int64 numBytes Overrides DataOutput.CopyBytes(DataInput, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source GetDelay(Boolean) Declaration protected virtual long GetDelay(bool closing) Parameters Type Name Description System.Boolean closing Returns Type Description System.Int64 | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source MBitsToBytes(Int32) Declaration public static int MBitsToBytes(int mbits) Parameters Type Name Description System.Int32 mbits Returns Type Description System.Int32 | Improve this Doc View Source NewFromDelegate(IndexOutput) Declaration public virtual ThrottledIndexOutput NewFromDelegate(IndexOutput output) Parameters Type Name Description IndexOutput output Returns Type Description ThrottledIndexOutput | Improve this Doc View Source Seek(Int64) Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.TimeUnits.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.TimeUnits.html",
    "title": "Class TimeUnits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TimeUnits Time unit constants for use in annotations. Inheritance System.Object TimeUnits 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.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class TimeUnits Fields | Improve this Doc View Source HOUR 1 hour in milliseconds Declaration public const int HOUR = 3600000 Field Value Type Description System.Int32 | Improve this Doc View Source MINUTE 1 minute in milliseconds Declaration public const int MINUTE = 60000 Field Value Type Description System.Int32 | Improve this Doc View Source SECOND 1 second in milliseconds Declaration public const int SECOND = 1000 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/overview.html": {
    "href": "api/Lucene.Net.TestFramework/overview.html",
    "title": "Lucene.Net.TestFramework | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net.TestFramework <!-- 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. --> The Lucene Test Framework is used by Lucene as the basis for its tests. The framework can also be used for testing third-party code that uses the Lucene API."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.GlobalReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.GlobalReuseStrategy.html",
    "title": "Class Analyzer.GlobalReuseStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Analyzer.GlobalReuseStrategy Implementation of ReuseStrategy that reuses the same components for every field. Inheritance System.Object ReuseStrategy Analyzer.GlobalReuseStrategy Inherited Members ReuseStrategy.GetStoredValue(Analyzer) ReuseStrategy.SetStoredValue(Analyzer, Object) 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.Analysis Assembly : Lucene.Net.dll Syntax [Obsolete(\"this implementation class will be hidden in Lucene 5.0. Use Analyzer.GLOBAL_REUSE_STRATEGY instead!\")] public sealed class GlobalReuseStrategy : ReuseStrategy Constructors | Improve this Doc View Source GlobalReuseStrategy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration [Obsolete(\"Don't create instances of this class, use Analyzer.GLOBAL_REUSE_STRATEGY\")] public GlobalReuseStrategy() Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Declaration public override TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer System.String fieldName Returns Type Description TokenStreamComponents Overrides ReuseStrategy.GetReusableComponents(Analyzer, String) | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Declaration public override void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer System.String fieldName TokenStreamComponents components Overrides ReuseStrategy.SetReusableComponents(Analyzer, String, TokenStreamComponents)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.html",
    "title": "Class Analyzer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Analyzer An Analyzer builds TokenStream s, which analyze text. It thus represents a policy for extracting index terms from text. In order to define what analysis is done, subclasses must define their TokenStreamComponents in CreateComponents(String, TextReader) . The components are then reused in each call to GetTokenStream(String, TextReader) . Simple example: Analyzer analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); For more examples, see the Lucene.Net.Analysis namespace documentation. For some concrete implementations bundled with Lucene, look in the analysis modules: Common: Analyzers for indexing content in different languages and domains. ICU: Exposes functionality from ICU to Apache Lucene. Kuromoji: Morphological analyzer for Japanese text. Morfologik: Dictionary-driven lemmatization for the Polish language. Phonetic: Analysis for indexing phonetic signatures (for sounds-alike search). Smart Chinese: Analyzer for Simplified Chinese, which indexes words. Stempel: Algorithmic Stemmer for the Polish Language. UIMA: Analysis integration with Apache UIMA. Inheritance System.Object Analyzer AnalyzerWrapper 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.Analysis Assembly : Lucene.Net.dll Syntax public abstract class Analyzer : IDisposable Constructors | Improve this Doc View Source Analyzer() Create a new Analyzer , reusing the same set of components per-thread across calls to GetTokenStream(String, TextReader) . Declaration public Analyzer() | Improve this Doc View Source Analyzer(ReuseStrategy) Expert: create a new Analyzer with a custom ReuseStrategy . NOTE: if you just want to reuse on a per-field basis, its easier to use a subclass of AnalyzerWrapper such as Lucene.Net.Analysis.Common.Miscellaneous.PerFieldAnalyzerWrapper instead. Declaration public Analyzer(ReuseStrategy reuseStrategy) Parameters Type Name Description ReuseStrategy reuseStrategy Fields | Improve this Doc View Source GLOBAL_REUSE_STRATEGY A predefined ReuseStrategy that reuses the same components for every field. Declaration public static readonly ReuseStrategy GLOBAL_REUSE_STRATEGY Field Value Type Description ReuseStrategy | Improve this Doc View Source PER_FIELD_REUSE_STRATEGY A predefined ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. Declaration public static readonly ReuseStrategy PER_FIELD_REUSE_STRATEGY Field Value Type Description ReuseStrategy Properties | Improve this Doc View Source Strategy Returns the used ReuseStrategy . Declaration public ReuseStrategy Strategy { get; } Property Value Type Description ReuseStrategy Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a new TokenStreamComponents instance for this analyzer. Declaration protected abstract TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the fields content passed to the TokenStreamComponents sink as a reader System.IO.TextReader reader the reader passed to the Tokenizer constructor Returns Type Description TokenStreamComponents the TokenStreamComponents for this analyzer. | Improve this Doc View Source Dispose() Frees persistent resources used by this Analyzer Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Frees persistent resources used by this Analyzer Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetOffsetGap(String) Just like GetPositionIncrementGap(String) , except for Token offsets instead. By default this returns 1. this method is only called if the field produced at least one token for indexing. Declaration public virtual int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName the field just indexed Returns Type Description System.Int32 offset gap, added to the next token emitted from GetTokenStream(String, TextReader) . this value must be >= 0 . | Improve this Doc View Source GetPositionIncrementGap(String) Invoked before indexing a IIndexableField instance if terms have already been added to that field. This allows custom analyzers to place an automatic position increment gap between IIndexableField instances using the same field name. The default value position increment gap is 0. With a 0 position increment gap and the typical default token position increment of 1, all terms in a field, including across IIndexableField instances, are in successive positions, allowing exact PhraseQuery matches, for instance, across IIndexableField instance boundaries. Declaration public virtual int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName IIndexableField name being indexed. Returns Type Description System.Int32 position increment gap, added to the next token emitted from GetTokenStream(String, TextReader) . this value must be >= 0 . | Improve this Doc View Source GetTokenStream(String, TextReader) Returns a TokenStream suitable for fieldName , tokenizing the contents of text . This method uses CreateComponents(String, TextReader) to obtain an instance of TokenStreamComponents . It returns the sink of the components and stores the components internally. Subsequent calls to this method will reuse the previously stored components after resetting them through SetReader(TextReader) . NOTE: After calling this method, the consumer must follow the workflow described in TokenStream to properly consume its contents. See the Lucene.Net.Analysis namespace documentation for some examples demonstrating this. Declaration public TokenStream GetTokenStream(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the field the created TokenStream is used for System.IO.TextReader reader the reader the streams source reads from Returns Type Description TokenStream TokenStream for iterating the analyzed content of System.IO.TextReader Exceptions Type Condition System.ObjectDisposedException if the Analyzer is disposed. System.IO.IOException if an i/o error occurs (may rarely happen for strings). See Also GetTokenStream(String, String) | Improve this Doc View Source GetTokenStream(String, String) Returns a TokenStream suitable for fieldName , tokenizing the contents of text . This method uses CreateComponents(String, TextReader) to obtain an instance of TokenStreamComponents . It returns the sink of the components and stores the components internally. Subsequent calls to this method will reuse the previously stored components after resetting them through SetReader(TextReader) . NOTE: After calling this method, the consumer must follow the workflow described in TokenStream to properly consume its contents. See the Lucene.Net.Analysis namespace documentation for some examples demonstrating this. Declaration public TokenStream GetTokenStream(string fieldName, string text) Parameters Type Name Description System.String fieldName the name of the field the created TokenStream is used for System.String text the System.String the streams source reads from Returns Type Description TokenStream TokenStream for iterating the analyzed content of reader Exceptions Type Condition System.ObjectDisposedException if the Analyzer is disposed. System.IO.IOException if an i/o error occurs (may rarely happen for strings). See Also GetTokenStream(String, TextReader) | Improve this Doc View Source InitReader(String, TextReader) Override this if you want to add a CharFilter chain. The default implementation returns reader unchanged. Declaration protected virtual TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName IIndexableField name being indexed System.IO.TextReader reader original System.IO.TextReader Returns Type Description System.IO.TextReader reader, optionally decorated with CharFilter (s) | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter. Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter and allows the use of a ReuseStrategy . Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, reuseStrategy); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, ReuseStrategy reuseStrategy) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents An delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. ReuseStrategy reuseStrategy A custom ReuseStrategy instance. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter and the body of the InitReader(String, TextReader) method through the initReader parameter. Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, initReader: (fieldName, reader) => { return new HTMLStripCharFilter(reader); }); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, Func<string, TextReader, TextReader> initReader) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. System.Func < System.String , System.IO.TextReader , System.IO.TextReader > initReader A delegate method that represents (is called by) the InitReader(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the System.IO.TextReader that can be modified or wrapped by the initReader method. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter, the body of the InitReader(String, TextReader) method through the initReader parameter, and allows the use of a ReuseStrategy . Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, initReader: (fieldName, reader) => { return new HTMLStripCharFilter(reader); }, reuseStrategy); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, Func<string, TextReader, TextReader> initReader, ReuseStrategy reuseStrategy) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. System.Func < System.String , System.IO.TextReader , System.IO.TextReader > initReader A delegate method that represents (is called by) the InitReader(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the System.IO.TextReader that can be modified or wrapped by the initReader method. ReuseStrategy reuseStrategy A custom ReuseStrategy instance. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.PerFieldReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.PerFieldReuseStrategy.html",
    "title": "Class Analyzer.PerFieldReuseStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Analyzer.PerFieldReuseStrategy Implementation of ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. Inheritance System.Object ReuseStrategy Analyzer.PerFieldReuseStrategy Inherited Members ReuseStrategy.GetStoredValue(Analyzer) ReuseStrategy.SetStoredValue(Analyzer, Object) 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.Analysis Assembly : Lucene.Net.dll Syntax [Obsolete(\"this implementation class will be hidden in Lucene 5.0. Use Analyzer.PER_FIELD_REUSE_STRATEGY instead!\")] public class PerFieldReuseStrategy : ReuseStrategy Constructors | Improve this Doc View Source PerFieldReuseStrategy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration [Obsolete(\"Don't create instances of this class, use Analyzer.PER_FIELD_REUSE_STRATEGY\")] public PerFieldReuseStrategy() Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Declaration public override TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer System.String fieldName Returns Type Description TokenStreamComponents Overrides ReuseStrategy.GetReusableComponents(Analyzer, String) | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Declaration public override void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer System.String fieldName TokenStreamComponents components Overrides ReuseStrategy.SetReusableComponents(Analyzer, String, TokenStreamComponents)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.AnalyzerWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.AnalyzerWrapper.html",
    "title": "Class AnalyzerWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AnalyzerWrapper Extension to Analyzer suitable for Analyzer s which wrap other Analyzer s. GetWrappedAnalyzer(String) allows the Analyzer to wrap multiple Analyzer s which are selected on a per field basis. WrapComponents(String, TokenStreamComponents) allows the TokenStreamComponents of the wrapped Analyzer to then be wrapped (such as adding a new TokenFilter to form new TokenStreamComponents ). Inheritance System.Object Analyzer AnalyzerWrapper Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY 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.Analysis Assembly : Lucene.Net.dll Syntax public abstract class AnalyzerWrapper : Analyzer, IDisposable Constructors | Improve this Doc View Source AnalyzerWrapper() Creates a new AnalyzerWrapper . Since the ReuseStrategy of the wrapped Analyzer s are unknown, PER_FIELD_REUSE_STRATEGY is assumed. Declaration [Obsolete(\"Use AnalyzerWrapper(Analyzer.ReuseStrategy) and specify a valid Analyzer.ReuseStrategy, probably retrieved from the wrapped analyzer using Analyzer.Strategy.\")] protected AnalyzerWrapper() | Improve this Doc View Source AnalyzerWrapper(ReuseStrategy) Creates a new AnalyzerWrapper with the given reuse strategy. If you want to wrap a single delegate Analyzer you can probably reuse its strategy when instantiating this subclass: base(innerAnalyzer.Strategy) . If you choose different analyzers per field, use PER_FIELD_REUSE_STRATEGY . Declaration protected AnalyzerWrapper(ReuseStrategy reuseStrategy) Parameters Type Name Description ReuseStrategy reuseStrategy See Also Strategy Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override sealed TokenStreamComponents CreateComponents(string fieldName, TextReader aReader) Parameters Type Name Description System.String fieldName System.IO.TextReader aReader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetOffsetGap(String) Declaration public override int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 Overrides Analyzer.GetOffsetGap(String) | Improve this Doc View Source GetPositionIncrementGap(String) Declaration public override int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 Overrides Analyzer.GetPositionIncrementGap(String) | Improve this Doc View Source GetWrappedAnalyzer(String) Retrieves the wrapped Analyzer appropriate for analyzing the field with the given name Declaration protected abstract Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Name of the field which is to be analyzed Returns Type Description Analyzer Analyzer for the field with the given name. Assumed to be non-null | Improve this Doc View Source InitReader(String, TextReader) Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description System.IO.TextReader Overrides Analyzer.InitReader(String, TextReader) | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Wraps / alters the given TokenStreamComponents , taken from the wrapped Analyzer , to form new components. It is through this method that new TokenFilter s can be added by AnalyzerWrapper s. By default, the given components are returned. Declaration protected virtual TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName Name of the field which is to be analyzed TokenStreamComponents components TokenStreamComponents taken from the wrapped Analyzer Returns Type Description TokenStreamComponents Wrapped / altered TokenStreamComponents . | Improve this Doc View Source WrapReader(String, TextReader) Wraps / alters the given System.IO.TextReader . Through this method AnalyzerWrapper s can implement InitReader(String, TextReader) . By default, the given reader is returned. Declaration protected virtual TextReader WrapReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName name of the field which is to be analyzed System.IO.TextReader reader the reader to wrap Returns Type Description System.IO.TextReader the wrapped reader Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.CachingTokenFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.CachingTokenFilter.html",
    "title": "Class CachingTokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CachingTokenFilter This class can be used if the token attributes of a TokenStream are intended to be consumed more than once. It caches all token attribute states locally in a List. CachingTokenFilter implements the optional method Reset() , which repositions the stream to the first Token . Inheritance System.Object AttributeSource TokenStream TokenFilter CachingTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class CachingTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CachingTokenFilter(TokenStream) Create a new CachingTokenFilter around input , caching its token attributes, which can be replayed again after a call to Reset() . Declaration public CachingTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Rewinds the iterator to the beginning of the cached list. Note that this does not call Reset() on the wrapped tokenstream ever, even the first time. You should Reset() the inner tokenstream before wrapping it with CachingTokenFilter . Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.CharFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.CharFilter.html",
    "title": "Class CharFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharFilter Subclasses of CharFilter can be chained to filter a System.IO.TextReader They can be used as System.IO.TextReader with additional offset correction. Tokenizer s will automatically use CorrectOffset(Int32) if a CharFilter subclass is used. This class is abstract: at a minimum you must implement System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) , transforming the input in some way from m_input , and Correct(Int32) to adjust the offsets to match the originals. You can optionally provide more efficient implementations of additional methods like System.IO.TextReader.Read() , but this is not required. For examples and integration with Analyzer , see the Lucene.Net.Analysis namespace documentation. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader CharFilter Implements System.IDisposable Inherited Members System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis Assembly : Lucene.Net.dll Syntax public abstract class CharFilter : TextReader, IDisposable Constructors | Improve this Doc View Source CharFilter(TextReader) Create a new CharFilter wrapping the provided reader. Declaration public CharFilter(TextReader input) Parameters Type Name Description System.IO.TextReader input a System.IO.TextReader , can also be a CharFilter for chaining. Fields | Improve this Doc View Source m_input The underlying character-input stream. Declaration protected readonly TextReader m_input Field Value Type Description System.IO.TextReader Properties | Improve this Doc View Source IsMarkSupported Tells whether this stream supports the Mark(Int32) operation. The default implementation always returns false. Subclasses should override this method. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual bool IsMarkSupported { get; } Property Value Type Description System.Boolean true if and only if this stream supports the mark operation. | Improve this Doc View Source IsReady Tells whether this stream is ready to be read. True if the next System.IO.TextReader.Read() is guaranteed not to block for input, false otherwise. Note that returning false does not guarantee that the next read will block. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual bool IsReady { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Correct(Int32) Subclasses override to correct the current offset. Declaration protected abstract int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff current offset Returns Type Description System.Int32 corrected offset | Improve this Doc View Source CorrectOffset(Int32) Chains the corrected offset through the input CharFilter (s). Declaration public int CorrectOffset(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 | Improve this Doc View Source Dispose(Boolean) Closes the underlying input stream. NOTE: The default implementation closes the input System.IO.TextReader , so be sure to call base.Dispose(disposing) when overriding this method. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.TextReader.Dispose(System.Boolean) | Improve this Doc View Source Mark(Int32) Marks the present position in the stream. Subsequent calls to Reset() will attempt to reposition the stream to this point. Not all character-input streams support the Mark(Int32) operation. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual void Mark(int readAheadLimit) Parameters Type Name Description System.Int32 readAheadLimit Limit on the number of characters that may be read while still preserving the mark. After reading this many characters, attempting to reset the stream may fail. | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides System.IO.TextReader.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public abstract override int Read(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Int32 Overrides System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source Reset() LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual void Reset() | Improve this Doc View Source Skip(Int32) Skips characters. This method will block until some characters are available, an I/O error occurs, or the end of the stream is reached. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual long Skip(int n) Parameters Type Name Description System.Int32 n The number of characters to skip Returns Type Description System.Int64 The number of characters actually skipped Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.html",
    "title": "Namespace Lucene.Net.Analysis | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing analysis components. The main classes of interest are: * BaseTokenStreamTestCase : Highly recommended to use its helper methods, (especially in conjunction with MockAnalyzer or MockTokenizer ), as it contains many assertions and checks to catch bugs. * MockTokenizer : Tokenizer for testing. Tokenizer that serves as a replacement for WHITESPACE, SIMPLE, and KEYWORD tokenizers. If you are writing a component such as a TokenFilter, its a great idea to test it wrapping this tokenizer instead for extra checks. * MockAnalyzer : Analyzer for testing. Analyzer that uses MockTokenizer for additional verification. If you are testing a custom component such as a queryparser or analyzer-wrapper that consumes analysis streams, its a great idea to test it with this analyzer instead. Classes Analyzer An Analyzer builds TokenStream s, which analyze text. It thus represents a policy for extracting index terms from text. In order to define what analysis is done, subclasses must define their TokenStreamComponents in CreateComponents(String, TextReader) . The components are then reused in each call to GetTokenStream(String, TextReader) . Simple example: Analyzer analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); For more examples, see the Lucene.Net.Analysis namespace documentation. For some concrete implementations bundled with Lucene, look in the analysis modules: Common: Analyzers for indexing content in different languages and domains. ICU: Exposes functionality from ICU to Apache Lucene. Kuromoji: Morphological analyzer for Japanese text. Morfologik: Dictionary-driven lemmatization for the Polish language. Phonetic: Analysis for indexing phonetic signatures (for sounds-alike search). Smart Chinese: Analyzer for Simplified Chinese, which indexes words. Stempel: Algorithmic Stemmer for the Polish Language. UIMA: Analysis integration with Apache UIMA. Analyzer.GlobalReuseStrategy Implementation of ReuseStrategy that reuses the same components for every field. Analyzer.PerFieldReuseStrategy Implementation of ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. AnalyzerWrapper Extension to Analyzer suitable for Analyzer s which wrap other Analyzer s. GetWrappedAnalyzer(String) allows the Analyzer to wrap multiple Analyzer s which are selected on a per field basis. WrapComponents(String, TokenStreamComponents) allows the TokenStreamComponents of the wrapped Analyzer to then be wrapped (such as adding a new TokenFilter to form new TokenStreamComponents ). CachingTokenFilter This class can be used if the token attributes of a TokenStream are intended to be consumed more than once. It caches all token attribute states locally in a List. CachingTokenFilter implements the optional method Reset() , which repositions the stream to the first Token . CharFilter Subclasses of CharFilter can be chained to filter a System.IO.TextReader They can be used as System.IO.TextReader with additional offset correction. Tokenizer s will automatically use CorrectOffset(Int32) if a CharFilter subclass is used. This class is abstract: at a minimum you must implement System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) , transforming the input in some way from m_input , and Correct(Int32) to adjust the offsets to match the originals. You can optionally provide more efficient implementations of additional methods like System.IO.TextReader.Read() , but this is not required. For examples and integration with Analyzer , see the Lucene.Net.Analysis namespace documentation. NumericTokenStream Expert: this class provides a TokenStream for indexing numeric values that can be used by NumericRangeQuery or NumericRangeFilter . Note that for simple usage, Int32Field , Int64Field , SingleField or DoubleField is recommended. These fields disable norms and term freqs, as they are not usually needed during searching. If you need to change these settings, you should use this class. Here's an example usage, for an System.Int32 field: IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value), fieldType); document.Add(field); For optimal performance, re-use the TokenStream and Field instance for more than one document: NumericTokenStream stream = new NumericTokenStream(precisionStep); IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, stream, fieldType); Document document = new Document(); document.Add(field); for(all documents) { stream.SetInt32Value(value) writer.AddDocument(document); } this stream is not intended to be used in analyzers; it's more for iterating the different precisions during indexing a specific numeric value. NOTE : as token streams are only consumed once the document is added to the index, if you index more than one numeric field, use a separate NumericTokenStream instance for each. See NumericRangeQuery for more details on the precisionStep parameter as well as how numeric fields work under the hood. @since 2.9 NumericTokenStream.NumericTermAttribute Implementation of NumericTokenStream.INumericTermAttribute . This is a Lucene.NET INTERNAL API, use at your own risk @since 4.0 ReusableStringReader Internal class to enable reuse of the string reader by GetTokenStream(String, String) ReuseStrategy Strategy defining how TokenStreamComponents are reused per call to GetTokenStream(String, TextReader) . Token A Token is an occurrence of a term from the text of a field. It consists of a term's text, the start and end offset of the term in the text of the field, and a type string. The start and end offsets permit applications to re-associate a token with its source text, e.g., to display highlighted query terms in a document browser, or to show matching text fragments in a KWIC (KeyWord In Context) display, etc. The type is a string, assigned by a lexical analyzer (a.k.a. tokenizer), naming the lexical or syntactic class that the token belongs to. For example an end of sentence marker token might be implemented with type \"eos\". The default token type is \"word\". A Token can optionally have metadata (a.k.a. payload) in the form of a variable length byte array. Use GetPayload() to retrieve the payloads from the index. NOTE: As of 2.9, Token implements all IAttribute interfaces that are part of core Lucene and can be found in the Lucene.Net.Analysis.TokenAttributes namespace. Even though it is not necessary to use Token anymore, with the new TokenStream API it can be used as convenience class that implements all IAttribute s, which is especially useful to easily switch from the old to the new TokenStream API. Tokenizer s and TokenFilter s should try to re-use a Token instance when possible for best performance, by implementing the IncrementToken() API. Failing that, to create a new Token you should first use one of the constructors that starts with null text. To load the token from a char[] use CopyBuffer(Char[], Int32, Int32) . To load from a System.String use SetEmpty() followed by Append(String) or Append(String, Int32, Int32) . Alternatively you can get the Token 's termBuffer by calling either Buffer , if you know that your text is shorter than the capacity of the termBuffer or ResizeBuffer(Int32) , if there is any possibility that you may need to grow the buffer. Fill in the characters of your term into this buffer, with System.String.ToCharArray(System.Int32,System.Int32) if loading from a string, or with System.Array.Copy(System.Array,System.Int32,System.Array,System.Int32,System.Int32) , and finally call SetLength(Int32) to set the length of the term text. See LUCENE-969 for details. Typical Token reuse patterns: Copying text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, startOffset, endOffset[, type]); Copying some text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, 0, string.Length, startOffset, endOffset[, type]); Copying text from char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, 0, buffer.Length, startOffset, endOffset[, type]); Copying some text from a char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, start, end - start, startOffset, endOffset[, type]); Copying from one one Token to another (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(source.Buffer, 0, source.Length, source.StartOffset, source.EndOffset[, source.Type]); A few things to note: Clear() initializes all of the fields to default values. this was changed in contrast to Lucene 2.4, but should affect no one. Because TokenStream s can be chained, one cannot assume that the Token 's current type is correct. The startOffset and endOffset represent the start and offset in the source text, so be careful in adjusting them. When caching a reusable token, clone it. When injecting a cached token into a stream that can be reset, clone it again. Please note: With Lucene 3.1, the ToString() method had to be changed to match the J2N.Text.ICharSequence interface introduced by the interface ICharTermAttribute . this method now only prints the term text, no additional information anymore. Token.TokenAttributeFactory Expert: Creates a Token.TokenAttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. @since 3.0 TokenFilter A TokenFilter is a TokenStream whose input is another TokenStream . This is an abstract class; subclasses must override IncrementToken() . Tokenizer A Tokenizer is a TokenStream whose input is a System.IO.TextReader . This is an abstract class; subclasses must override IncrementToken() NOTE: Subclasses overriding IncrementToken() must call ClearAttributes() before setting attributes. TokenStream A TokenStream enumerates the sequence of tokens, either from Field s of a Document or from query text. this is an abstract class; concrete subclasses are: Tokenizer , a TokenStream whose input is a System.IO.TextReader ; and TokenFilter , a TokenStream whose input is another TokenStream . A new TokenStream API has been introduced with Lucene 2.9. this API has moved from being Token -based to IAttribute -based. While Token still exists in 2.9 as a convenience class, the preferred way to store the information of a Token is to use System.Attribute s. TokenStream now extends AttributeSource , which provides access to all of the token IAttribute s for the TokenStream . Note that only one instance per System.Attribute is created and reused for every token. This approach reduces object creation and allows local caching of references to the System.Attribute s. See IncrementToken() for further details. The workflow of the new TokenStream API is as follows: Instantiation of TokenStream / TokenFilter s which add/get attributes to/from the AttributeSource . The consumer calls Reset() . The consumer retrieves attributes from the stream and stores local references to all attributes it wants to access. The consumer calls IncrementToken() until it returns false consuming the attributes after each call. The consumer calls End() so that any end-of-stream operations can be performed. The consumer calls Dispose() to release any resource when finished using the TokenStream . To make sure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . You can find some example code for the new API in the analysis documentation. Sometimes it is desirable to capture a current state of a TokenStream , e.g., for buffering purposes (see CachingTokenFilter , TeeSinkTokenFilter). For this usecase CaptureState() and RestoreState(AttributeSource.State) can be used. The TokenStream -API in Lucene is based on the decorator pattern. Therefore all non-abstract subclasses must be sealed or have at least a sealed implementation of IncrementToken() ! This is checked when assertions are enabled. TokenStreamComponents This class encapsulates the outer components of a token stream. It provides access to the source ( Tokenizer ) and the outer end (sink), an instance of TokenFilter which also serves as the TokenStream returned by GetTokenStream(String, TextReader) . TokenStreamToAutomaton Consumes a TokenStream and creates an Automaton where the transition labels are UTF8 bytes (or Unicode code points if unicodeArcs is true) from the ITermToBytesRefAttribute . Between tokens we insert POS_SEP and for holes we insert HOLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces NumericTokenStream.INumericTermAttribute Expert: Use this attribute to get the details of the currently generated token. This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 4.0"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.html",
    "title": "Class NumericTokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericTokenStream Expert: this class provides a TokenStream for indexing numeric values that can be used by NumericRangeQuery or NumericRangeFilter . Note that for simple usage, Int32Field , Int64Field , SingleField or DoubleField is recommended. These fields disable norms and term freqs, as they are not usually needed during searching. If you need to change these settings, you should use this class. Here's an example usage, for an System.Int32 field: IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value), fieldType); document.Add(field); For optimal performance, re-use the TokenStream and Field instance for more than one document: NumericTokenStream stream = new NumericTokenStream(precisionStep); IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, stream, fieldType); Document document = new Document(); document.Add(field); for(all documents) { stream.SetInt32Value(value) writer.AddDocument(document); } this stream is not intended to be used in analyzers; it's more for iterating the different precisions during indexing a specific numeric value. NOTE : as token streams are only consumed once the document is added to the index, if you index more than one numeric field, use a separate NumericTokenStream instance for each. See NumericRangeQuery for more details on the precisionStep parameter as well as how numeric fields work under the hood. @since 2.9 Inheritance System.Object AttributeSource TokenStream NumericTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class NumericTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source NumericTokenStream() Creates a token stream for numeric values using the default Lucene.Net.Analysis.NumericTokenStream.precisionStep PRECISION_STEP_DEFAULT (4). The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream() | Improve this Doc View Source NumericTokenStream(AttributeSource.AttributeFactory, Int32) Expert: Creates a token stream for numeric values with the specified precisionStep using the given AttributeSource.AttributeFactory . The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream(AttributeSource.AttributeFactory factory, int precisionStep) Parameters Type Name Description AttributeSource.AttributeFactory factory System.Int32 precisionStep | Improve this Doc View Source NumericTokenStream(Int32) Creates a token stream for numeric values with the specified precisionStep . The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream(int precisionStep) Parameters Type Name Description System.Int32 precisionStep Fields | Improve this Doc View Source TOKEN_TYPE_FULL_PREC The full precision token gets this token type assigned. Declaration public const string TOKEN_TYPE_FULL_PREC = \"fullPrecNumeric\" Field Value Type Description System.String | Improve this Doc View Source TOKEN_TYPE_LOWER_PREC The lower precision tokens gets this token type assigned. Declaration public const string TOKEN_TYPE_LOWER_PREC = \"lowerPrecNumeric\" Field Value Type Description System.String Properties | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetDoubleValue(Double) Initializes the token stream with the supplied System.Double value. Declaration public NumericTokenStream SetDoubleValue(double value) Parameters Type Name Description System.Double value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetDoubleValue(value)) | Improve this Doc View Source SetInt32Value(Int32) Initializes the token stream with the supplied System.Int32 value. NOTE: This was setIntValue() in Lucene Declaration public NumericTokenStream SetInt32Value(int value) Parameters Type Name Description System.Int32 value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value)) | Improve this Doc View Source SetInt64Value(Int64) Initializes the token stream with the supplied System.Int64 value. NOTE: This was setLongValue() in Lucene Declaration public NumericTokenStream SetInt64Value(long value) Parameters Type Name Description System.Int64 value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetInt64Value(value)) | Improve this Doc View Source SetSingleValue(Single) Initializes the token stream with the supplied System.Single value. NOTE: This was setFloatValue() in Lucene Declaration public NumericTokenStream SetSingleValue(float value) Parameters Type Name Description System.Single value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetSingleValue(value)) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.INumericTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.INumericTermAttribute.html",
    "title": "Interface NumericTokenStream.INumericTermAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface NumericTokenStream.INumericTermAttribute Expert: Use this attribute to get the details of the currently generated token. This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 4.0 Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public interface INumericTermAttribute : IAttribute Properties | Improve this Doc View Source RawValue Returns current token's raw value as System.Int64 with all Shift applied, undefined before first token Declaration long RawValue { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Shift Returns current shift value, undefined before first token Declaration int Shift { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ValueSize Returns value size in bits (32 for System.Single , System.Int32 ; 64 for System.Double , System.Int64 ) Declaration int ValueSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IncShift() Don't call this method! This is a Lucene.NET INTERNAL API, use at your own risk Declaration int IncShift() Returns Type Description System.Int32 | Improve this Doc View Source Init(Int64, Int32, Int32, Int32) Don't call this method! This is a Lucene.NET INTERNAL API, use at your own risk Declaration void Init(long value, int valSize, int precisionStep, int shift) Parameters Type Name Description System.Int64 value System.Int32 valSize System.Int32 precisionStep System.Int32 shift"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.NumericTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.NumericTermAttribute.html",
    "title": "Class NumericTokenStream.NumericTermAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericTokenStream.NumericTermAttribute Implementation of NumericTokenStream.INumericTermAttribute . This is a Lucene.NET INTERNAL API, use at your own risk @since 4.0 Inheritance System.Object Attribute NumericTokenStream.NumericTermAttribute Implements NumericTokenStream.INumericTermAttribute ITermToBytesRefAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() 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.Analysis Assembly : Lucene.Net.dll Syntax public sealed class NumericTermAttribute : Attribute, NumericTokenStream.INumericTermAttribute, ITermToBytesRefAttribute, IAttribute Constructors | Improve this Doc View Source NumericTermAttribute() Creates, but does not yet initialize this attribute instance Declaration public NumericTermAttribute() See Also Init(Int64, Int32, Int32, Int32) Properties | Improve this Doc View Source BytesRef Declaration public BytesRef BytesRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source RawValue Declaration public long RawValue { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Shift Declaration public int Shift { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ValueSize Declaration public int ValueSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source FillBytesRef() Declaration public void FillBytesRef() | Improve this Doc View Source IncShift() Declaration public int IncShift() Returns Type Description System.Int32 | Improve this Doc View Source Init(Int64, Int32, Int32, Int32) Declaration public void Init(long value, int valueSize, int precisionStep, int shift) Parameters Type Name Description System.Int64 value System.Int32 valueSize System.Int32 precisionStep System.Int32 shift | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements NumericTokenStream.INumericTermAttribute ITermToBytesRefAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.ReusableStringReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.ReusableStringReader.html",
    "title": "Class ReusableStringReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReusableStringReader Internal class to enable reuse of the string reader by GetTokenStream(String, String) Inheritance System.Object System.MarshalByRefObject System.IO.TextReader ReusableStringReader Implements System.IDisposable Inherited Members System.IO.TextReader.Null System.IO.TextReader.Close() System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEndAsync() System.IO.TextReader.Synchronized(System.IO.TextReader) System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) 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.Analysis Assembly : Lucene.Net.dll Syntax public sealed class ReusableStringReader : TextReader, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.TextReader.Dispose(System.Boolean) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides System.IO.TextReader.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] c, int off, int len) Parameters Type Name Description System.Char [] c System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadToEnd() Declaration public override string ReadToEnd() Returns Type Description System.String Overrides System.IO.TextReader.ReadToEnd() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.ReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.ReuseStrategy.html",
    "title": "Class ReuseStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReuseStrategy Strategy defining how TokenStreamComponents are reused per call to GetTokenStream(String, TextReader) . Inheritance System.Object ReuseStrategy Analyzer.GlobalReuseStrategy Analyzer.PerFieldReuseStrategy 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.Analysis Assembly : Lucene.Net.dll Syntax public abstract class ReuseStrategy Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Gets the reusable TokenStreamComponents for the field with the given name. Declaration public abstract TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer Analyzer from which to get the reused components. Use GetStoredValue(Analyzer) and SetStoredValue(Analyzer, Object) to access the data on the Analyzer . System.String fieldName Name of the field whose reusable TokenStreamComponents are to be retrieved Returns Type Description TokenStreamComponents Reusable TokenStreamComponents for the field, or null if there was no previous components for the field | Improve this Doc View Source GetStoredValue(Analyzer) Returns the currently stored value. Declaration protected object GetStoredValue(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description System.Object Currently stored value or null if no value is stored Exceptions Type Condition System.ObjectDisposedException if the Analyzer is closed. | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Stores the given TokenStreamComponents as the reusable components for the field with the give name. Declaration public abstract void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer Analyzer System.String fieldName Name of the field whose TokenStreamComponents are being set TokenStreamComponents components TokenStreamComponents which are to be reused for the field | Improve this Doc View Source SetStoredValue(Analyzer, Object) Sets the stored value. Declaration protected void SetStoredValue(Analyzer analyzer, object storedValue) Parameters Type Name Description Analyzer analyzer Analyzer System.Object storedValue Value to store Exceptions Type Condition System.ObjectDisposedException if the Analyzer is closed."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Token.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Token A Token is an occurrence of a term from the text of a field. It consists of a term's text, the start and end offset of the term in the text of the field, and a type string. The start and end offsets permit applications to re-associate a token with its source text, e.g., to display highlighted query terms in a document browser, or to show matching text fragments in a KWIC (KeyWord In Context) display, etc. The type is a string, assigned by a lexical analyzer (a.k.a. tokenizer), naming the lexical or syntactic class that the token belongs to. For example an end of sentence marker token might be implemented with type \"eos\". The default token type is \"word\". A Token can optionally have metadata (a.k.a. payload) in the form of a variable length byte array. Use GetPayload() to retrieve the payloads from the index. NOTE: As of 2.9, Token implements all IAttribute interfaces that are part of core Lucene and can be found in the Lucene.Net.Analysis.TokenAttributes namespace. Even though it is not necessary to use Token anymore, with the new TokenStream API it can be used as convenience class that implements all IAttribute s, which is especially useful to easily switch from the old to the new TokenStream API. Tokenizer s and TokenFilter s should try to re-use a Token instance when possible for best performance, by implementing the IncrementToken() API. Failing that, to create a new Token you should first use one of the constructors that starts with null text. To load the token from a char[] use CopyBuffer(Char[], Int32, Int32) . To load from a System.String use SetEmpty() followed by Append(String) or Append(String, Int32, Int32) . Alternatively you can get the Token 's termBuffer by calling either Buffer , if you know that your text is shorter than the capacity of the termBuffer or ResizeBuffer(Int32) , if there is any possibility that you may need to grow the buffer. Fill in the characters of your term into this buffer, with System.String.ToCharArray(System.Int32,System.Int32) if loading from a string, or with System.Array.Copy(System.Array,System.Int32,System.Array,System.Int32,System.Int32) , and finally call SetLength(Int32) to set the length of the term text. See LUCENE-969 for details. Typical Token reuse patterns: Copying text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, startOffset, endOffset[, type]); Copying some text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, 0, string.Length, startOffset, endOffset[, type]); Copying text from char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, 0, buffer.Length, startOffset, endOffset[, type]); Copying some text from a char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, start, end - start, startOffset, endOffset[, type]); Copying from one one Token to another (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(source.Buffer, 0, source.Length, source.StartOffset, source.EndOffset[, source.Type]); A few things to note: Clear() initializes all of the fields to default values. this was changed in contrast to Lucene 2.4, but should affect no one. Because TokenStream s can be chained, one cannot assume that the Token 's current type is correct. The startOffset and endOffset represent the start and offset in the source text, so be careful in adjusting them. When caching a reusable token, clone it. When injecting a cached token into a stream that can be reset, clone it again. Please note: With Lucene 3.1, the ToString() method had to be changed to match the J2N.Text.ICharSequence interface introduced by the interface ICharTermAttribute . this method now only prints the term text, no additional information anymore. Inheritance System.Object Attribute CharTermAttribute Token Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute J2N.Text.IAppendable ITypeAttribute IPositionIncrementAttribute IFlagsAttribute IOffsetAttribute IPayloadAttribute IPositionLengthAttribute IAttribute Inherited Members CharTermAttribute.ICharSequence.HasValue CharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.Buffer CharTermAttribute.Buffer CharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.ICharTermAttribute.Length CharTermAttribute.ICharSequence.Length CharTermAttribute.Length CharTermAttribute.SetLength(Int32) CharTermAttribute.SetEmpty() CharTermAttribute.FillBytesRef() CharTermAttribute.BytesRef CharTermAttribute.ICharSequence.Item[Int32] CharTermAttribute.ICharTermAttribute.Item[Int32] CharTermAttribute.Item[Int32] CharTermAttribute.Subsequence(Int32, Int32) CharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.Append(Char) CharTermAttribute.Append(Char[]) CharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.Append(String) CharTermAttribute.Append(StringBuilder) CharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.Append(ICharSequence) CharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.ToString() CharTermAttribute.ICharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.ICharTermAttribute.SetLength(Int32) CharTermAttribute.ICharTermAttribute.SetEmpty() CharTermAttribute.ICharTermAttribute.Append(ICharSequence) CharTermAttribute.ICharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(Char) CharTermAttribute.ICharTermAttribute.Append(Char[]) CharTermAttribute.ICharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(String) CharTermAttribute.ICharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(StringBuilder) CharTermAttribute.ICharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.ICharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.IAppendable.Append(Char) CharTermAttribute.IAppendable.Append(String) CharTermAttribute.IAppendable.Append(String, Int32, Int32) CharTermAttribute.IAppendable.Append(StringBuilder) CharTermAttribute.IAppendable.Append(StringBuilder, Int32, Int32) CharTermAttribute.IAppendable.Append(Char[]) CharTermAttribute.IAppendable.Append(Char[], Int32, Int32) CharTermAttribute.IAppendable.Append(ICharSequence) CharTermAttribute.IAppendable.Append(ICharSequence, Int32, Int32) Attribute.ReflectAsString(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class Token : CharTermAttribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAppendable, ITypeAttribute, IPositionIncrementAttribute, IFlagsAttribute, IOffsetAttribute, IPayloadAttribute, IPositionLengthAttribute, IAttribute Constructors | Improve this Doc View Source Token() Constructs a Token will null text. Declaration public Token() | Improve this Doc View Source Token(Char[], Int32, Int32, Int32, Int32) Constructs a Token with the given term buffer (offset & length), start and end offsets Declaration public Token(char[] startTermBuffer, int termBufferOffset, int termBufferLength, int start, int end) Parameters Type Name Description System.Char [] startTermBuffer buffer containing term text System.Int32 termBufferOffset the index in the buffer of the first character System.Int32 termBufferLength number of valid characters in the buffer System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(Int32, Int32) Constructs a Token with null text and start & end offsets. Declaration public Token(int start, int end) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(Int32, Int32, Int32) Constructs a Token with null text and start & end offsets plus flags. NOTE: flags is EXPERIMENTAL. Declaration public Token(int start, int end, int flags) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.Int32 flags The bits to set for this token | Improve this Doc View Source Token(Int32, Int32, String) Constructs a Token with null text and start & end offsets plus the Token type. Declaration public Token(int start, int end, string typ) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.String typ the lexical type of this Token | Improve this Doc View Source Token(String, Int32, Int32) Constructs a Token with the given term text, and start & end offsets. The type defaults to \"word.\" NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(String, Int32, Int32, Int32) Constructs a Token with the given text, start and end offsets, & type. NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end, int flags) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.Int32 flags token type bits | Improve this Doc View Source Token(String, Int32, Int32, String) Constructs a Token with the given text, start and end offsets, & type. NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end, string typ) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.String typ token type Fields | Improve this Doc View Source TOKEN_ATTRIBUTE_FACTORY Convenience factory that returns Token as implementation for the basic attributes and return the default impl (with \"Impl\" appended) for all other attributes. @since 3.0 Declaration public static readonly AttributeSource.AttributeFactory TOKEN_ATTRIBUTE_FACTORY Field Value Type Description AttributeSource.AttributeFactory Properties | Improve this Doc View Source EndOffset Returns this Token 's ending offset, one greater than the position of the last character corresponding to this token in the source text. The length of the token in the source text is ( EndOffset - StartOffset ). Declaration public int EndOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) IOffsetAttribute | Improve this Doc View Source Flags Get the bitset for any bits that have been set. This is completely distinct from Type , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 See Also IFlagsAttribute | Improve this Doc View Source Payload Gets or Sets this Token 's payload. Declaration public virtual BytesRef Payload { get; set; } Property Value Type Description BytesRef See Also IPayloadAttribute | Improve this Doc View Source PositionIncrement Gets or Sets the position increment (the distance from the prior term). The default value is one. Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to a negative value. See Also IPositionIncrementAttribute | Improve this Doc View Source PositionLength Gets or Sets the position length of this Token (how many positions this token spans). The default value is one. Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to zero or negative. See Also IPositionLengthAttribute | Improve this Doc View Source StartOffset Returns this Token 's starting offset, the position of the first character corresponding to this token in the source text. Note that the difference between EndOffset and StartOffset may not be equal to termText.Length, as the term text may have been altered by a stemmer or some other filter. Declaration public int StartOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) IOffsetAttribute | Improve this Doc View Source Type Gets or Sets this Token 's lexical type. Defaults to \"word\". Declaration public string Type { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Resets the term text, payload, flags, and positionIncrement, startOffset, endOffset and token type to default. Declaration public override void Clear() Overrides CharTermAttribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides CharTermAttribute.Clone() | Improve this Doc View Source Clone(Char[], Int32, Int32, Int32, Int32) Makes a clone, but replaces the term buffer & start/end offset in the process. This is more efficient than doing a full clone (and then calling CopyBuffer(Char[], Int32, Int32) ) because it saves a wasted copy of the old termBuffer. Declaration public virtual Token Clone(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides CharTermAttribute.CopyTo(IAttribute) | 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 CharTermAttribute.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides CharTermAttribute.GetHashCode() | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides CharTermAttribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source Reinit(Token) Copy the prototype token's fields into this one. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype) Parameters Type Name Description Token prototype source Token to copy fields from | Improve this Doc View Source Reinit(Token, Char[], Int32, Int32) Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype, char[] newTermBuffer, int offset, int length) Parameters Type Name Description Token prototype existing Token System.Char [] newTermBuffer buffer containing new term text System.Int32 offset the index in the buffer of the first character System.Int32 length number of valid characters in the buffer | Improve this Doc View Source Reinit(Token, String) Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype, string newTerm) Parameters Type Name Description Token prototype existing Token System.String newTerm new term text | Improve this Doc View Source Reinit(Char[], Int32, Int32, Int32, Int32) Shorthand for calling Clear() , CopyBuffer(Char[], Int32, Int32) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(Char[], Int32, Int32, Int32, Int32, String) Shorthand for calling Clear() , CopyBuffer(Char[], Int32, Int32) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32) Shorthand for calling Clear() , Append(String) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(string newTerm, int newStartOffset, int newEndOffset) Parameters Type Name Description System.String newTerm System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, Int32, Int32) Shorthand for calling Clear() , Append(String, Int32, Int32) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(string newTerm, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.String newTerm System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, Int32, Int32, String) Shorthand for calling Clear() , Append(String, Int32, Int32) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(string newTerm, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.String newTerm System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, String) Shorthand for calling Clear() , Append(String) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(string newTerm, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.String newTerm System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source SetOffset(Int32, Int32) Set the starting and ending offset. Declaration public virtual void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Exceptions Type Condition System.ArgumentException If startOffset or endOffset are negative, or if startOffset is greater than endOffset See Also StartOffset EndOffset IOffsetAttribute Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute J2N.Text.IAppendable ITypeAttribute IPositionIncrementAttribute IFlagsAttribute IOffsetAttribute IPayloadAttribute IPositionLengthAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Token.TokenAttributeFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Token.TokenAttributeFactory.html",
    "title": "Class Token.TokenAttributeFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Token.TokenAttributeFactory Expert: Creates a Token.TokenAttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. @since 3.0 Inheritance System.Object AttributeSource.AttributeFactory Token.TokenAttributeFactory Inherited Members AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY 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.Analysis Assembly : Lucene.Net.dll Syntax public sealed class TokenAttributeFactory : AttributeSource.AttributeFactory Constructors | Improve this Doc View Source TokenAttributeFactory(AttributeSource.AttributeFactory) Expert : Creates an AttributeSource.AttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. Declaration public TokenAttributeFactory(AttributeSource.AttributeFactory delegate) Parameters Type Name Description AttributeSource.AttributeFactory delegate Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Overrides AttributeSource.AttributeFactory.CreateAttributeInstance<T>() | 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()"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.CharTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.CharTermAttribute.html",
    "title": "Class CharTermAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharTermAttribute Default implementation of ICharTermAttribute . Inheritance System.Object Attribute CharTermAttribute Token Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute IAttribute J2N.Text.IAppendable Inherited Members Attribute.ReflectAsString(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class CharTermAttribute : Attribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAttribute, IAppendable Constructors | Improve this Doc View Source CharTermAttribute() Initialize this attribute with empty term text Declaration public CharTermAttribute() Properties | Improve this Doc View Source Buffer Declaration public char[] Buffer { get; } Property Value Type Description System.Char [] | Improve this Doc View Source BytesRef Declaration public virtual BytesRef BytesRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharSequence) Declaration public CharTermAttribute Append(ICharSequence value) Parameters Type Name Description J2N.Text.ICharSequence value Returns Type Description CharTermAttribute | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Declaration public CharTermAttribute Append(ICharSequence value, int startIndex, int charCount) Parameters Type Name Description J2N.Text.ICharSequence value System.Int32 startIndex System.Int32 charCount Returns Type Description CharTermAttribute | Improve this Doc View Source Append(ICharTermAttribute) Declaration public CharTermAttribute Append(ICharTermAttribute value) Parameters Type Name Description ICharTermAttribute value Returns Type Description CharTermAttribute | Improve this Doc View Source Append(Char) Declaration public CharTermAttribute Append(char value) Parameters Type Name Description System.Char value Returns Type Description CharTermAttribute | Improve this Doc View Source Append(Char[]) Declaration public CharTermAttribute Append(char[] value) Parameters Type Name Description System.Char [] value Returns Type Description CharTermAttribute | Improve this Doc View Source Append(Char[], Int32, Int32) Declaration public CharTermAttribute Append(char[] value, int startIndex, int charCount) Parameters Type Name Description System.Char [] value System.Int32 startIndex System.Int32 charCount Returns Type Description CharTermAttribute | Improve this Doc View Source Append(String) Declaration public CharTermAttribute Append(string value) Parameters Type Name Description System.String value Returns Type Description CharTermAttribute | Improve this Doc View Source Append(String, Int32, Int32) Declaration public CharTermAttribute Append(string value, int startIndex, int charCount) Parameters Type Name Description System.String value System.Int32 startIndex System.Int32 charCount Returns Type Description CharTermAttribute | Improve this Doc View Source Append(StringBuilder) Declaration public CharTermAttribute Append(StringBuilder value) Parameters Type Name Description System.Text.StringBuilder value Returns Type Description CharTermAttribute | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Declaration public CharTermAttribute Append(StringBuilder value, int startIndex, int charCount) Parameters Type Name Description System.Text.StringBuilder value System.Int32 startIndex System.Int32 charCount Returns Type Description CharTermAttribute | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyBuffer(Char[], Int32, Int32) Declaration public void CopyBuffer(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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 FillBytesRef() Declaration public virtual void FillBytesRef() | 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 ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source ResizeBuffer(Int32) Declaration public char[] ResizeBuffer(int newSize) Parameters Type Name Description System.Int32 newSize Returns Type Description System.Char [] | Improve this Doc View Source SetEmpty() Declaration public CharTermAttribute SetEmpty() Returns Type Description CharTermAttribute | Improve this Doc View Source SetLength(Int32) Declaration public CharTermAttribute SetLength(int length) Parameters Type Name Description System.Int32 length Returns Type Description CharTermAttribute | Improve this Doc View Source Subsequence(Int32, Int32) Declaration public ICharSequence Subsequence(int startIndex, int length) Parameters Type Name Description System.Int32 startIndex System.Int32 length Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source ToString() Returns solely the term text as specified by the J2N.Text.ICharSequence interface. this method changed the behavior with Lucene 3.1, before it returned a String representation of the whole term with all attributes. this affects especially the Token subclass. Declaration public override string ToString() Returns Type Description System.String Overrides Attribute.ToString() Explicit Interface Implementations | Improve this Doc View Source IAppendable.Append(ICharSequence) Declaration IAppendable IAppendable.Append(ICharSequence value) Parameters Type Name Description J2N.Text.ICharSequence value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(ICharSequence, Int32, Int32) Declaration IAppendable IAppendable.Append(ICharSequence value, int startIndex, int count) Parameters Type Name Description J2N.Text.ICharSequence value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(Char) Declaration IAppendable IAppendable.Append(char value) Parameters Type Name Description System.Char value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(Char[]) Declaration IAppendable IAppendable.Append(char[] value) Parameters Type Name Description System.Char [] value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(Char[], Int32, Int32) Declaration IAppendable IAppendable.Append(char[] value, int startIndex, int count) Parameters Type Name Description System.Char [] value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(String) Declaration IAppendable IAppendable.Append(string value) Parameters Type Name Description System.String value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(String, Int32, Int32) Declaration IAppendable IAppendable.Append(string value, int startIndex, int count) Parameters Type Name Description System.String value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(StringBuilder) Declaration IAppendable IAppendable.Append(StringBuilder value) Parameters Type Name Description System.Text.StringBuilder value Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source IAppendable.Append(StringBuilder, Int32, Int32) Declaration IAppendable IAppendable.Append(StringBuilder value, int startIndex, int count) Parameters Type Name Description System.Text.StringBuilder value System.Int32 startIndex System.Int32 count Returns Type Description J2N.Text.IAppendable | Improve this Doc View Source ICharSequence.HasValue Declaration bool ICharSequence.HasValue { get; } Returns Type Description System.Boolean | Improve this Doc View Source ICharSequence.Item[Int32] Declaration char ICharSequence.this[int index] { get; } Parameters Type Name Description System.Int32 index Returns Type Description System.Char | Improve this Doc View Source ICharSequence.Length Declaration int ICharSequence.Length { get; } Returns Type Description System.Int32 | Improve this Doc View Source ICharTermAttribute.Append(ICharSequence) Declaration ICharTermAttribute ICharTermAttribute.Append(ICharSequence value) Parameters Type Name Description J2N.Text.ICharSequence value Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(ICharSequence, Int32, Int32) Declaration ICharTermAttribute ICharTermAttribute.Append(ICharSequence value, int startIndex, int count) Parameters Type Name Description J2N.Text.ICharSequence value System.Int32 startIndex System.Int32 count Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(ICharTermAttribute) Declaration ICharTermAttribute ICharTermAttribute.Append(ICharTermAttribute value) Parameters Type Name Description ICharTermAttribute value Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(Char) Declaration ICharTermAttribute ICharTermAttribute.Append(char value) Parameters Type Name Description System.Char value Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(Char[]) Declaration ICharTermAttribute ICharTermAttribute.Append(char[] value) Parameters Type Name Description System.Char [] value Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(Char[], Int32, Int32) Declaration ICharTermAttribute ICharTermAttribute.Append(char[] value, int startIndex, int count) Parameters Type Name Description System.Char [] value System.Int32 startIndex System.Int32 count Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(String) Declaration ICharTermAttribute ICharTermAttribute.Append(string value) Parameters Type Name Description System.String value Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(String, Int32, Int32) Declaration ICharTermAttribute ICharTermAttribute.Append(string value, int startIndex, int count) Parameters Type Name Description System.String value System.Int32 startIndex System.Int32 count Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(StringBuilder) Declaration ICharTermAttribute ICharTermAttribute.Append(StringBuilder value) Parameters Type Name Description System.Text.StringBuilder value Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Append(StringBuilder, Int32, Int32) Declaration ICharTermAttribute ICharTermAttribute.Append(StringBuilder value, int startIndex, int count) Parameters Type Name Description System.Text.StringBuilder value System.Int32 startIndex System.Int32 count Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.Buffer Declaration char[] ICharTermAttribute.Buffer { get; } Returns Type Description System.Char [] | Improve this Doc View Source ICharTermAttribute.CopyBuffer(Char[], Int32, Int32) Declaration void ICharTermAttribute.CopyBuffer(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length | Improve this Doc View Source ICharTermAttribute.Item[Int32] Declaration char ICharTermAttribute.this[int index] { get; set; } Parameters Type Name Description System.Int32 index Returns Type Description System.Char | Improve this Doc View Source ICharTermAttribute.Length Declaration int ICharTermAttribute.Length { get; set; } Returns Type Description System.Int32 | Improve this Doc View Source ICharTermAttribute.ResizeBuffer(Int32) Declaration char[] ICharTermAttribute.ResizeBuffer(int newSize) Parameters Type Name Description System.Int32 newSize Returns Type Description System.Char [] | Improve this Doc View Source ICharTermAttribute.SetEmpty() Declaration ICharTermAttribute ICharTermAttribute.SetEmpty() Returns Type Description ICharTermAttribute | Improve this Doc View Source ICharTermAttribute.SetLength(Int32) Declaration ICharTermAttribute ICharTermAttribute.SetLength(int length) Parameters Type Name Description System.Int32 length Returns Type Description ICharTermAttribute Implements ICharTermAttribute J2N.Text.ICharSequence ITermToBytesRefAttribute IAttribute J2N.Text.IAppendable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.FlagsAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.FlagsAttribute.html",
    "title": "Class FlagsAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FlagsAttribute Default implementation of IFlagsAttribute . Inheritance System.Object Attribute FlagsAttribute Implements IFlagsAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class FlagsAttribute : Attribute, IFlagsAttribute, IAttribute Constructors | Improve this Doc View Source FlagsAttribute() Initialize this attribute with no bits set Declaration public FlagsAttribute() Properties | Improve this Doc View Source Flags Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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() Implements IFlagsAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.TokenAttributes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.TokenAttributes <!-- 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. --> General-purpose attributes for text analysis. Classes CharTermAttribute Default implementation of ICharTermAttribute . FlagsAttribute Default implementation of IFlagsAttribute . KeywordAttribute Default implementation of IKeywordAttribute . OffsetAttribute Default implementation of IOffsetAttribute . PayloadAttribute Default implementation of IPayloadAttribute . PositionIncrementAttribute Default implementation of IPositionIncrementAttribute . PositionLengthAttribute Default implementation of IPositionLengthAttribute . TypeAttribute Default implementation of ITypeAttribute . Interfaces ICharTermAttribute The term text of a Token . IFlagsAttribute This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter to another one. This is completely distinct from TypeAttribute , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk While we think this is here to stay, we may want to change it to be a long. IKeywordAttribute This attribute can be used to mark a token as a keyword. Keyword aware TokenStream s can decide to modify a token based on the return value of IsKeyword if the token is modified. Stemming filters for instance can use this attribute to conditionally skip a term if IsKeyword returns true . IOffsetAttribute The start and end character offset of a Token . IPayloadAttribute The payload of a Token. The payload is stored in the index at each position, and can be used to influence scoring when using Payload-based queries in the Lucene.Net.Search.Payloads and Lucene.Net.Search.Spans namespaces. NOTE: because the payload will be stored at each position, its usually best to use the minimum number of bytes necessary. Some codec implementations may optimize payload storage when all payloads have the same length. IPositionIncrementAttribute Determines the position of this token relative to the previous Token in a TokenStream , used in phrase searching. The default value is one. Some common uses for this are: Set it to zero to put multiple terms in the same position. this is useful if, e.g., a word has multiple stems. Searches for phrases including either stem will match. In this case, all but the first stem's increment should be set to zero: the increment of the first instance should be one. Repeating a token with an increment of zero can also be used to boost the scores of matches on that token. Set it to values greater than one to inhibit exact phrase matches. If, for example, one does not want phrases to match across removed stop words, then one could build a stop word filter that removes stop words and also sets the increment to the number of stop words removed before each non-stop word. Then exact phrase queries will only match when the terms occur with no intervening stop words. IPositionLengthAttribute Determines how many positions this token spans. Very few analyzer components actually produce this attribute, and indexing ignores it, but it's useful to express the graph structure naturally produced by decompounding, word splitting/joining, synonym filtering, etc. NOTE: this is optional, and most analyzers don't change the default value (1). ITermToBytesRefAttribute This attribute is requested by TermsHashPerField to index the contents. This attribute can be used to customize the final byte[] encoding of terms. Consumers of this attribute call BytesRef up-front, and then invoke FillBytesRef() for each term. Example: TermToBytesRefAttribute termAtt = tokenStream.GetAttribute<TermToBytesRefAttribute>; BytesRef bytes = termAtt.BytesRef; while (tokenStream.IncrementToken() { // you must call termAtt.FillBytesRef() before doing something with the bytes. // this encodes the term value (internally it might be a char[], etc) into the bytes. int hashCode = termAtt.FillBytesRef(); if (IsInteresting(bytes)) { // because the bytes are reused by the attribute (like CharTermAttribute's char[] buffer), // you should make a copy if you need persistent access to the bytes, otherwise they will // be rewritten across calls to IncrementToken() DoSomethingWith(new BytesRef(bytes)); } } ... This is a Lucene.NET EXPERIMENTAL API, use at your own risk this is a very expert API, please use CharTermAttribute and its implementation of this method for UTF-8 terms. ITypeAttribute A Token 's lexical type. The Default value is \"word\"."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute.html",
    "title": "Interface ICharTermAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICharTermAttribute The term text of a Token . Inherited Members IAttribute.CopyTo(IAttribute) J2N.Text.ICharSequence.Subsequence(System.Int32, System.Int32) J2N.Text.ICharSequence.ToString() J2N.Text.ICharSequence.HasValue Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ICharTermAttribute : IAttribute, ICharSequence, IAppendable Properties | Improve this Doc View Source Buffer Returns the internal termBuffer character array which you can then directly alter. If the array is too small for your token, use ResizeBuffer(Int32) to increase it. After altering the buffer be sure to call SetLength(Int32) to record the number of valid characters that were placed into the termBuffer. NOTE : The returned buffer may be larger than the valid Length . Declaration char[] Buffer { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Item[Int32] Declaration char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Gets or Sets the number of valid characters (in the termBuffer array. SetLength(Int32) Declaration int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharSequence) Appends the contents of the J2N.Text.ICharSequence to this character sequence. The characters of the J2N.Text.ICharSequence argument are appended, in order, increasing the length of this sequence by the length of the argument. If value is null , this method is a no-op. IMPORTANT: This method uses .NET semantics. In Lucene, a null value would append the string \"null\" to the instance, but in Lucene.NET a null value will be ignored. Declaration ICharTermAttribute Append(ICharSequence value) Parameters Type Name Description J2N.Text.ICharSequence value Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Appends the a string representation of the specified J2N.Text.ICharSequence to this instance. The characters of the J2N.Text.ICharSequence argument are appended, in order, increasing the length of this sequence by the length of count . If value is null and startIndex and count are not 0, an System.ArgumentNullException is thrown. Declaration ICharTermAttribute Append(ICharSequence value, int startIndex, int count) Parameters Type Name Description J2N.Text.ICharSequence value The sequence of characters to append. System.Int32 startIndex The start index of the J2N.Text.ICharSequence to begin copying characters. System.Int32 count The number of characters to append. Returns Type Description ICharTermAttribute Exceptions Type Condition System.ArgumentNullException value is null , and startIndex and count are not zero. System.ArgumentOutOfRangeException count is less than zero. -or- startIndex is less than zero. -or- startIndex + count is greater than the length of value . | Improve this Doc View Source Append(ICharTermAttribute) Appends the contents of the other ICharTermAttribute to this character sequence. The characters of the ICharTermAttribute argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , this method is a no-op. This method uses .NET semantics. In Lucene, a null value would append the string \"null\" to the instance, but in Lucene.NET a null value will be safely ignored. Declaration ICharTermAttribute Append(ICharTermAttribute value) Parameters Type Name Description ICharTermAttribute value The sequence of characters to append. Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char) Appends the supplied System.Char to this character sequence. Declaration ICharTermAttribute Append(char value) Parameters Type Name Description System.Char value The System.Char to append. Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char[]) Appends the contents of the char[] array to this character sequence. The characters of the char[] argument are appended, in order, increasing the length of this sequence by the length of the value . If value is null , this method is a no-op. This method uses .NET semantics. In Lucene, a null value would append the string \"null\" to the instance, but in Lucene.NET a null value will be safely ignored. Declaration ICharTermAttribute Append(char[] value) Parameters Type Name Description System.Char [] value The char[] array to append. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added to simulate using the CharBuffer class in Java. | Improve this Doc View Source Append(Char[], Int32, Int32) Appends the string representation of the char[] array to this instance. The characters of the char[] argument are appended, in order, increasing the length of this sequence by the length of the value . If value is null and startIndex and count are not 0, an System.ArgumentNullException is thrown. Declaration ICharTermAttribute Append(char[] value, int startIndex, int count) Parameters Type Name Description System.Char [] value The sequence of characters to append. System.Int32 startIndex The start index of the char[] to begin copying characters. System.Int32 count The number of characters to append. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added to simulate using the CharBuffer class in Java. Note that the CopyBuffer(Char[], Int32, Int32) method provides similar functionality. Exceptions Type Condition System.ArgumentNullException value is null , and startIndex and count are not zero. System.ArgumentOutOfRangeException count is less than zero. -or- startIndex is less than zero. -or- startIndex + count is greater than the length of value . | Improve this Doc View Source Append(String) Appends the specified System.String to this character sequence. The characters of the System.String argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , this method is a no-op. This method uses .NET semantics. In Lucene, a null value would append the string \"null\" to the instance, but in Lucene.NET a null value will be safely ignored. Declaration ICharTermAttribute Append(string value) Parameters Type Name Description System.String value The sequence of characters to append. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET System.String data type doesn't implement J2N.Text.ICharSequence . | Improve this Doc View Source Append(String, Int32, Int32) Appends the contents of the System.String to this character sequence. The characters of the System.String argument are appended, in order, increasing the length of this sequence by the length of value . If value is null and startIndex and count are not 0, an System.ArgumentNullException is thrown. Declaration ICharTermAttribute Append(string value, int startIndex, int count) Parameters Type Name Description System.String value The sequence of characters to append. System.Int32 startIndex The start index of the System.String to begin copying characters. System.Int32 count The number of characters to append. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET System.String data type doesn't implement J2N.Text.ICharSequence . Exceptions Type Condition System.ArgumentNullException value is null , and startIndex and count are not zero. System.ArgumentOutOfRangeException count is less than zero. -or- startIndex is less than zero. -or- startIndex + count is greater than the length of value . | Improve this Doc View Source Append(StringBuilder) Appends a string representation of the specified System.Text.StringBuilder to this character sequence. The characters of the System.Text.StringBuilder argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , this method is a no-op. This method uses .NET semantics. In Lucene, a null value would append the string \"null\" to the instance, but in Lucene.NET a null value will be safely ignored. Declaration ICharTermAttribute Append(StringBuilder value) Parameters Type Name Description System.Text.StringBuilder value Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Appends a string representation of the specified System.Text.StringBuilder to this character sequence. The characters of the System.Text.StringBuilder argument are appended, in order, increasing the length of this sequence by the length of the argument. If value is null and startIndex and count are not 0, an System.ArgumentNullException is thrown. Declaration ICharTermAttribute Append(StringBuilder value, int startIndex, int count) Parameters Type Name Description System.Text.StringBuilder value The sequence of characters to append. System.Int32 startIndex The start index of the System.Text.StringBuilder to begin copying characters. System.Int32 count The number of characters to append. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET System.Text.StringBuilder data type doesn't implement J2N.Text.ICharSequence . Exceptions Type Condition System.ArgumentNullException value is null , and startIndex and count are not zero. System.ArgumentOutOfRangeException count is less than zero. -or- startIndex is less than zero. -or- startIndex + count is greater than the length of value . | Improve this Doc View Source CopyBuffer(Char[], Int32, Int32) Copies the contents of buffer, starting at offset for length characters, into the termBuffer array. Declaration void CopyBuffer(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer the buffer to copy System.Int32 offset the index in the buffer of the first character to copy System.Int32 length the number of characters to copy | Improve this Doc View Source ResizeBuffer(Int32) Grows the termBuffer to at least size newSize , preserving the existing content. Declaration char[] ResizeBuffer(int newSize) Parameters Type Name Description System.Int32 newSize minimum size of the new termBuffer Returns Type Description System.Char [] newly created termBuffer with length >= newSize | Improve this Doc View Source SetEmpty() Sets the length of the termBuffer to zero. Use this method before appending contents. Declaration ICharTermAttribute SetEmpty() Returns Type Description ICharTermAttribute | Improve this Doc View Source SetLength(Int32) Set number of valid characters (length of the term) in the termBuffer array. Use this to truncate the termBuffer or to synchronize with external manipulation of the termBuffer. Note: to grow the size of the array, use ResizeBuffer(Int32) first. NOTE: This is exactly the same operation as calling the Length setter, the primary difference is that this method returns a reference to the current object so it can be chained. obj.SetLength(30).Append(\"hey you\"); Declaration ICharTermAttribute SetLength(int length) Parameters Type Name Description System.Int32 length the truncated length Returns Type Description ICharTermAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IFlagsAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IFlagsAttribute.html",
    "title": "Interface IFlagsAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFlagsAttribute This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter to another one. This is completely distinct from TypeAttribute , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk While we think this is here to stay, we may want to change it to be a long. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IFlagsAttribute : IAttribute Properties | Improve this Doc View Source Flags Get the bitset for any bits that have been set. This is completely distinct from Type , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. Declaration int Flags { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IKeywordAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IKeywordAttribute.html",
    "title": "Interface IKeywordAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IKeywordAttribute This attribute can be used to mark a token as a keyword. Keyword aware TokenStream s can decide to modify a token based on the return value of IsKeyword if the token is modified. Stemming filters for instance can use this attribute to conditionally skip a term if IsKeyword returns true . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IKeywordAttribute : IAttribute Properties | Improve this Doc View Source IsKeyword Gets or Sets whether the current token is a keyword. true if the current token is a keyword, otherwise false . Declaration bool IsKeyword { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IOffsetAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IOffsetAttribute.html",
    "title": "Interface IOffsetAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IOffsetAttribute The start and end character offset of a Token . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IOffsetAttribute : IAttribute Properties | Improve this Doc View Source EndOffset Returns this Token 's ending offset, one greater than the position of the last character corresponding to this token in the source text. The length of the token in the source text is ( EndOffset - StartOffset ). Declaration int EndOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) | Improve this Doc View Source StartOffset Returns this Token 's starting offset, the position of the first character corresponding to this token in the source text. Note that the difference between EndOffset and StartOffset may not be equal to termText.Length, as the term text may have been altered by a stemmer or some other filter. Declaration int StartOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) Methods | Improve this Doc View Source SetOffset(Int32, Int32) Set the starting and ending offset. Declaration void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Exceptions Type Condition System.ArgumentException If startOffset or endOffset are negative, or if startOffset is greater than endOffset See Also StartOffset EndOffset"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPayloadAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPayloadAttribute.html",
    "title": "Interface IPayloadAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPayloadAttribute The payload of a Token. The payload is stored in the index at each position, and can be used to influence scoring when using Payload-based queries in the Lucene.Net.Search.Payloads and Lucene.Net.Search.Spans namespaces. NOTE: because the payload will be stored at each position, its usually best to use the minimum number of bytes necessary. Some codec implementations may optimize payload storage when all payloads have the same length. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPayloadAttribute : IAttribute Properties | Improve this Doc View Source Payload Gets or Sets this Token 's payload. Declaration BytesRef Payload { get; set; } Property Value Type Description BytesRef See Also DocsAndPositionsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionIncrementAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionIncrementAttribute.html",
    "title": "Interface IPositionIncrementAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPositionIncrementAttribute Determines the position of this token relative to the previous Token in a TokenStream , used in phrase searching. The default value is one. Some common uses for this are: Set it to zero to put multiple terms in the same position. this is useful if, e.g., a word has multiple stems. Searches for phrases including either stem will match. In this case, all but the first stem's increment should be set to zero: the increment of the first instance should be one. Repeating a token with an increment of zero can also be used to boost the scores of matches on that token. Set it to values greater than one to inhibit exact phrase matches. If, for example, one does not want phrases to match across removed stop words, then one could build a stop word filter that removes stop words and also sets the increment to the number of stop words removed before each non-stop word. Then exact phrase queries will only match when the terms occur with no intervening stop words. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPositionIncrementAttribute : IAttribute Properties | Improve this Doc View Source PositionIncrement Gets or Sets the position increment (the distance from the prior term). The default value is one. Declaration int PositionIncrement { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to a negative value. See Also DocsAndPositionsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionLengthAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionLengthAttribute.html",
    "title": "Interface IPositionLengthAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPositionLengthAttribute Determines how many positions this token spans. Very few analyzer components actually produce this attribute, and indexing ignores it, but it's useful to express the graph structure naturally produced by decompounding, word splitting/joining, synonym filtering, etc. NOTE: this is optional, and most analyzers don't change the default value (1). Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPositionLengthAttribute : IAttribute Properties | Improve this Doc View Source PositionLength Gets or Sets the position length of this Token (how many positions this token spans). The default value is one. Declaration int PositionLength { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to zero or negative."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITermToBytesRefAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITermToBytesRefAttribute.html",
    "title": "Interface ITermToBytesRefAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITermToBytesRefAttribute This attribute is requested by TermsHashPerField to index the contents. This attribute can be used to customize the final byte[] encoding of terms. Consumers of this attribute call BytesRef up-front, and then invoke FillBytesRef() for each term. Example: TermToBytesRefAttribute termAtt = tokenStream.GetAttribute<TermToBytesRefAttribute>; BytesRef bytes = termAtt.BytesRef; while (tokenStream.IncrementToken() { // you must call termAtt.FillBytesRef() before doing something with the bytes. // this encodes the term value (internally it might be a char[], etc) into the bytes. int hashCode = termAtt.FillBytesRef(); if (IsInteresting(bytes)) { // because the bytes are reused by the attribute (like CharTermAttribute's char[] buffer), // you should make a copy if you need persistent access to the bytes, otherwise they will // be rewritten across calls to IncrementToken() DoSomethingWith(new BytesRef(bytes)); } } ... This is a Lucene.NET EXPERIMENTAL API, use at your own risk this is a very expert API, please use CharTermAttribute and its implementation of this method for UTF-8 terms. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ITermToBytesRefAttribute : IAttribute Properties | Improve this Doc View Source BytesRef Retrieve this attribute's BytesRef . The bytes are updated from the current term when the consumer calls FillBytesRef() . Declaration BytesRef BytesRef { get; } Property Value Type Description BytesRef this IAttribute s internal BytesRef . Methods | Improve this Doc View Source FillBytesRef() Updates the bytes BytesRef to contain this term's final encoding. Declaration void FillBytesRef()"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITypeAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITypeAttribute.html",
    "title": "Interface ITypeAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITypeAttribute A Token 's lexical type. The Default value is \"word\". Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ITypeAttribute : IAttribute Properties | Improve this Doc View Source Type Gets or Sets the lexical type. Declaration string Type { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.KeywordAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.KeywordAttribute.html",
    "title": "Class KeywordAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeywordAttribute Default implementation of IKeywordAttribute . Inheritance System.Object Attribute KeywordAttribute Implements IKeywordAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public sealed class KeywordAttribute : Attribute, IKeywordAttribute, IAttribute Constructors | Improve this Doc View Source KeywordAttribute() Initialize this attribute with the keyword value as false. Declaration public KeywordAttribute() Properties | Improve this Doc View Source IsKeyword Declaration public bool IsKeyword { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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() Implements IKeywordAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.OffsetAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.OffsetAttribute.html",
    "title": "Class OffsetAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OffsetAttribute Default implementation of IOffsetAttribute . Inheritance System.Object Attribute OffsetAttribute Implements IOffsetAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class OffsetAttribute : Attribute, IOffsetAttribute, IAttribute Constructors | Improve this Doc View Source OffsetAttribute() Initialize this attribute with startOffset and endOffset of 0. Declaration public OffsetAttribute() Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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 SetOffset(Int32, Int32) Declaration public virtual void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Implements IOffsetAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PayloadAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PayloadAttribute.html",
    "title": "Class PayloadAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadAttribute Default implementation of IPayloadAttribute . Inheritance System.Object Attribute PayloadAttribute Implements IPayloadAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PayloadAttribute : Attribute, IPayloadAttribute, IAttribute Constructors | Improve this Doc View Source PayloadAttribute() Initialize this attribute with no payload. Declaration public PayloadAttribute() | Improve this Doc View Source PayloadAttribute(BytesRef) Initialize this attribute with the given payload. Declaration public PayloadAttribute(BytesRef payload) Parameters Type Name Description BytesRef payload Properties | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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() Implements IPayloadAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionIncrementAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionIncrementAttribute.html",
    "title": "Class PositionIncrementAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PositionIncrementAttribute Default implementation of IPositionIncrementAttribute . Inheritance System.Object Attribute PositionIncrementAttribute Implements IPositionIncrementAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PositionIncrementAttribute : Attribute, IPositionIncrementAttribute, IAttribute Constructors | Improve this Doc View Source PositionIncrementAttribute() Initialize this attribute with position increment of 1 Declaration public PositionIncrementAttribute() Properties | Improve this Doc View Source PositionIncrement Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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() Implements IPositionIncrementAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionLengthAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionLengthAttribute.html",
    "title": "Class PositionLengthAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PositionLengthAttribute Default implementation of IPositionLengthAttribute . Inheritance System.Object Attribute PositionLengthAttribute Implements IPositionLengthAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PositionLengthAttribute : Attribute, IPositionLengthAttribute, IAttribute Constructors | Improve this Doc View Source PositionLengthAttribute() Initializes this attribute with position length of 1. Declaration public PositionLengthAttribute() Properties | Improve this Doc View Source PositionLength Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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() Implements IPositionLengthAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.TypeAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.TypeAttribute.html",
    "title": "Class TypeAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TypeAttribute Default implementation of ITypeAttribute . Inheritance System.Object Attribute TypeAttribute Implements ITypeAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class TypeAttribute : Attribute, ITypeAttribute, IAttribute Constructors | Improve this Doc View Source TypeAttribute() Initialize this attribute with DEFAULT_TYPE Declaration public TypeAttribute() | Improve this Doc View Source TypeAttribute(String) Initialize this attribute with type Declaration public TypeAttribute(string type) Parameters Type Name Description System.String type Fields | Improve this Doc View Source DEFAULT_TYPE the default type Declaration public const string DEFAULT_TYPE = \"word\" Field Value Type Description System.String Properties | Improve this Doc View Source Type Declaration public virtual string Type { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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() Implements ITypeAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenFilter.html",
    "title": "Class TokenFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenFilter A TokenFilter is a TokenStream whose input is another TokenStream . This is an abstract class; subclasses must override IncrementToken() . Inheritance System.Object AttributeSource TokenStream TokenFilter CachingTokenFilter Implements System.IDisposable Inherited Members TokenStream.IncrementToken() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class TokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source TokenFilter(TokenStream) Construct a token stream filtering the given input. Declaration protected TokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Fields | Improve this Doc View Source m_input The source of tokens for this filter. Declaration protected readonly TokenStream m_input Field Value Type Description TokenStream Methods | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on reuse). NOTE: The default implementation chains the call to the input TokenStream, so be sure to call base.Dispose(disposing) when overriding this method. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) | Improve this Doc View Source End() This method is called by the consumer after the last token has been consumed, after IncrementToken() returned false (using the new TokenStream API). Streams implementing the old API should upgrade to use this feature. This method can be used to perform any end-of-stream operations, such as setting the final offset of a stream. The final offset of a stream might differ from the offset of the last token eg in case one or more whitespaces followed after the last token, but a WhitespaceTokenizer was used. Additionally any skipped positions (such as those removed by a stopfilter) can be applied to the position increment, or any adjustment of other attributes where the end-of-stream value may be important. NOTE: The default implementation chains the call to the input TokenStream, so be sure to call base.End() first when overriding this method. Declaration public override void End() Overrides TokenStream.End() Exceptions Type Condition System.IO.IOException If an I/O error occurs | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenStream.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable See Also TokenStream"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Tokenizer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Tokenizer.html",
    "title": "Class Tokenizer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Tokenizer A Tokenizer is a TokenStream whose input is a System.IO.TextReader . This is an abstract class; subclasses must override IncrementToken() NOTE: Subclasses overriding IncrementToken() must call ClearAttributes() before setting attributes. Inheritance System.Object AttributeSource TokenStream Tokenizer Implements System.IDisposable Inherited Members TokenStream.IncrementToken() TokenStream.End() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class Tokenizer : TokenStream, IDisposable Constructors | Improve this Doc View Source Tokenizer(AttributeSource.AttributeFactory, TextReader) Construct a token stream processing the given input using the given AttributeSource.AttributeFactory . Declaration protected Tokenizer(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source Tokenizer(TextReader) Construct a token stream processing the given input. Declaration protected Tokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input Fields | Improve this Doc View Source m_input The text source for this Tokenizer . Declaration protected TextReader m_input Field Value Type Description System.IO.TextReader Methods | Improve this Doc View Source CorrectOffset(Int32) Return the corrected offset. If m_input is a CharFilter subclass this method calls CorrectOffset(Int32) , else returns currentOff . Declaration protected int CorrectOffset(int currentOff) Parameters Type Name Description System.Int32 currentOff offset as seen in the output Returns Type Description System.Int32 corrected offset based on the input See Also CorrectOffset(Int32) | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on reuse). Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) Remarks NOTE: The default implementation closes the input System.IO.TextReader , so be sure to call base.Dispose(disposing) when overriding this method. | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetReader(TextReader) Expert: Set a new reader on the Tokenizer . Typically, an analyzer (in its tokenStream method) will use this to re-use a previously created tokenizer. Declaration public void SetReader(TextReader input) Parameters Type Name Description System.IO.TextReader input Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStream.html",
    "title": "Class TokenStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenStream A TokenStream enumerates the sequence of tokens, either from Field s of a Document or from query text. this is an abstract class; concrete subclasses are: Tokenizer , a TokenStream whose input is a System.IO.TextReader ; and TokenFilter , a TokenStream whose input is another TokenStream . A new TokenStream API has been introduced with Lucene 2.9. this API has moved from being Token -based to IAttribute -based. While Token still exists in 2.9 as a convenience class, the preferred way to store the information of a Token is to use System.Attribute s. TokenStream now extends AttributeSource , which provides access to all of the token IAttribute s for the TokenStream . Note that only one instance per System.Attribute is created and reused for every token. This approach reduces object creation and allows local caching of references to the System.Attribute s. See IncrementToken() for further details. The workflow of the new TokenStream API is as follows: Instantiation of TokenStream / TokenFilter s which add/get attributes to/from the AttributeSource . The consumer calls Reset() . The consumer retrieves attributes from the stream and stores local references to all attributes it wants to access. The consumer calls IncrementToken() until it returns false consuming the attributes after each call. The consumer calls End() so that any end-of-stream operations can be performed. The consumer calls Dispose() to release any resource when finished using the TokenStream . To make sure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . You can find some example code for the new API in the analysis documentation. Sometimes it is desirable to capture a current state of a TokenStream , e.g., for buffering purposes (see CachingTokenFilter , TeeSinkTokenFilter). For this usecase CaptureState() and RestoreState(AttributeSource.State) can be used. The TokenStream -API in Lucene is based on the decorator pattern. Therefore all non-abstract subclasses must be sealed or have at least a sealed implementation of IncrementToken() ! This is checked when assertions are enabled. Inheritance System.Object AttributeSource TokenStream NumericTokenStream TokenFilter Tokenizer Implements System.IDisposable Inherited Members AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class TokenStream : AttributeSource, IDisposable Constructors | Improve this Doc View Source TokenStream() A TokenStream using the default attribute factory. Declaration protected TokenStream() | Improve this Doc View Source TokenStream(AttributeSource) A TokenStream that uses the same attributes as the supplied one. Declaration protected TokenStream(AttributeSource input) Parameters Type Name Description AttributeSource input | Improve this Doc View Source TokenStream(AttributeSource.AttributeFactory) A TokenStream using the supplied AttributeSource.AttributeFactory for creating new IAttribute instances. Declaration protected TokenStream(AttributeSource.AttributeFactory factory) Parameters Type Name Description AttributeSource.AttributeFactory factory Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on reuse). Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() This method is called by the consumer after the last token has been consumed, after IncrementToken() returned false (using the new TokenStream API). Streams implementing the old API should upgrade to use this feature. This method can be used to perform any end-of-stream operations, such as setting the final offset of a stream. The final offset of a stream might differ from the offset of the last token eg in case one or more whitespaces followed after the last token, but a WhitespaceTokenizer was used. Additionally any skipped positions (such as those removed by a stopfilter) can be applied to the position increment, or any adjustment of other attributes where the end-of-stream value may be important. If you override this method, always call base.End(); . Declaration public virtual void End() Exceptions Type Condition System.IO.IOException If an I/O error occurs | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate IAttribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all IAttribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public abstract bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public virtual void Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamComponents.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamComponents.html",
    "title": "Class TokenStreamComponents | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenStreamComponents This class encapsulates the outer components of a token stream. It provides access to the source ( Tokenizer ) and the outer end (sink), an instance of TokenFilter which also serves as the TokenStream returned by GetTokenStream(String, TextReader) . Inheritance System.Object TokenStreamComponents 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.Analysis Assembly : Lucene.Net.dll Syntax public class TokenStreamComponents Constructors | Improve this Doc View Source TokenStreamComponents(Tokenizer) Creates a new TokenStreamComponents instance. Declaration public TokenStreamComponents(Tokenizer source) Parameters Type Name Description Tokenizer source the analyzer's tokenizer | Improve this Doc View Source TokenStreamComponents(Tokenizer, TokenStream) Creates a new TokenStreamComponents instance. Declaration public TokenStreamComponents(Tokenizer source, TokenStream result) Parameters Type Name Description Tokenizer source the analyzer's tokenizer TokenStream result the analyzer's resulting token stream Fields | Improve this Doc View Source m_sink Sink tokenstream, such as the outer tokenfilter decorating the chain. This can be the source if there are no filters. Declaration protected readonly TokenStream m_sink Field Value Type Description TokenStream | Improve this Doc View Source m_source Original source of the tokens. Declaration protected readonly Tokenizer m_source Field Value Type Description Tokenizer Properties | Improve this Doc View Source Tokenizer Returns the component's Tokenizer Declaration public virtual Tokenizer Tokenizer { get; } Property Value Type Description Tokenizer Component's Tokenizer | Improve this Doc View Source TokenStream Returns the sink TokenStream Declaration public virtual TokenStream TokenStream { get; } Property Value Type Description TokenStream the sink TokenStream Methods | Improve this Doc View Source SetReader(TextReader) Resets the encapsulated components with the given reader. If the components cannot be reset, an Exception should be thrown. Declaration protected virtual void SetReader(TextReader reader) Parameters Type Name Description System.IO.TextReader reader a reader to reset the source component Exceptions Type Condition System.IO.IOException if the component's reset method throws an System.IO.IOException"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamToAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamToAutomaton.html",
    "title": "Class TokenStreamToAutomaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TokenStreamToAutomaton Consumes a TokenStream and creates an Automaton where the transition labels are UTF8 bytes (or Unicode code points if unicodeArcs is true) from the ITermToBytesRefAttribute . Between tokens we insert POS_SEP and for holes we insert HOLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TokenStreamToAutomaton 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.Analysis Assembly : Lucene.Net.dll Syntax public class TokenStreamToAutomaton Constructors | Improve this Doc View Source TokenStreamToAutomaton() Sole constructor. Declaration public TokenStreamToAutomaton() Fields | Improve this Doc View Source HOLE We add this arc to represent a hole. Declaration public const int HOLE = 30 Field Value Type Description System.Int32 | Improve this Doc View Source POS_SEP We create transition between two adjacent tokens. Declaration public const int POS_SEP = 31 Field Value Type Description System.Int32 Properties | Improve this Doc View Source PreservePositionIncrements Whether to generate holes in the automaton for missing positions, true by default. Declaration public virtual bool PreservePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source UnicodeArcs Whether to make transition labels Unicode code points instead of UTF8 bytes, false by default Declaration public virtual bool UnicodeArcs { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ChangeToken(BytesRef) Subclass & implement this if you need to change the token (such as escaping certain bytes) before it's turned into a graph. Declaration protected virtual BytesRef ChangeToken(BytesRef in) Parameters Type Name Description BytesRef in Returns Type Description BytesRef | Improve this Doc View Source ToAutomaton(TokenStream) Pulls the graph (including IPositionLengthAttribute from the provided TokenStream , and creates the corresponding automaton where arcs are bytes (or Unicode code points if unicodeArcs = true) from each term. Declaration public virtual Automaton ToAutomaton(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTermState.html",
    "title": "Class BlockTermState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockTermState Holds all state required for PostingsReaderBase to produce a DocsEnum without re-seeking the terms dict. Inheritance System.Object TermState OrdTermState BlockTermState Lucene41PostingsWriter.Int32BlockTermState Inherited Members OrdTermState.Ord TermState.Clone() 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.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTermState : OrdTermState Constructors | Improve this Doc View Source BlockTermState() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected BlockTermState() Properties | Improve this Doc View Source BlockFilePointer File pointer into the terms dict primary file (_X.tim) that holds this term. Declaration public long BlockFilePointer { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source DocFreq How many docs have this term? Declaration public int DocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TermBlockOrd The term's ord in the current block. Declaration public int TermBlockOrd { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTermFreq Total number of occurrences of this term. Declaration public long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides OrdTermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides OrdTermState.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.FieldReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.FieldReader.html",
    "title": "Class BlockTreeTermsReader.FieldReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockTreeTermsReader.FieldReader BlockTree's implementation of GetTerms(String) . Inheritance System.Object Terms BlockTreeTermsReader.FieldReader Inherited Members Terms.EMPTY_ARRAY 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.Codecs Assembly : Lucene.Net.dll Syntax public sealed class FieldReader : Terms Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source ComputeStats() For debugging -- used by CheckIndex too Declaration public BlockTreeTermsReader.Stats ComputeStats() Returns Type Description BlockTreeTermsReader.Stats | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum) | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum Overrides Terms.Intersect(CompiledAutomaton, BytesRef) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.html",
    "title": "Class BlockTreeTermsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockTreeTermsReader A block-based terms index and dictionary that assigns terms to variable length blocks according to how they share prefixes. The terms index is a prefix trie whose leaves are term blocks. The advantage of this approach is that SeekExact() is often able to determine a term cannot exist without doing any IO, and intersection with Automata is very fast. Note that this terms dictionary has it's own fixed terms index (ie, it does not support a pluggable terms index implementation). NOTE : this terms dictionary does not support index divisor when opening an IndexReader. Instead, you can change the min/maxItemsPerBlock during indexing. The data structure used by this implementation is very similar to a burst trie ( http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.3499 ), but with added logic to break up too-large blocks of all terms sharing a given prefix into smaller ones. Use CheckIndex with the -verbose option to see summary statistics on the blocks in the dictionary. See BlockTreeTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTreeTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source BlockTreeTermsReader(Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String, Int32) Sole constructor. Declaration public BlockTreeTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext ioContext, string segmentSuffix, int indexDivisor) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext ioContext System.String segmentSuffix System.Int32 indexDivisor Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() | Improve this Doc View Source ReadHeader(IndexInput) Reads terms file header. Declaration protected virtual int ReadHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 | Improve this Doc View Source ReadIndexHeader(IndexInput) Reads index file header. Declaration protected virtual int ReadIndexHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 | Improve this Doc View Source SeekDir(IndexInput, Int64) Seek input to the directory offset. Declaration protected virtual void SeekDir(IndexInput input, long dirOffset) Parameters Type Name Description IndexInput input System.Int64 dirOffset Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.Stats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.Stats.html",
    "title": "Class BlockTreeTermsReader.Stats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockTreeTermsReader.Stats BlockTree statistics for a single field returned by ComputeStats() . Inheritance System.Object BlockTreeTermsReader.Stats 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) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class Stats Properties | Improve this Doc View Source BlockCountByPrefixLen Number of blocks at each prefix depth. Declaration public int[] BlockCountByPrefixLen { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Field Field name. Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FloorBlockCount The number of floor blocks (meta-blocks larger than the allowed maxItemsPerBlock ) in the terms file. Declaration public int FloorBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source FloorSubBlockCount The number of sub-blocks within the floor blocks. Declaration public int FloorSubBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source IndexArcCount How many arcs in the index FST. Declaration public long IndexArcCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexNodeCount How many nodes in the index FST. Declaration public long IndexNodeCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexNumBytes Byte size of the index. Declaration public long IndexNumBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source MixedBlockCount The number of \"internal\" blocks (that have both terms and sub-blocks). Declaration public int MixedBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NonFloorBlockCount The number of normal (non-floor) blocks in the terms file. Declaration public int NonFloorBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Segment Segment name. Declaration public string Segment { get; } Property Value Type Description System.String | Improve this Doc View Source SubBlocksOnlyBlockCount The number of \"internal\" blocks that do not contain terms (have only sub-blocks). Declaration public int SubBlocksOnlyBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsOnlyBlockCount The number of \"leaf\" blocks (blocks that have only terms). Declaration public int TermsOnlyBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBlockCount Total number of blocks. Declaration public int TotalBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBlockOtherBytes Total bytes stored by the PostingsBaseFormat , plus the other few vInts stored in the frame. Declaration public long TotalBlockOtherBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalBlockStatsBytes Total number of bytes used to store term stats (not including what the PostingsBaseFormat stores. Declaration public long TotalBlockStatsBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalBlockSuffixBytes Total number of bytes used to store term suffixes. Declaration public long TotalBlockSuffixBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalTermBytes Total number of bytes (sum of term lengths) across all terms in the field. Declaration public long TotalTermBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalTermCount Total number of terms in the field. Declaration public long TotalTermCount { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsWriter.html",
    "title": "Class BlockTreeTermsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockTreeTermsWriter Block-based terms index and dictionary writer. Writes terms dict and index, block-encoding (column stride) each term's metadata for each set of terms between two index terms. Files: .tim: Term Dictionary .tip: Term Index Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and per-term metadata (typically pointers to the postings list for that term in the inverted index). The .tim is arranged in blocks: with blocks containing a variable number of entries (by default 25-48), where each entry is either a term or a reference to a sub-block. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections. TermsDict (.tim) --> Header, PostingsHeader , NodeBlock NumBlocks , FieldSummary, DirOffset, Footer NodeBlock --> (OuterNode | InnerNode) OuterNode --> EntryCount, SuffixLength, Byte SuffixLength , StatsLength, < TermStats > EntryCount , MetaLength, < TermMetadata > EntryCount InnerNode --> EntryCount, SuffixLength[,Sub?], Byte SuffixLength , StatsLength, < TermStats ? > EntryCount , MetaLength, < TermMetadata ? > EntryCount TermStats --> DocFreq, TotalTermFreq FieldSummary --> NumFields, <FieldNumber, NumTerms, RootCodeLength, Byte RootCodeLength , SumTotalTermFreq?, SumDocFreq, DocCount> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) DirOffset --> Uint64 ( WriteInt64(Int64) ) EntryCount,SuffixLength,StatsLength,DocFreq,MetaLength,NumFields, FieldNumber,RootCodeLength,DocCount --> VInt ( WriteVInt32(Int32) _ TotalTermFreq,NumTerms,SumTotalTermFreq,SumDocFreq --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the BlockTree implementation. DirOffset is a pointer to the FieldSummary section. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. this is encoded as the difference between the total number of occurrences and the DocFreq. FieldNumber is the fields number from Lucene.Net.Codecs.BlockTreeTermsWriter.fieldInfos . (.fnm) NumTerms is the number of unique terms for the field. RootCode points to the root block for the field. SumDocFreq is the total number of postings, the number of term-document pairs across the entire field. DocCount is the number of documents that have at least one posting for this field. PostingsHeader and TermMetadata are plugged into by the specific postings implementation: these contain arbitrary per-file data (such as parameters or versioning information) and per-term data (such as pointers to inverted files). For inner nodes of the tree, every entry will steal one bit to mark whether it points to child nodes(sub-block). If so, the corresponding TermStats and TermMetadata are omitted Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. The index is also used to determine when a given term cannot exist on disk (in the .tim file), saving a disk seek. TermsIndex (.tip) --> Header, FSTIndex NumFields <IndexStartFP> NumFields , DirOffset, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) IndexStartFP --> VLong ( WriteVInt64(Int64) FSTIndex --> FST{byte[]} Footer --> CodecFooter ( WriteFooter(IndexOutput) Notes: The .tip file contains a separate FST for each field. The FST maps a term prefix to the on-disk block that holds all terms starting with that prefix. Each field's IndexStartFP points to its FST. DirOffset is a pointer to the start of the IndexStartFPs for all fields It's possible that an on-disk block would contain too many terms (more than the allowed maximum (default: 48)). When this happens, the block is sub-divided into new blocks (called \"floor blocks\"), and then the output in the FST for the block's prefix encodes the leading byte of each sub-block, and its file pointer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTreeTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) 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.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTreeTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) Create a new writer. The number of items (terms or sub-blocks) per block will aim to be between minItemsInBlock and maxItemsInBlock , though in some cases the blocks may be smaller than the min. Declaration public BlockTreeTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter, int minItemsInBlock, int maxItemsInBlock) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter System.Int32 minItemsInBlock System.Int32 maxItemsInBlock Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_SIZE Suggested default value for the maxItemsInBlock parameter to BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) . Declaration public const int DEFAULT_MAX_BLOCK_SIZE = 48 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_BLOCK_SIZE Suggested default value for the minItemsInBlock parameter to BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) . Declaration public const int DEFAULT_MIN_BLOCK_SIZE = 25 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_APPEND_ONLY Append-only Declaration public const int VERSION_APPEND_ONLY = 1 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CHECKSUM Checksums. Declaration public const int VERSION_CHECKSUM = 3 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Current terms format. Declaration public const int VERSION_CURRENT = 3 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_META_ARRAY Meta data as array. Declaration public const int VERSION_META_ARRAY = 2 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Initial terms format. Declaration public const int VERSION_START = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) | Improve this Doc View Source WriteHeader(IndexOutput) Writes the terms file header. Declaration protected virtual void WriteHeader(IndexOutput out) Parameters Type Name Description IndexOutput out | Improve this Doc View Source WriteIndexHeader(IndexOutput) Writes the index file header. Declaration protected virtual void WriteIndexHeader(IndexOutput out) Parameters Type Name Description IndexOutput out | Improve this Doc View Source WriteIndexTrailer(IndexOutput, Int64) Writes the index file trailer. Declaration protected virtual void WriteIndexTrailer(IndexOutput indexOut, long dirStart) Parameters Type Name Description IndexOutput indexOut System.Int64 dirStart | Improve this Doc View Source WriteTrailer(IndexOutput, Int64) Writes the terms file trailer. Declaration protected virtual void WriteTrailer(IndexOutput out, long dirStart) Parameters Type Name Description IndexOutput out System.Int64 dirStart Implements System.IDisposable See Also BlockTreeTermsReader"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Codec.html",
    "title": "Class Codec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Codec Encodes/decodes an inverted index segment. Note, when extending this class, the name ( Name ) is written into the index. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetCodec(String) to resolve codec names. To implement your own codec: Subclass this class. Subclass DefaultCodecFactory , override the Initialize() method, and add the line base.ScanForCodecs(typeof(YourCodec).GetTypeInfo().Assembly) . If you have any codec classes in your assembly that are not meant for reading, you can add the ExcludeCodecFromScanAttribute to them so they are ignored by the scan. set the new ICodecFactory by calling SetCodecFactory(ICodecFactory) at application startup. If your codec has dependencies, you may also override GetCodec(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. Codec Names Unlike the Java version, codec names are by default convention-based on the class name. If you name your custom codec class \"MyCustomCodec\", the codec name will the same name without the \"Codec\" suffix: \"MyCustom\". You can override this default behavior by using the CodecNameAttribute to name the codec differently than this convention. Codec names must be all ASCII alphanumeric, and less than 128 characters in length. Inheritance System.Object Codec FilterCodec Lucene3xCodec Lucene40Codec Lucene41Codec Lucene42Codec Lucene45Codec Lucene46Codec 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) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class Codec Constructors | Improve this Doc View Source Codec() Creates a new codec. The Name will be written into the index segment: in order for the segment to be read this class should be registered by subclassing DefaultCodecFactory and calling ScanForCodecs(Assembly) in the class constructor. The new ICodecFactory can be registered by calling SetCodecFactory(ICodecFactory) at application startup. Declaration protected Codec() Properties | Improve this Doc View Source AvailableCodecs Returns a list of all available codec names. Declaration public static ICollection<string> AvailableCodecs { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Default Expert: returns the default codec used for newly created IndexWriterConfig s. Declaration public static Codec Default { get; set; } Property Value Type Description Codec | Improve this Doc View Source DocValuesFormat Encodes/decodes docvalues. Declaration public abstract DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat | Improve this Doc View Source FieldInfosFormat Encodes/decodes field infos file. Declaration public abstract FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Encodes/decodes live docs. Declaration public abstract LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat | Improve this Doc View Source Name Returns this codec's name. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NormsFormat Encodes/decodes document normalization values. Declaration public abstract NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat | Improve this Doc View Source PostingsFormat Encodes/decodes postings. Declaration public abstract PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat | Improve this Doc View Source SegmentInfoFormat Encodes/decodes segment info file. Declaration public abstract SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Encodes/decodes stored fields. Declaration public abstract StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Encodes/decodes term vectors. Declaration public abstract TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Methods | Improve this Doc View Source ForName(String) Looks up a codec by name. Declaration public static Codec ForName(string name) Parameters Type Name Description System.String name Returns Type Description Codec | Improve this Doc View Source GetCodecFactory() Gets the associated codec factory. Declaration public static ICodecFactory GetCodecFactory() Returns Type Description ICodecFactory The codec factory. | Improve this Doc View Source SetCodecFactory(ICodecFactory) Sets the ICodecFactory instance used to instantiate Codec subclasses. Declaration public static void SetCodecFactory(ICodecFactory codecFactory) Parameters Type Name Description ICodecFactory codecFactory The new ICodecFactory . Exceptions Type Condition System.ArgumentNullException The codecFactory parameter is null . | Improve this Doc View Source ToString() Returns the codec's name. Subclasses can override to provide more detail (such as parameters). Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also DefaultCodecFactory ICodecFactory CodecNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.CodecNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.CodecNameAttribute.html",
    "title": "Class CodecNameAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CodecNameAttribute Represents an attribute that is used to name a Codec , if a name other than the default Codec naming convention is desired. Inheritance System.Object System.Attribute ServiceNameAttribute CodecNameAttribute Inherited Members ServiceNameAttribute.Name System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public sealed class CodecNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source CodecNameAttribute(String) Declaration public CodecNameAttribute(string name) Parameters Type Name Description System.String name"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.CodecUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.CodecUtil.html",
    "title": "Class CodecUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CodecUtil Utility class for reading and writing versioned headers. Writing codec headers is useful to ensure that a file is in the format you think it is. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CodecUtil 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.Codecs Assembly : Lucene.Net.dll Syntax public sealed class CodecUtil Fields | Improve this Doc View Source CODEC_MAGIC Constant to identify the start of a codec header. Declaration public static readonly int CODEC_MAGIC Field Value Type Description System.Int32 | Improve this Doc View Source FOOTER_MAGIC Constant to identify the start of a codec footer. Declaration public static readonly int FOOTER_MAGIC Field Value Type Description System.Int32 Methods | Improve this Doc View Source CheckEOF(IndexInput) Checks that the stream is positioned at the end, and throws exception if it is not. Declaration [Obsolete(\"Use CheckFooter(ChecksumIndexInput) instead, this should only used for files without checksums.\")] public static void CheckEOF(IndexInput in) Parameters Type Name Description IndexInput in | Improve this Doc View Source CheckFooter(ChecksumIndexInput) Validates the codec footer previously written by WriteFooter(IndexOutput) . Declaration public static long CheckFooter(ChecksumIndexInput in) Parameters Type Name Description ChecksumIndexInput in Returns Type Description System.Int64 Actual checksum value. Exceptions Type Condition System.IO.IOException If the footer is invalid, if the checksum does not match, or if in is not properly positioned before the footer at the end of the stream. | Improve this Doc View Source CheckHeader(DataInput, String, Int32, Int32) Reads and validates a header previously written with WriteHeader(DataOutput, String, Int32) . When reading a file, supply the expected codec and an expected version range ( minVersion to maxVersion ). Declaration public static int CheckHeader(DataInput in, string codec, int minVersion, int maxVersion) Parameters Type Name Description DataInput in Input stream, positioned at the point where the header was previously written. Typically this is located at the beginning of the file. System.String codec The expected codec name. System.Int32 minVersion The minimum supported expected version number. System.Int32 maxVersion The maximum supported expected version number. Returns Type Description System.Int32 The actual version found, when a valid header is found that matches codec , with an actual version where minVersion <= actual <= maxVersion . Otherwise an exception is thrown. Exceptions Type Condition CorruptIndexException If the first four bytes are not CODEC_MAGIC , or if the actual codec found is not codec . IndexFormatTooOldException If the actual version is less than minVersion . IndexFormatTooNewException If the actual version is greater than maxVersion . System.IO.IOException If there is an I/O error reading from the underlying medium. See Also WriteHeader(DataOutput, String, Int32) | Improve this Doc View Source CheckHeaderNoMagic(DataInput, String, Int32, Int32) Like CheckHeader(DataInput, String, Int32, Int32) except this version assumes the first System.Int32 has already been read and validated from the input. Declaration public static int CheckHeaderNoMagic(DataInput in, string codec, int minVersion, int maxVersion) Parameters Type Name Description DataInput in System.String codec System.Int32 minVersion System.Int32 maxVersion Returns Type Description System.Int32 | Improve this Doc View Source ChecksumEntireFile(IndexInput) Clones the provided input, reads all bytes from the file, and calls CheckFooter(ChecksumIndexInput) Note that this method may be slow, as it must process the entire file. If you just need to extract the checksum value, call RetrieveChecksum(IndexInput) . Declaration public static long ChecksumEntireFile(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int64 | Improve this Doc View Source FooterLength() Computes the length of a codec footer. Declaration public static int FooterLength() Returns Type Description System.Int32 Length of the entire codec footer. See Also WriteFooter(IndexOutput) | Improve this Doc View Source HeaderLength(String) Computes the length of a codec header. Declaration public static int HeaderLength(string codec) Parameters Type Name Description System.String codec Codec name. Returns Type Description System.Int32 Length of the entire codec header. See Also WriteHeader(DataOutput, String, Int32) | Improve this Doc View Source RetrieveChecksum(IndexInput) Returns (but does not validate) the checksum previously written by CheckFooter(ChecksumIndexInput) . Declaration public static long RetrieveChecksum(IndexInput in) Parameters Type Name Description IndexInput in Returns Type Description System.Int64 actual checksum value Exceptions Type Condition System.IO.IOException If the footer is invalid. | Improve this Doc View Source WriteFooter(IndexOutput) Writes a codec footer, which records both a checksum algorithm ID and a checksum. This footer can be parsed and validated with CheckFooter(ChecksumIndexInput) . CodecFooter --> Magic,AlgorithmID,Checksum Magic --> Uint32 ( WriteInt32(Int32) ). this identifies the start of the footer. It is always FOOTER_MAGIC . AlgorithmID --> Uint32 ( WriteInt32(Int32) ). this indicates the checksum algorithm used. Currently this is always 0, for zlib-crc32. Checksum --> Uint32 ( WriteInt64(Int64) ). The actual checksum value for all previous bytes in the stream, including the bytes from Magic and AlgorithmID. Declaration public static void WriteFooter(IndexOutput out) Parameters Type Name Description IndexOutput out Output stream Exceptions Type Condition System.IO.IOException If there is an I/O error writing to the underlying medium. | Improve this Doc View Source WriteHeader(DataOutput, String, Int32) Writes a codec header, which records both a string to identify the file and a version number. This header can be parsed and validated with CheckHeader(DataInput, String, Int32, Int32) . CodecHeader --> Magic,CodecName,Version Magic --> Uint32 ( WriteInt32(Int32) ). this identifies the start of the header. It is always CODEC_MAGIC . CodecName --> String ( WriteString(String) ). this is a string to identify this file. Version --> Uint32 ( WriteInt32(Int32) ). Records the version of the file. Note that the length of a codec header depends only upon the name of the codec, so this length can be computed at any time with HeaderLength(String) . Declaration public static void WriteHeader(DataOutput out, string codec, int version) Parameters Type Name Description DataOutput out Output stream System.String codec String to identify this file. It should be simple ASCII, less than 128 characters in length. System.Int32 version Version number Exceptions Type Condition System.IO.IOException If there is an I/O error writing to the underlying medium."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.html",
    "title": "Class CompressingStoredFieldsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingStoredFieldsFormat A StoredFieldsFormat that is very similar to Lucene40StoredFieldsFormat but compresses documents in chunks in order to improve the compression ratio. For a chunk size of chunkSize bytes, this StoredFieldsFormat does not support documents larger than ( 2 31 - chunkSize ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . For optimal performance, you should use a MergePolicy that returns segments that have the biggest byte size first. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene41StoredFieldsFormat 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) Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class CompressingStoredFieldsFormat : StoredFieldsFormat Constructors | Improve this Doc View Source CompressingStoredFieldsFormat(String, CompressionMode, Int32) Create a new CompressingStoredFieldsFormat with an empty segment suffix. Declaration public CompressingStoredFieldsFormat(string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName CompressionMode compressionMode System.Int32 chunkSize See Also CompressingStoredFieldsFormat(String, String, CompressionMode, Int32) | Improve this Doc View Source CompressingStoredFieldsFormat(String, String, CompressionMode, Int32) Create a new CompressingStoredFieldsFormat . formatName is the name of the format. This name will be used in the file formats to perform codec header checks ( CheckHeader(DataInput, String, Int32, Int32) ). segmentSuffix is the segment suffix. this suffix is added to the result file name only if it's not the empty string. The compressionMode parameter allows you to choose between compression algorithms that have various compression and decompression speeds so that you can pick the one that best fits your indexing and searching throughput. You should never instantiate two CompressingStoredFieldsFormat s that have the same name but different Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.compressionMode s. chunkSize is the minimum byte size of a chunk of documents. A value of 1 can make sense if there is redundancy across fields. In that case, both performance and compression ratio should be better than with Lucene40StoredFieldsFormat with compressed fields. Higher values of chunkSize should improve the compression ratio but will require more memory at indexing time and might make document loading a little slower (depending on the size of your OS cache compared to the size of your index). Declaration public CompressingStoredFieldsFormat(string formatName, string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName The name of the StoredFieldsFormat . System.String segmentSuffix CompressionMode compressionMode The CompressionMode to use. System.Int32 chunkSize The minimum number of bytes of a single chunk of stored documents. See Also CompressionMode Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexReader.html",
    "title": "Class CompressingStoredFieldsIndexReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingStoredFieldsIndexReader Random-access reader for CompressingStoredFieldsIndexWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CompressingStoredFieldsIndexReader 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsIndexReader Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexWriter.html",
    "title": "Class CompressingStoredFieldsIndexWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingStoredFieldsIndexWriter Efficient index format for block-based Codec s. this writer generates a file which can be loaded into memory using memory-efficient data structures to quickly locate the block that contains any document. In order to have a compact in-memory representation, for every block of 1024 chunks, this index computes the average number of bytes per chunk and for every chunk, only stores the difference between Data is written as follows: Notes This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CompressingStoredFieldsIndexWriter 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsIndexWriter : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsReader.html",
    "title": "Class CompressingStoredFieldsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingStoredFieldsReader StoredFieldsReader impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader CompressingStoredFieldsReader Implements System.IDisposable Inherited Members StoredFieldsReader.Dispose() 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsReader : StoredFieldsReader, IDisposable Constructors | Improve this Doc View Source CompressingStoredFieldsReader(Directory, SegmentInfo, String, FieldInfos, IOContext, String, CompressionMode) Sole constructor. Declaration public CompressingStoredFieldsReader(Directory d, SegmentInfo si, string segmentSuffix, FieldInfos fn, IOContext context, string formatName, CompressionMode compressionMode) Parameters Type Name Description Directory d SegmentInfo si System.String segmentSuffix FieldInfos fn IOContext context System.String formatName CompressionMode compressionMode Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Dispose the underlying IndexInput s. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsWriter.html",
    "title": "Class CompressingStoredFieldsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingStoredFieldsWriter StoredFieldsWriter impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter CompressingStoredFieldsWriter Implements System.IDisposable Inherited Members StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsWriter : StoredFieldsWriter, IDisposable Constructors | Improve this Doc View Source CompressingStoredFieldsWriter(Directory, SegmentInfo, String, IOContext, String, CompressionMode, Int32) Sole constructor. Declaration public CompressingStoredFieldsWriter(Directory directory, SegmentInfo si, string segmentSuffix, IOContext context, string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description Directory directory SegmentInfo si System.String segmentSuffix IOContext context System.String formatName CompressionMode compressionMode System.Int32 chunkSize Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides StoredFieldsWriter.FinishDocument() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides StoredFieldsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsFormat.html",
    "title": "Class CompressingTermVectorsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingTermVectorsFormat A TermVectorsFormat that compresses chunks of documents together in order to improve the compression ratio. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene42TermVectorsFormat 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) Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class CompressingTermVectorsFormat : TermVectorsFormat Constructors | Improve this Doc View Source CompressingTermVectorsFormat(String, String, CompressionMode, Int32) Create a new CompressingTermVectorsFormat . formatName is the name of the format. this name will be used in the file formats to perform codec header checks ( CheckHeader(DataInput, String, Int32, Int32) ). The compressionMode parameter allows you to choose between compression algorithms that have various compression and decompression speeds so that you can pick the one that best fits your indexing and searching throughput. You should never instantiate two CompressingTermVectorsFormat s that have the same name but different CompressionMode s. chunkSize is the minimum byte size of a chunk of documents. Higher values of chunkSize should improve the compression ratio but will require more memory at indexing time and might make document loading a little slower (depending on the size of your OS cache compared to the size of your index). Declaration public CompressingTermVectorsFormat(string formatName, string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName The name of the StoredFieldsFormat . System.String segmentSuffix A suffix to append to files created by this format. CompressionMode compressionMode The CompressionMode to use. System.Int32 chunkSize The minimum number of bytes of a single chunk of stored documents. See Also CompressionMode Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override sealed TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override sealed TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsReader.html",
    "title": "Class CompressingTermVectorsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingTermVectorsReader TermVectorsReader for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader CompressingTermVectorsReader Implements System.IDisposable Inherited Members TermVectorsReader.Dispose() 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingTermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source CompressingTermVectorsReader(Directory, SegmentInfo, String, FieldInfos, IOContext, String, CompressionMode) Sole constructor. Declaration public CompressingTermVectorsReader(Directory d, SegmentInfo si, string segmentSuffix, FieldInfos fn, IOContext context, string formatName, CompressionMode compressionMode) Parameters Type Name Description Directory d SegmentInfo si System.String segmentSuffix FieldInfos fn IOContext context System.String formatName CompressionMode compressionMode Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsWriter.html",
    "title": "Class CompressingTermVectorsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressingTermVectorsWriter TermVectorsWriter for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter CompressingTermVectorsWriter Implements System.IDisposable Inherited Members TermVectorsWriter.FinishTerm() TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingTermVectorsWriter : TermVectorsWriter, IDisposable Constructors | Improve this Doc View Source CompressingTermVectorsWriter(Directory, SegmentInfo, String, IOContext, String, CompressionMode, Int32) Sole constructor. Declaration public CompressingTermVectorsWriter(Directory directory, SegmentInfo si, string segmentSuffix, IOContext context, string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description Directory directory SegmentInfo si System.String segmentSuffix IOContext context System.String formatName CompressionMode compressionMode System.Int32 chunkSize Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Declaration public override void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets Overrides TermVectorsWriter.AddProx(Int32, DataInput, DataInput) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides TermVectorsWriter.FinishDocument() | Improve this Doc View Source FinishField() Declaration public override void FinishField() Overrides TermVectorsWriter.FinishField() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides TermVectorsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressionMode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressionMode.html",
    "title": "Class CompressionMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressionMode A compression mode. Tells how much effort should be spent on compression and decompression of stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CompressionMode 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class CompressionMode Constructors | Improve this Doc View Source CompressionMode() Sole constructor. Declaration protected CompressionMode() Fields | Improve this Doc View Source FAST A compression mode that trades compression ratio for speed. Although the compression ratio might remain high, compression and decompression are very fast. Use this mode with indices that have a high update rate but should be able to load documents from disk quickly. Declaration public static readonly CompressionMode FAST Field Value Type Description CompressionMode | Improve this Doc View Source FAST_DECOMPRESSION This compression mode is similar to FAST but it spends more time compressing in order to improve the compression ratio. This compression mode is best used with indices that have a low update rate but should be able to load documents from disk quickly. Declaration public static readonly CompressionMode FAST_DECOMPRESSION Field Value Type Description CompressionMode | Improve this Doc View Source HIGH_COMPRESSION A compression mode that trades speed for compression ratio. Although compression and decompression might be slow, this compression mode should provide a good compression ratio. this mode might be interesting if/when your index size is much bigger than your OS cache. Declaration public static readonly CompressionMode HIGH_COMPRESSION Field Value Type Description CompressionMode Methods | Improve this Doc View Source NewCompressor() Create a new Compressor instance. Declaration public abstract Compressor NewCompressor() Returns Type Description Compressor | Improve this Doc View Source NewDecompressor() Create a new Decompressor instance. Declaration public abstract Decompressor NewDecompressor() Returns Type Description Decompressor"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Compressor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Compressor.html",
    "title": "Class Compressor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Compressor A data compressor. Inheritance System.Object Compressor 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class Compressor Constructors | Improve this Doc View Source Compressor() Sole constructor, typically called from sub-classes. Declaration protected Compressor() Methods | Improve this Doc View Source Compress(Byte[], Int32, Int32, DataOutput) Compress bytes into out . It it the responsibility of the compressor to add all necessary information so that a Decompressor will know when to stop decompressing bytes from the stream. Declaration public abstract void Compress(byte[] bytes, int off, int len, DataOutput out) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len DataOutput out"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Decompressor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Decompressor.html",
    "title": "Class Decompressor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Decompressor A decompressor. Inheritance System.Object Decompressor 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class Decompressor Constructors | Improve this Doc View Source Decompressor() Sole constructor, typically called from sub-classes. Declaration protected Decompressor() Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Decompress(DataInput, Int32, Int32, Int32, BytesRef) Decompress bytes that were stored between offsets offset and offset+length in the original stream from the compressed stream in to bytes . After returning, the length of bytes ( bytes.Length ) must be equal to length . Implementations of this method are free to resize bytes depending on their needs. Declaration public abstract void Decompress(DataInput in, int originalLength, int offset, int length, BytesRef bytes) Parameters Type Name Description DataInput in The input that stores the compressed stream. System.Int32 originalLength The length of the original data (before compression). System.Int32 offset Bytes before this offset do not need to be decompressed. System.Int32 length Bytes after offset+length do not need to be decompressed. BytesRef bytes a BytesRef where to store the decompressed data."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.html",
    "title": "Namespace Lucene.Net.Codecs.Compressing | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Compressing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing CompressingStoredFieldsFormat . Classes CompressingStoredFieldsFormat A StoredFieldsFormat that is very similar to Lucene40StoredFieldsFormat but compresses documents in chunks in order to improve the compression ratio. For a chunk size of chunkSize bytes, this StoredFieldsFormat does not support documents larger than ( 2 31 - chunkSize ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . For optimal performance, you should use a MergePolicy that returns segments that have the biggest byte size first. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingStoredFieldsIndexReader Random-access reader for CompressingStoredFieldsIndexWriter . This is a Lucene.NET INTERNAL API, use at your own risk CompressingStoredFieldsIndexWriter Efficient index format for block-based Codec s. this writer generates a file which can be loaded into memory using memory-efficient data structures to quickly locate the block that contains any document. In order to have a compact in-memory representation, for every block of 1024 chunks, this index computes the average number of bytes per chunk and for every chunk, only stores the difference between Data is written as follows: Notes This is a Lucene.NET INTERNAL API, use at your own risk CompressingStoredFieldsReader StoredFieldsReader impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingStoredFieldsWriter StoredFieldsWriter impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsFormat A TermVectorsFormat that compresses chunks of documents together in order to improve the compression ratio. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsReader TermVectorsReader for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsWriter TermVectorsWriter for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressionMode A compression mode. Tells how much effort should be spent on compression and decompression of stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Compressor A data compressor. Decompressor A decompressor. LZ4 LZ4 compression and decompression routines. http://code.google.com/p/lz4/ http://fastcompression.blogspot.fr/p/lz4.html LZ4.HashTable LZ4.HCHashTable LZ4.Match"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HashTable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HashTable.html",
    "title": "Class LZ4.HashTable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LZ4.HashTable Inheritance System.Object LZ4.HashTable 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class HashTable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HCHashTable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HCHashTable.html",
    "title": "Class LZ4.HCHashTable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LZ4.HCHashTable Inheritance System.Object LZ4.HCHashTable 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class HCHashTable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.html",
    "title": "Class LZ4 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LZ4 LZ4 compression and decompression routines. http://code.google.com/p/lz4/ http://fastcompression.blogspot.fr/p/lz4.html Inheritance System.Object LZ4 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class LZ4 Methods | Improve this Doc View Source Compress(Byte[], Int32, Int32, DataOutput, LZ4.HashTable) Compress bytes[off:off+len] into out using at most 16KB of memory. ht shouldn't be shared across threads but can safely be reused. Declaration public static void Compress(byte[] bytes, int off, int len, DataOutput out, LZ4.HashTable ht) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len DataOutput out LZ4.HashTable ht | Improve this Doc View Source CompressHC(Byte[], Int32, Int32, DataOutput, LZ4.HCHashTable) Compress bytes[off:off+len] into out . Compared to Compress(Byte[], Int32, Int32, DataOutput, LZ4.HashTable) , this method is slower and uses more memory (~ 256KB per thread) but should provide better compression ratios (especially on large inputs) because it chooses the best match among up to 256 candidates and then performs trade-offs to fix overlapping matches. ht shouldn't be shared across threads but can safely be reused. Declaration public static void CompressHC(byte[] src, int srcOff, int srcLen, DataOutput out, LZ4.HCHashTable ht) Parameters Type Name Description System.Byte [] src System.Int32 srcOff System.Int32 srcLen DataOutput out LZ4.HCHashTable ht | Improve this Doc View Source Decompress(DataInput, Int32, Byte[], Int32) Decompress at least decompressedLen bytes into dest[dOff] . Please note that dest must be large enough to be able to hold all decompressed data (meaning that you need to know the total decompressed length). Declaration public static int Decompress(DataInput compressed, int decompressedLen, byte[] dest, int dOff) Parameters Type Name Description DataInput compressed System.Int32 decompressedLen System.Byte [] dest System.Int32 dOff Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.Match.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.Match.html",
    "title": "Class LZ4.Match | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LZ4.Match Inheritance System.Object LZ4.Match 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.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class Match"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultCodecFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultCodecFactory.html",
    "title": "Class DefaultCodecFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultCodecFactory LUCENENET specific class that implements the default functionality for the ICodecFactory . The most common use cases are: Initialize DefaultCodecFactory with a set of CustomCodecTypes . Subclass DefaultCodecFactory and override GetCodec(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetCodec(String) . Subclass DefaultCodecFactory and override GetCodecType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Subclass DefaultCodecFactory to add new or override the default Codec types by overriding Initialize() and calling PutCodecType(Type) . Subclass DefaultCodecFactory to scan additional assemblies for Codec subclasses in by overriding Initialize() and calling ScanForCodecs(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . Inheritance System.Object NamedServiceFactory < Codec > DefaultCodecFactory Implements ICodecFactory IServiceListable Inherited Members NamedServiceFactory<Codec>.m_initializationLock NamedServiceFactory<Codec>.EnsureInitialized() NamedServiceFactory<Codec>.CodecsAssembly NamedServiceFactory<Codec>.IsServiceType(Type) NamedServiceFactory<Codec>.GetServiceName(Type) NamedServiceFactory<Codec>.GetCanonicalName(Type) NamedServiceFactory<Codec>.IsFullyTrusted 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.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultCodecFactory : NamedServiceFactory<Codec>, ICodecFactory, IServiceListable Constructors | Improve this Doc View Source DefaultCodecFactory() Creates a new instance of DefaultCodecFactory . Declaration public DefaultCodecFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available Codec s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > A ICollection{string} of Codec names. | Improve this Doc View Source CustomCodecTypes An array of custom Codec -derived types to be registered. This property can be initialized during construction of DefaultCodecFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene Codec (via CodecNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomCodecTypes { get; set; } Property Value Type Description System.Collections.Generic.IEnumerable < System.Type > Methods | Improve this Doc View Source GetCodec(String) Gets the Codec instance from the provided name . Declaration public virtual Codec GetCodec(string name) Parameters Type Name Description System.String name The name of the Codec instance to retrieve. Returns Type Description Codec The Codec instance. | Improve this Doc View Source GetCodec(Type) Gets the Codec instance from the provided type . Declaration protected virtual Codec GetCodec(Type type) Parameters Type Name Description System.Type type The System.Type of Codec to retrieve. Returns Type Description Codec The Codec instance. | Improve this Doc View Source GetCodecType(String) Gets the Codec System.Type from the provided name . Declaration protected virtual Type GetCodecType(string name) Parameters Type Name Description System.String name The name of the Codec System.Type to retrieve. Returns Type Description System.Type The Codec System.Type . | Improve this Doc View Source Initialize() Initializes the codec type cache with the known Codec types. Override this method (and optionally call base.Initialize() ) to add your own Codec types by calling PutCodecType(Type) or ScanForCodecs(Assembly) . If two types have the same name by using the CodecNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.Codec>.Initialize() | Improve this Doc View Source NewCodec(Type) Instantiates a Codec based on the provided type . Declaration protected virtual Codec NewCodec(Type type) Parameters Type Name Description System.Type type The System.Type of Codec to instantiate. Returns Type Description Codec The new instance. | Improve this Doc View Source PutCodecType(Type) Adds a Codec type to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap , using the name provided in the CodecNameAttribute , if present, or the name of the codec class minus the \"Codec\" suffix as the name by default. Note that if a Codec with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutCodecType(Type codec) Parameters Type Name Description System.Type codec A type that subclasses Codec . | Improve this Doc View Source ScanForCodecs(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Note that names will be automatically overridden if the Codec name appears multiple times - the last match wins. Declaration protected virtual void ScanForCodecs(IEnumerable<Assembly> assemblies) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Reflection.Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each Codec name wins. | Improve this Doc View Source ScanForCodecs(Assembly) Scans the given assembly for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Note that names will be automatically overridden if the Codec name appears multiple times - the last match wins. Declaration protected virtual void ScanForCodecs(Assembly assembly) Parameters Type Name Description System.Reflection.Assembly assembly The assembly to scan. Implements ICodecFactory IServiceListable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultDocValuesFormatFactory.html",
    "title": "Class DefaultDocValuesFormatFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultDocValuesFormatFactory LUCENENET specific class that implements the default functionality for the IDocValuesFormatFactory . The most common use cases are: Initialize DefaultDocValuesFormatFactory with a set of CustomDocValuesFormatTypes . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetDocValuesFormat(String) . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Subclass DefaultDocValuesFormatFactory to add new or override the default DocValuesFormat types by overriding Initialize() and calling PutDocValuesFormatType(Type) . Subclass DefaultDocValuesFormatFactory to scan additional assemblies for DocValuesFormat subclasses in by overriding Initialize() and calling ScanForDocValuesFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . Inheritance System.Object NamedServiceFactory < DocValuesFormat > DefaultDocValuesFormatFactory Implements IDocValuesFormatFactory IServiceListable Inherited Members NamedServiceFactory<DocValuesFormat>.m_initializationLock NamedServiceFactory<DocValuesFormat>.EnsureInitialized() NamedServiceFactory<DocValuesFormat>.CodecsAssembly NamedServiceFactory<DocValuesFormat>.IsServiceType(Type) NamedServiceFactory<DocValuesFormat>.GetServiceName(Type) NamedServiceFactory<DocValuesFormat>.GetCanonicalName(Type) NamedServiceFactory<DocValuesFormat>.IsFullyTrusted 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.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultDocValuesFormatFactory : NamedServiceFactory<DocValuesFormat>, IDocValuesFormatFactory, IServiceListable Constructors | Improve this Doc View Source DefaultDocValuesFormatFactory() Creates a new instance of DefaultDocValuesFormatFactory . Declaration public DefaultDocValuesFormatFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available DocValuesFormat s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > A ICollection{string} of DocValuesFormat names. | Improve this Doc View Source CustomDocValuesFormatTypes An array of custom DocValuesFormat -derived types to be registered. This property can be initialized during construction of DefaultDocValuesFormatFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene DocValuesFormat (via DocValuesFormatNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomDocValuesFormatTypes { get; set; } Property Value Type Description System.Collections.Generic.IEnumerable < System.Type > Methods | Improve this Doc View Source GetDocValuesFormat(String) Gets the DocValuesFormat instance from the provided name . Declaration public virtual DocValuesFormat GetDocValuesFormat(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat instance to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. | Improve this Doc View Source GetDocValuesFormat(Type) Gets the DocValuesFormat instance from the provided type . Declaration protected virtual DocValuesFormat GetDocValuesFormat(Type type) Parameters Type Name Description System.Type type The System.Type of DocValuesFormat to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. | Improve this Doc View Source GetDocValuesFormatType(String) Gets the DocValuesFormat System.Type from the provided name . Declaration protected virtual Type GetDocValuesFormatType(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat System.Type to retrieve. Returns Type Description System.Type The DocValuesFormat System.Type . | Improve this Doc View Source Initialize() Initializes the doc values type cache with the known DocValuesFormat types. Override this method (and optionally call base.Initialize() ) to add your own DocValuesFormat types by calling PutDocValuesFormatType(Type) or ScanForDocValuesFormats(Assembly) . If two types have the same name by using the DocValuesFormatNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.DocValuesFormat>.Initialize() | Improve this Doc View Source NewDocValuesFormat(Type) Instantiates a DocValuesFormat based on the provided type . Declaration protected virtual DocValuesFormat NewDocValuesFormat(Type type) Parameters Type Name Description System.Type type The System.Type of DocValuesFormat to instantiate. Returns Type Description DocValuesFormat The new instance. | Improve this Doc View Source PutDocValuesFormatType(Type) Adds a DocValuesFormat type to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap , using the name provided in the DocValuesFormatNameAttribute , if present, or the name of the codec class minus the \"DocValuesFormat\" suffix as the name by default. Note that if a DocValuesFormat with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutDocValuesFormatType(Type docValuesFormat) Parameters Type Name Description System.Type docValuesFormat A type that subclasses DocValuesFormat . | Improve this Doc View Source ScanForDocValuesFormats(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Note that names will be automatically overridden if the DocValuesFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForDocValuesFormats(IEnumerable<Assembly> assemblies) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Reflection.Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each DocValuesFormat name wins. | Improve this Doc View Source ScanForDocValuesFormats(Assembly) Scans the given assembly for subclasses of DocValuesFormat and adds their names to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Note that names will be automatically overridden if the DocValuesFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForDocValuesFormats(Assembly assembly) Parameters Type Name Description System.Reflection.Assembly assembly The assembly to scan. Implements IDocValuesFormatFactory IServiceListable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultPostingsFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultPostingsFormatFactory.html",
    "title": "Class DefaultPostingsFormatFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultPostingsFormatFactory LUCENENET specific class that implements the default functionality for the IPostingsFormatFactory . The most common use cases are: Initialize DefaultPostingsFormatFactory with a set of CustomPostingsFormatTypes . Subclass DefaultPostingsFormatFactory and override GetPostingsFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetPostingsFormat(String) . Subclass DefaultPostingsFormatFactory and override GetPostingsFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Subclass DefaultPostingsFormatFactory to add new or override the default PostingsFormat types by overriding Initialize() and calling PutPostingsFormatType(Type) . Subclass DefaultPostingsFormatFactory to scan additional assemblies for PostingsFormat subclasses in by overriding Initialize() and calling ScanForPostingsFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . Inheritance System.Object NamedServiceFactory < PostingsFormat > DefaultPostingsFormatFactory Implements IPostingsFormatFactory IServiceListable Inherited Members NamedServiceFactory<PostingsFormat>.m_initializationLock NamedServiceFactory<PostingsFormat>.EnsureInitialized() NamedServiceFactory<PostingsFormat>.CodecsAssembly NamedServiceFactory<PostingsFormat>.IsServiceType(Type) NamedServiceFactory<PostingsFormat>.GetServiceName(Type) NamedServiceFactory<PostingsFormat>.GetCanonicalName(Type) NamedServiceFactory<PostingsFormat>.IsFullyTrusted 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.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultPostingsFormatFactory : NamedServiceFactory<PostingsFormat>, IPostingsFormatFactory, IServiceListable Constructors | Improve this Doc View Source DefaultPostingsFormatFactory() Creates a new instance of DefaultPostingsFormatFactory . Declaration public DefaultPostingsFormatFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available PostingsFormat s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > A ICollection{string} of PostingsFormat names. | Improve this Doc View Source CustomPostingsFormatTypes An array of custom PostingsFormat -derived types to be registered. This property can be initialized during construction of DefaultPostingsFormatFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene PostingsFormat (via PostingsFormatNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomPostingsFormatTypes { get; set; } Property Value Type Description System.Collections.Generic.IEnumerable < System.Type > Methods | Improve this Doc View Source GetPostingsFormat(String) Gets the PostingsFormat instance from the provided name . Declaration public virtual PostingsFormat GetPostingsFormat(string name) Parameters Type Name Description System.String name The name of the PostingsFormat instance to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. | Improve this Doc View Source GetPostingsFormat(Type) Gets the PostingsFormat instance from the provided type . Declaration protected virtual PostingsFormat GetPostingsFormat(Type type) Parameters Type Name Description System.Type type The System.Type of PostingsFormat to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. | Improve this Doc View Source GetPostingsFormatType(String) Gets the PostingsFormat System.Type from the provided name . Declaration protected virtual Type GetPostingsFormatType(string name) Parameters Type Name Description System.String name The name of the PostingsFormat System.Type to retrieve. Returns Type Description System.Type The PostingsFormat System.Type . | Improve this Doc View Source Initialize() Initializes the codec type cache with the known PostingsFormat types. Override this method (and optionally call base.Initialize() ) to add your own PostingsFormat types by calling PutPostingsFormatType(Type) or ScanForPostingsFormats(Assembly) . If two types have the same name by using the PostingsFormatNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.PostingsFormat>.Initialize() | Improve this Doc View Source NewPostingsFormat(Type) Instantiates a PostingsFormat based on the provided type . Declaration protected virtual PostingsFormat NewPostingsFormat(Type type) Parameters Type Name Description System.Type type The System.Type of PostingsFormat to instantiate. Returns Type Description PostingsFormat The new instance. | Improve this Doc View Source PutPostingsFormatType(Type) Adds a PostingsFormat type to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap , using the name provided in the PostingsFormatNameAttribute , if present, or the name of the codec class minus the \"Codec\" suffix as the name by default. Note that if a PostingsFormat with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutPostingsFormatType(Type postingsFormat) Parameters Type Name Description System.Type postingsFormat A type that subclasses PostingsFormat . | Improve this Doc View Source ScanForPostingsFormats(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Note that names will be automatically overridden if the PostingsFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForPostingsFormats(IEnumerable<Assembly> assemblies) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Reflection.Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each PostingsFormat name wins. | Improve this Doc View Source ScanForPostingsFormats(Assembly) Scans the given assembly for subclasses of PostingsFormat and adds their names to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Note that names will be automatically overridden if the PostingsFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForPostingsFormats(Assembly assembly) Parameters Type Name Description System.Reflection.Assembly assembly The assembly to scan. Implements IPostingsFormatFactory IServiceListable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesConsumer.html",
    "title": "Class DocValuesConsumer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValuesConsumer Abstract API that consumes numeric, binary and sorted docvalues. Concrete implementations of this actually do \"something\" with the docvalues (write it into the index in a specific format). The lifecycle is: DocValuesConsumer is created by FieldsConsumer(SegmentWriteState) or NormsConsumer(SegmentWriteState) . AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , or AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) are called for each Numeric, Binary, or Sorted docvalues field. The API is a \"pull\" rather than \"push\", and the implementation is free to iterate over the values multiple times ( System.Collections.Generic.IEnumerable<T>.GetEnumerator() ). After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesConsumer Lucene45DocValuesConsumer 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesConsumer : IDisposable Constructors | Improve this Doc View Source DocValuesConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocValuesConsumer() Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Writes binary docvalues for a field. Declaration public abstract void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable<T> of binary values (one for each document). null indicates a missing value. Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Writes numeric docvalues for a field. Declaration public abstract void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> values System.Collections.Generic.IEnumerable<T> of numeric values (one for each document). null indicates a missing value. Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Writes pre-sorted binary docvalues for a field. Declaration public abstract void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable<T> of binary values in sorted order (deduplicated). System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrd System.Collections.Generic.IEnumerable<T> of ordinals (one for each document). -1 indicates a missing value. Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Writes pre-sorted set docvalues for a field Declaration public abstract void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable<T> of binary values in sorted order (deduplicated). System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrdCount System.Collections.Generic.IEnumerable<T> of the number of values for each document. A zero ordinal count indicates a missing value. System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> ords System.Collections.Generic.IEnumerable<T> of ordinal occurrences ( docToOrdCount *maxDoc total). Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) Merges the binary docvalues from toMerge . The default implementation calls AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , passing an System.Collections.Generic.IEnumerable<T> that merges and filters deleted documents on the fly. Declaration public virtual void MergeBinaryField(FieldInfo fieldInfo, MergeState mergeState, IList<BinaryDocValues> toMerge, IList<IBits> docsWithField) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < BinaryDocValues > toMerge System.Collections.Generic.IList < IBits > docsWithField | Improve this Doc View Source MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) Merges the numeric docvalues from toMerge . The default implementation calls AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , passing an System.Collections.Generic.IEnumerable<T> that merges and filters deleted documents on the fly. Declaration public virtual void MergeNumericField(FieldInfo fieldInfo, MergeState mergeState, IList<NumericDocValues> toMerge, IList<IBits> docsWithField) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < NumericDocValues > toMerge System.Collections.Generic.IList < IBits > docsWithField | Improve this Doc View Source MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) Merges the sorted docvalues from toMerge . The default implementation calls AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) , passing an System.Collections.Generic.IEnumerable<T> that merges ordinals and values and filters deleted documents. Declaration public virtual void MergeSortedField(FieldInfo fieldInfo, MergeState mergeState, IList<SortedDocValues> toMerge) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < SortedDocValues > toMerge | Improve this Doc View Source MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) Merges the sortedset docvalues from toMerge . The default implementation calls AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) , passing an System.Collections.Generic.IEnumerable<T> that merges ordinals and values and filters deleted documents. Declaration public virtual void MergeSortedSetField(FieldInfo fieldInfo, MergeState mergeState, IList<SortedSetDocValues> toMerge) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < SortedSetDocValues > toMerge Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormat.html",
    "title": "Class DocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValuesFormat Encodes/decodes per-document values. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. To implement your own format: Subclass this class. Subclass DefaultDocValuesFormatFactory , override the Initialize() method, and add the line base.ScanForDocValuesFormats(typeof(YourDocValuesFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludeDocValuesFormatFromScanAttribute to them so they are ignored by the scan. Set the new IDocValuesFormatFactory by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. If your format has dependencies, you may also override GetDocValuesFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. DocValuesFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomDocValuesFormat\", the format name will the same name without the \"DocValuesFormat\" suffix: \"MyCustom\". You can override this default behavior by using the DocValuesFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat Lucene40DocValuesFormat Lucene42DocValuesFormat Lucene45DocValuesFormat PerFieldDocValuesFormat 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) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesFormat Constructors | Improve this Doc View Source DocValuesFormat() Creates a new docvalues format. The provided name will be written into the index segment in some configurations (such as when using PerFieldDocValuesFormat ): in such configurations, for the segment to be read this class should be registered by subclassing DefaultDocValuesFormatFactory and calling ScanForDocValuesFormats(Assembly) in the class constructor. The new IDocValuesFormatFactory can be registered by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. Declaration protected DocValuesFormat() Properties | Improve this Doc View Source AvailableDocValuesFormats Returns a list of all available format names. Declaration public static ICollection<string> AvailableDocValuesFormats { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Name Unique name that's used to retrieve this format when reading the index. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Returns a DocValuesConsumer to write docvalues to the index. Declaration public abstract DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Returns a DocValuesProducer to read docvalues from the index. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an System.IO.IOException should be thrown by the implementation. System.IO.IOException s are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer | Improve this Doc View Source ForName(String) Looks up a format by name. Declaration public static DocValuesFormat ForName(string name) Parameters Type Name Description System.String name Returns Type Description DocValuesFormat | Improve this Doc View Source GetDocValuesFormatFactory() Gets the associated DocValuesFormat factory. Declaration public static IDocValuesFormatFactory GetDocValuesFormatFactory() Returns Type Description IDocValuesFormatFactory The DocValuesFormat factory. | Improve this Doc View Source SetDocValuesFormatFactory(IDocValuesFormatFactory) Sets the IDocValuesFormatFactory instance used to instantiate DocValuesFormat subclasses. Declaration public static void SetDocValuesFormatFactory(IDocValuesFormatFactory docValuesFormatFactory) Parameters Type Name Description IDocValuesFormatFactory docValuesFormatFactory The new IDocValuesFormatFactory . Exceptions Type Condition System.ArgumentNullException The docValuesFormatFactory parameter is null . | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also DefaultDocValuesFormatFactory IDocValuesFormatFactory DocValuesFormatNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormatNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormatNameAttribute.html",
    "title": "Class DocValuesFormatNameAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValuesFormatNameAttribute Represents an attribute that is used to name a DocValuesFormat , if a name other than the default DocValuesFormat naming convention is desired. Inheritance System.Object System.Attribute ServiceNameAttribute DocValuesFormatNameAttribute Inherited Members ServiceNameAttribute.Name System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public sealed class DocValuesFormatNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source DocValuesFormatNameAttribute(String) Declaration public DocValuesFormatNameAttribute(string name) Parameters Type Name Description System.String name"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesProducer.html",
    "title": "Class DocValuesProducer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValuesProducer Abstract API that produces numeric, binary and sorted docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesProducer Lucene45DocValuesProducer 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesProducer : IDisposable Constructors | Improve this Doc View Source DocValuesProducer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocValuesProducer() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this producer. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public virtual void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetBinary(FieldInfo) Returns BinaryDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract BinaryDocValues GetBinary(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(FieldInfo) Returns a IBits at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits | Improve this Doc View Source GetNumeric(FieldInfo) Returns NumericDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract NumericDocValues GetNumeric(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description NumericDocValues | Improve this Doc View Source GetSorted(FieldInfo) Returns SortedDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract SortedDocValues GetSorted(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSet(FieldInfo) Returns SortedSetDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract SortedSetDocValues GetSortedSet(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedSetDocValues | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludeCodecFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludeCodecFromScanAttribute.html",
    "title": "Class ExcludeCodecFromScanAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExcludeCodecFromScanAttribute When placed on a class that subclasses Codec , adding this attribute will exclude the type from consideration in the ScanForCodecs(Assembly) method. However, the Codec type can still be added manually using PutCodecType(Type) . Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludeCodecFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ExcludeCodecFromScanAttribute : ExcludeServiceAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludeDocValuesFormatFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludeDocValuesFormatFromScanAttribute.html",
    "title": "Class ExcludeDocValuesFormatFromScanAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExcludeDocValuesFormatFromScanAttribute When placed on a class that subclasses DocValuesFormat , adding this attribute will exclude the type from consideration in the ScanForDocValuesFormats(Assembly) method. However, the DocValuesFormat type can still be added manually using PutDocValuesFormatType(Type) . Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludeDocValuesFormatFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ExcludeDocValuesFormatFromScanAttribute : ExcludeServiceAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludePostingsFormatFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludePostingsFormatFromScanAttribute.html",
    "title": "Class ExcludePostingsFormatFromScanAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExcludePostingsFormatFromScanAttribute When placed on a class that subclasses PostingsFormat , adding this attribute will exclude the type from consideration in the ScanForPostingsFormats(Assembly) method. However, the PostingsFormat type can still be added manually using PutPostingsFormatType(Type) . Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludePostingsFormatFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ExcludePostingsFormatFromScanAttribute : ExcludeServiceAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosFormat.html",
    "title": "Class FieldInfosFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldInfosFormat Encodes/decodes FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene40FieldInfosFormat Lucene42FieldInfosFormat Lucene46FieldInfosFormat 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosFormat Constructors | Improve this Doc View Source FieldInfosFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Returns a FieldInfosReader to read field infos from the index. Declaration public abstract FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader | Improve this Doc View Source FieldInfosWriter Returns a FieldInfosWriter to write field infos to the index. Declaration public abstract FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosReader.html",
    "title": "Class FieldInfosReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldInfosReader Codec API for reading FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosReader 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosReader Constructors | Improve this Doc View Source FieldInfosReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosReader() Methods | Improve this Doc View Source Read(Directory, String, String, IOContext) Read the FieldInfos previously written with FieldInfosWriter . Declaration public abstract FieldInfos Read(Directory directory, string segmentName, string segmentSuffix, IOContext iocontext) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix IOContext iocontext Returns Type Description FieldInfos"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosWriter.html",
    "title": "Class FieldInfosWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldInfosWriter Codec API for writing FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosWriter Constructors | Improve this Doc View Source FieldInfosWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosWriter() Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Writes the provided FieldInfos to the directory. Declaration public abstract void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldsConsumer.html",
    "title": "Class FieldsConsumer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldsConsumer Abstract API that consumes terms, doc, freq, prox, offset and payloads postings. Concrete implementations of this actually do \"something\" with the postings (write it into the index in a specific format). The lifecycle is: FieldsConsumer is created by FieldsConsumer(SegmentWriteState) . For each field, AddField(FieldInfo) is called, returning a TermsConsumer for the field. After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTreeTermsWriter 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldsConsumer : IDisposable Constructors | Improve this Doc View Source FieldsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldsConsumer() Methods | Improve this Doc View Source AddField(FieldInfo) Add a new field. Declaration public abstract TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer | Improve this Doc View Source Dispose() Called when we are done adding everything. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Merge(MergeState, Fields) Called during merging to merge all Fields from sub-readers. this must recurse to merge all postings (terms, docs, positions, etc.). A PostingsFormat can override this default implementation to do its own merging. Declaration public virtual void Merge(MergeState mergeState, Fields fields) Parameters Type Name Description MergeState mergeState Fields fields Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldsProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldsProducer.html",
    "title": "Class FieldsProducer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldsProducer Abstract API that produces terms, doc, freq, prox, offset and payloads postings. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members Fields.GetEnumerator() Fields.IEnumerable.GetEnumerator() Fields.GetTerms(String) Fields.Count Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldsProducer : Fields, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source FieldsProducer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldsProducer() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FilterCodec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FilterCodec.html",
    "title": "Class FilterCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterCodec A codec that forwards all its method calls to another codec. Extend this class when you need to reuse the functionality of an existing codec. For example, if you want to build a codec that redefines Lucene46's LiveDocsFormat : public sealed class CustomCodec : FilterCodec { public CustomCodec() : base(\"CustomCodec\", new Lucene46Codec()) { } public override LiveDocsFormat LiveDocsFormat { get { return new CustomLiveDocsFormat(); } } } Please note: Don't call ForName(String) from the no-arg constructor of your own codec. When the DefaultCodecFactory loads your own Codec , the DefaultCodecFactory has not yet fully initialized! If you want to extend another Codec , instantiate it directly by calling its constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec FilterCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FilterCodec : Codec Constructors | Improve this Doc View Source FilterCodec(Codec) Sole constructor. When subclassing this codec, create a no-arg ctor and pass the delegate codec and a unique name to this ctor. Declaration protected FilterCodec(Codec delegate) Parameters Type Name Description Codec delegate Fields | Improve this Doc View Source m_delegate The codec to filter. Declaration protected readonly Codec m_delegate Field Value Type Description Codec Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.html",
    "title": "Namespace Lucene.Net.Codecs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs <!-- 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. --> Codecs for testing (simulate old disk formats, wacky theoretical use cases, etc) Classes BlockTermState Holds all state required for PostingsReaderBase to produce a DocsEnum without re-seeking the terms dict. BlockTreeTermsReader A block-based terms index and dictionary that assigns terms to variable length blocks according to how they share prefixes. The terms index is a prefix trie whose leaves are term blocks. The advantage of this approach is that SeekExact() is often able to determine a term cannot exist without doing any IO, and intersection with Automata is very fast. Note that this terms dictionary has it's own fixed terms index (ie, it does not support a pluggable terms index implementation). NOTE : this terms dictionary does not support index divisor when opening an IndexReader. Instead, you can change the min/maxItemsPerBlock during indexing. The data structure used by this implementation is very similar to a burst trie ( http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.3499 ), but with added logic to break up too-large blocks of all terms sharing a given prefix into smaller ones. Use CheckIndex with the -verbose option to see summary statistics on the blocks in the dictionary. See BlockTreeTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockTreeTermsReader.FieldReader BlockTree's implementation of GetTerms(String) . BlockTreeTermsReader.Stats BlockTree statistics for a single field returned by ComputeStats() . BlockTreeTermsWriter Block-based terms index and dictionary writer. Writes terms dict and index, block-encoding (column stride) each term's metadata for each set of terms between two index terms. Files: .tim: Term Dictionary .tip: Term Index Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and per-term metadata (typically pointers to the postings list for that term in the inverted index). The .tim is arranged in blocks: with blocks containing a variable number of entries (by default 25-48), where each entry is either a term or a reference to a sub-block. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections. TermsDict (.tim) --> Header, PostingsHeader , NodeBlock NumBlocks , FieldSummary, DirOffset, Footer NodeBlock --> (OuterNode | InnerNode) OuterNode --> EntryCount, SuffixLength, Byte SuffixLength , StatsLength, < TermStats > EntryCount , MetaLength, < TermMetadata > EntryCount InnerNode --> EntryCount, SuffixLength[,Sub?], Byte SuffixLength , StatsLength, < TermStats ? > EntryCount , MetaLength, < TermMetadata ? > EntryCount TermStats --> DocFreq, TotalTermFreq FieldSummary --> NumFields, <FieldNumber, NumTerms, RootCodeLength, Byte RootCodeLength , SumTotalTermFreq?, SumDocFreq, DocCount> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) DirOffset --> Uint64 ( WriteInt64(Int64) ) EntryCount,SuffixLength,StatsLength,DocFreq,MetaLength,NumFields, FieldNumber,RootCodeLength,DocCount --> VInt ( WriteVInt32(Int32) _ TotalTermFreq,NumTerms,SumTotalTermFreq,SumDocFreq --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the BlockTree implementation. DirOffset is a pointer to the FieldSummary section. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. this is encoded as the difference between the total number of occurrences and the DocFreq. FieldNumber is the fields number from Lucene.Net.Codecs.BlockTreeTermsWriter.fieldInfos . (.fnm) NumTerms is the number of unique terms for the field. RootCode points to the root block for the field. SumDocFreq is the total number of postings, the number of term-document pairs across the entire field. DocCount is the number of documents that have at least one posting for this field. PostingsHeader and TermMetadata are plugged into by the specific postings implementation: these contain arbitrary per-file data (such as parameters or versioning information) and per-term data (such as pointers to inverted files). For inner nodes of the tree, every entry will steal one bit to mark whether it points to child nodes(sub-block). If so, the corresponding TermStats and TermMetadata are omitted Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. The index is also used to determine when a given term cannot exist on disk (in the .tim file), saving a disk seek. TermsIndex (.tip) --> Header, FSTIndex NumFields <IndexStartFP> NumFields , DirOffset, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) IndexStartFP --> VLong ( WriteVInt64(Int64) FSTIndex --> FST{byte[]} Footer --> CodecFooter ( WriteFooter(IndexOutput) Notes: The .tip file contains a separate FST for each field. The FST maps a term prefix to the on-disk block that holds all terms starting with that prefix. Each field's IndexStartFP points to its FST. DirOffset is a pointer to the start of the IndexStartFPs for all fields It's possible that an on-disk block would contain too many terms (more than the allowed maximum (default: 48)). When this happens, the block is sub-divided into new blocks (called \"floor blocks\"), and then the output in the FST for the block's prefix encodes the leading byte of each sub-block, and its file pointer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Codec Encodes/decodes an inverted index segment. Note, when extending this class, the name ( Name ) is written into the index. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetCodec(String) to resolve codec names. To implement your own codec: Subclass this class. Subclass DefaultCodecFactory , override the Initialize() method, and add the line base.ScanForCodecs(typeof(YourCodec).GetTypeInfo().Assembly) . If you have any codec classes in your assembly that are not meant for reading, you can add the ExcludeCodecFromScanAttribute to them so they are ignored by the scan. set the new ICodecFactory by calling SetCodecFactory(ICodecFactory) at application startup. If your codec has dependencies, you may also override GetCodec(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. Codec Names Unlike the Java version, codec names are by default convention-based on the class name. If you name your custom codec class \"MyCustomCodec\", the codec name will the same name without the \"Codec\" suffix: \"MyCustom\". You can override this default behavior by using the CodecNameAttribute to name the codec differently than this convention. Codec names must be all ASCII alphanumeric, and less than 128 characters in length. CodecNameAttribute Represents an attribute that is used to name a Codec , if a name other than the default Codec naming convention is desired. CodecUtil Utility class for reading and writing versioned headers. Writing codec headers is useful to ensure that a file is in the format you think it is. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultCodecFactory LUCENENET specific class that implements the default functionality for the ICodecFactory . The most common use cases are: Initialize DefaultCodecFactory with a set of CustomCodecTypes . Subclass DefaultCodecFactory and override GetCodec(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetCodec(String) . Subclass DefaultCodecFactory and override GetCodecType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Subclass DefaultCodecFactory to add new or override the default Codec types by overriding Initialize() and calling PutCodecType(Type) . Subclass DefaultCodecFactory to scan additional assemblies for Codec subclasses in by overriding Initialize() and calling ScanForCodecs(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . DefaultDocValuesFormatFactory LUCENENET specific class that implements the default functionality for the IDocValuesFormatFactory . The most common use cases are: Initialize DefaultDocValuesFormatFactory with a set of CustomDocValuesFormatTypes . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetDocValuesFormat(String) . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Subclass DefaultDocValuesFormatFactory to add new or override the default DocValuesFormat types by overriding Initialize() and calling PutDocValuesFormatType(Type) . Subclass DefaultDocValuesFormatFactory to scan additional assemblies for DocValuesFormat subclasses in by overriding Initialize() and calling ScanForDocValuesFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . DefaultPostingsFormatFactory LUCENENET specific class that implements the default functionality for the IPostingsFormatFactory . The most common use cases are: Initialize DefaultPostingsFormatFactory with a set of CustomPostingsFormatTypes . Subclass DefaultPostingsFormatFactory and override GetPostingsFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetPostingsFormat(String) . Subclass DefaultPostingsFormatFactory and override GetPostingsFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Subclass DefaultPostingsFormatFactory to add new or override the default PostingsFormat types by overriding Initialize() and calling PutPostingsFormatType(Type) . Subclass DefaultPostingsFormatFactory to scan additional assemblies for PostingsFormat subclasses in by overriding Initialize() and calling ScanForPostingsFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . DocValuesConsumer Abstract API that consumes numeric, binary and sorted docvalues. Concrete implementations of this actually do \"something\" with the docvalues (write it into the index in a specific format). The lifecycle is: DocValuesConsumer is created by FieldsConsumer(SegmentWriteState) or NormsConsumer(SegmentWriteState) . AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , or AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) are called for each Numeric, Binary, or Sorted docvalues field. The API is a \"pull\" rather than \"push\", and the implementation is free to iterate over the values multiple times ( System.Collections.Generic.IEnumerable<T>.GetEnumerator() ). After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesFormat Encodes/decodes per-document values. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. To implement your own format: Subclass this class. Subclass DefaultDocValuesFormatFactory , override the Initialize() method, and add the line base.ScanForDocValuesFormats(typeof(YourDocValuesFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludeDocValuesFormatFromScanAttribute to them so they are ignored by the scan. Set the new IDocValuesFormatFactory by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. If your format has dependencies, you may also override GetDocValuesFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. DocValuesFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomDocValuesFormat\", the format name will the same name without the \"DocValuesFormat\" suffix: \"MyCustom\". You can override this default behavior by using the DocValuesFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesFormatNameAttribute Represents an attribute that is used to name a DocValuesFormat , if a name other than the default DocValuesFormat naming convention is desired. DocValuesProducer Abstract API that produces numeric, binary and sorted docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ExcludeCodecFromScanAttribute When placed on a class that subclasses Codec , adding this attribute will exclude the type from consideration in the ScanForCodecs(Assembly) method. However, the Codec type can still be added manually using PutCodecType(Type) . ExcludeDocValuesFormatFromScanAttribute When placed on a class that subclasses DocValuesFormat , adding this attribute will exclude the type from consideration in the ScanForDocValuesFormats(Assembly) method. However, the DocValuesFormat type can still be added manually using PutDocValuesFormatType(Type) . ExcludePostingsFormatFromScanAttribute When placed on a class that subclasses PostingsFormat , adding this attribute will exclude the type from consideration in the ScanForPostingsFormats(Assembly) method. However, the PostingsFormat type can still be added manually using PutPostingsFormatType(Type) . FieldInfosFormat Encodes/decodes FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInfosReader Codec API for reading FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInfosWriter Codec API for writing FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldsConsumer Abstract API that consumes terms, doc, freq, prox, offset and payloads postings. Concrete implementations of this actually do \"something\" with the postings (write it into the index in a specific format). The lifecycle is: FieldsConsumer is created by FieldsConsumer(SegmentWriteState) . For each field, AddField(FieldInfo) is called, returning a TermsConsumer for the field. After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldsProducer Abstract API that produces terms, doc, freq, prox, offset and payloads postings. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterCodec A codec that forwards all its method calls to another codec. Extend this class when you need to reuse the functionality of an existing codec. For example, if you want to build a codec that redefines Lucene46's LiveDocsFormat : public sealed class CustomCodec : FilterCodec { public CustomCodec() : base(\"CustomCodec\", new Lucene46Codec()) { } public override LiveDocsFormat LiveDocsFormat { get { return new CustomLiveDocsFormat(); } } } Please note: Don't call ForName(String) from the no-arg constructor of your own codec. When the DefaultCodecFactory loads your own Codec , the DefaultCodecFactory has not yet fully initialized! If you want to extend another Codec , instantiate it directly by calling its constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LiveDocsFormat Format for live/deleted documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MappingMultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MappingMultiDocsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiLevelSkipListReader This abstract class reads skip lists with multiple levels. See MultiLevelSkipListWriter for the information about the encoding of the multi level skip lists. Subclasses must implement the abstract method ReadSkipData(Int32, IndexInput) which defines the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiLevelSkipListWriter This abstract class writes skip lists with multiple levels. Example for skipInterval = 3: c (skip level 2) c c c (skip level 1) x x x x x x x x x x (skip level 0) d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) 3 6 9 12 15 18 21 24 27 30 (df) d - document x - skip data c - skip data with child pointer Skip level i contains every skipInterval-th entry from skip level i-1. Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. this guarantees a logarithmic amount of skips to find the target document. While this class takes care of writing the different skip levels, subclasses must define the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormsFormat Encodes/decodes per-document score normalization values. PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsConsumer Abstract API that consumes postings for an individual term. The lifecycle is: PostingsConsumer is returned for each term by StartTerm(BytesRef) . StartDoc(Int32, Int32) is called for each document where the term occurs, specifying id and term frequency for that document. If positions are enabled for the field, then AddPosition(Int32, BytesRef, Int32, Int32) will be called for each occurrence in the document. FinishDoc() is called when the producer is done adding positions to the document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsFormat Encodes/decodes terms, postings, and proximity data. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. If you implement your own format: Subclass this class. Subclass DefaultPostingsFormatFactory , override Initialize() , and add the line base.ScanForPostingsFormats(typeof(YourPostingsFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludePostingsFormatFromScanAttribute to them so they are ignored by the scan. Set the new IPostingsFormatFactory by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. If your format has dependencies, you may also override GetPostingsFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. PostingsFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomPostingsFormat\", the codec name will the same name without the \"PostingsFormat\" suffix: \"MyCustom\". You can override this default behavior by using the PostingsFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsFormatNameAttribute Represents an attribute that is used to name a PostingsFormat , if a name other than the default PostingsFormat naming convention is desired. PostingsReaderBase The core terms dictionaries (BlockTermsReader, BlockTreeTermsReader ) interact with a single instance of this class to manage creation of DocsEnum and DocsAndPositionsEnum instances. It provides an IndexInput (termsIn) where this class may read any previously stored data that it had written in its corresponding PostingsWriterBase at indexing time. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsWriterBase Extension of PostingsConsumer to support pluggable term dictionaries. This class contains additional hooks to interact with the provided term dictionaries such as BlockTreeTermsWriter . If you want to re-use an existing implementation and are only interested in customizing the format of the postings list, extend this class instead. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoFormat Expert: Controls the format of the SegmentInfo (segment metadata file). This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoReader Specifies an API for classes that can read SegmentInfo information. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoWriter Specifies an API for classes that can write out SegmentInfo data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StoredFieldsFormat Controls the format of stored fields. StoredFieldsReader Codec API for reading stored fields. You need to implement VisitDocument(Int32, StoredFieldVisitor) to read the stored fields for a document, implement Clone() (creating clones of any IndexInput s used, etc), and Dispose(Boolean) to cleanup any allocated resources. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StoredFieldsWriter Codec API for writing stored fields: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. WriteField(FieldInfo, IIndexableField) is called for each field in the document. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsConsumer Abstract API that consumes terms for an individual field. The lifecycle is: TermsConsumer is returned for each field by AddField(FieldInfo) . TermsConsumer returns a PostingsConsumer for each term in StartTerm(BytesRef) . When the producer (e.g. IndexWriter) is done adding documents for the term, it calls FinishTerm(BytesRef, TermStats) , passing in the accumulated term statistics. Producer calls Finish(Int64, Int64, Int32) with the accumulated collection statistics when it is finished adding terms to the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermStats Holder for per-term statistics. TermVectorsFormat Controls the format of term vectors. TermVectorsReader Codec API for reading term vectors: This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermVectorsWriter Codec API for writing term vectors: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) is called for each field in the document, informing the codec how many terms will be written for that field, and whether or not positions, offsets, or payloads are enabled. Within each field, StartTerm(BytesRef, Int32) is called for each term. If offsets and/or positions are enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called for each term occurrence. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces ICodecFactory LUCENENET specific contract for extending the functionality of Codec implementations so they can be injected with dependencies. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . IDocValuesFormatFactory LUCENENET specific contract for extending the functionality of DocValuesFormat implementations so they can be injected with dependencies. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . IPostingsFormatFactory LUCENENET specific contract for extending the functionality of PostingsFormat implementations so they can be injected with dependencies. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) ."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ICodecFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ICodecFactory.html",
    "title": "Interface ICodecFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICodecFactory LUCENENET specific contract for extending the functionality of Codec implementations so they can be injected with dependencies. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface ICodecFactory Methods | Improve this Doc View Source GetCodec(String) Gets the Codec instance from the provided name . Declaration Codec GetCodec(string name) Parameters Type Name Description System.String name The name of the Codec instance to retrieve. Returns Type Description Codec The Codec instance. See Also DefaultCodecFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.IDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.IDocValuesFormatFactory.html",
    "title": "Interface IDocValuesFormatFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IDocValuesFormatFactory LUCENENET specific contract for extending the functionality of DocValuesFormat implementations so they can be injected with dependencies. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface IDocValuesFormatFactory Methods | Improve this Doc View Source GetDocValuesFormat(String) Gets the DocValuesFormat instance from the provided name . Declaration DocValuesFormat GetDocValuesFormat(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat instance to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. See Also DefaultDocValuesFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.IPostingsFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.IPostingsFormatFactory.html",
    "title": "Interface IPostingsFormatFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IPostingsFormatFactory LUCENENET specific contract for extending the functionality of PostingsFormat implementations so they can be injected with dependencies. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface IPostingsFormatFactory Methods | Improve this Doc View Source GetPostingsFormat(String) Gets the PostingsFormat instance from the provided name . Declaration PostingsFormat GetPostingsFormat(string name) Parameters Type Name Description System.String name The name of the PostingsFormat instance to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. See Also DefaultPostingsFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.LiveDocsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.LiveDocsFormat.html",
    "title": "Class LiveDocsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LiveDocsFormat Format for live/deleted documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LiveDocsFormat Lucene40LiveDocsFormat 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class LiveDocsFormat Constructors | Improve this Doc View Source LiveDocsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected LiveDocsFormat() Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Records all files in use by this SegmentCommitInfo into the files argument. Declaration public abstract void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info System.Collections.Generic.ICollection < System.String > files | Improve this Doc View Source NewLiveDocs(IBits) Creates a new mutablebits of the same bits set and size of existing. Declaration public abstract IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits | Improve this Doc View Source NewLiveDocs(Int32) Creates a new MutableBits, with all bits set, for the specified size. Declaration public abstract IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Read live docs bits. Declaration public abstract IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Persist live docs bits. Use NextDelGen to determine the generation of the deletes file you should write to. Declaration public abstract void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene3x | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene3x <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for generating test indexes in the Lucene 3.x index format. NOTE: This is not a perfect simulation of the 3.x format, but its close. Particularly, indexes generated with this codec cannot actually be read with Lucene 3.x Classes Lucene3xCodec Supports the Lucene 3.x index format (readonly) Lucene3xSegmentInfoFormat Lucene3x ReadOnly SegmentInfoFormat implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene3xSegmentInfoReader Lucene 3x implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xCodec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xCodec.html",
    "title": "Class Lucene3xCodec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene3xCodec Supports the Lucene 3.x index format (readonly) Inheritance System.Object Codec Lucene3xCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading existing 3.x indexes\")] [CodecName(\"Lucene3x\")] public class Lucene3xCodec : Codec Constructors | Improve this Doc View Source Lucene3xCodec() Declaration public Lucene3xCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocStoreFiles(SegmentInfo) Returns file names for shared doc stores, if any, else null . Declaration public static ISet<string> GetDocStoreFiles(SegmentInfo info) Parameters Type Name Description SegmentInfo info Returns Type Description System.Collections.Generic.ISet < System.String >"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoFormat.html",
    "title": "Class Lucene3xSegmentInfoFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene3xSegmentInfoFormat Lucene3x ReadOnly SegmentInfoFormat implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene3xSegmentInfoFormat 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.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax [Obsolete(\"(4.0) this is only used to read indexes created before 4.0.\")] public class Lucene3xSegmentInfoFormat : SegmentInfoFormat Fields | Improve this Doc View Source DS_COMPOUND_KEY Declaration public static readonly string DS_COMPOUND_KEY Field Value Type Description System.String | Improve this Doc View Source DS_NAME_KEY Declaration public static readonly string DS_NAME_KEY Field Value Type Description System.String | Improve this Doc View Source DS_OFFSET_KEY Declaration public static readonly string DS_OFFSET_KEY Field Value Type Description System.String | Improve this Doc View Source FORMAT_3_1 Each segment records the Lucene version that created it. Declaration public static readonly int FORMAT_3_1 Field Value Type Description System.Int32 | Improve this Doc View Source FORMAT_DIAGNOSTICS This format adds optional per-segment String diagnostics storage, and switches userData to Map. Declaration public static readonly int FORMAT_DIAGNOSTICS Field Value Type Description System.Int32 | Improve this Doc View Source FORMAT_HAS_VECTORS Each segment records whether it has term vectors. Declaration public static readonly int FORMAT_HAS_VECTORS Field Value Type Description System.Int32 | Improve this Doc View Source NORMGEN_KEY Declaration public static readonly string NORMGEN_KEY Field Value Type Description System.String | Improve this Doc View Source NORMGEN_PREFIX Declaration public static readonly string NORMGEN_PREFIX Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_CODEC_NAME Declaration public static readonly string UPGRADED_SI_CODEC_NAME Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_EXTENSION Extension used for saving each SegmentInfo, once a 3.x index is first committed to with 4.0. Declaration public static readonly string UPGRADED_SI_EXTENSION Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_VERSION_CURRENT Declaration public static readonly int UPGRADED_SI_VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source UPGRADED_SI_VERSION_START Declaration public static readonly int UPGRADED_SI_VERSION_START Field Value Type Description System.Int32 Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter Methods | Improve this Doc View Source GetDocStoreIsCompoundFile(SegmentInfo) Declaration public static bool GetDocStoreIsCompoundFile(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.Boolean Whether doc store files are stored in compound file (*.cfx). | Improve this Doc View Source GetDocStoreOffset(SegmentInfo) Declaration public static int GetDocStoreOffset(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.Int32 If this segment shares stored fields & vectors, this offset is where in that file this segment's docs begin. | Improve this Doc View Source GetDocStoreSegment(SegmentInfo) Declaration public static string GetDocStoreSegment(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.String Name used to derive fields/vectors file we share with other segments."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoReader.html",
    "title": "Class Lucene3xSegmentInfoReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene3xSegmentInfoReader Lucene 3x implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene3xSegmentInfoReader 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.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading existing 3.x indexes\")] public class Lucene3xSegmentInfoReader : SegmentInfoReader Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory System.String segmentName IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) | Improve this Doc View Source ReadLegacyInfos(SegmentInfos, Directory, IndexInput, Int32) Declaration public static void ReadLegacyInfos(SegmentInfos infos, Directory directory, IndexInput input, int format) Parameters Type Name Description SegmentInfos infos Directory directory IndexInput input System.Int32 format"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene40 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene40 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene40PostingsFormat . Classes Lucene40Codec Implements the Lucene 4.0 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene40 package documentation for file format details. Lucene40DocValuesFormat Lucene 4.0 DocValues format. Files: .dv.cfs : compound container ( CompoundFileDirectory ) .dv.cfe : compound entries ( CompoundFileDirectory ) Entries within the compound file: <segment> <fieldNumber>.dat : data values <segment><fieldNumber>.idx : index into the .dat for DEREF types There are several many types of DocValues with different encodings. From the perspective of filenames, all types store their values in .dat entries within the compound file. In the case of dereferenced/sorted types, the .dat actually contains only the unique values, and an additional .idx file contains pointers to these unique values. Formats: Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS .dat --> Header, PackedType, MinValue, DefaultValue, PackedStream Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 .dat --> Header, ValueSize, Byte ( WriteByte(Byte) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 .dat --> Header, ValueSize, Short ( WriteInt16(Int16) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 .dat --> Header, ValueSize, Int32 ( WriteInt32(Int32) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 .dat --> Header, ValueSize, Int64 ( WriteInt64(Int64) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 .dat --> Header, ValueSize, Float32 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 .dat --> Header, ValueSize, Float64 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .idx --> Header, TotalBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .idx --> Header, NumValues, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .idx --> Header, TotalVarBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .dat --> Header, (LengthPrefix + Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .idx --> Header, NumValues, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .idx --> Header, TotalVarBytes, Addresses, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Data Types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedType --> Byte ( WriteByte(Byte) ) MaxAddress, MinValue, DefaultValue --> Int64 ( WriteInt64(Int64) ) PackedStream, Addresses, Ordinals --> PackedInt32s ValueSize, NumValues --> Int32 ( WriteInt32(Int32) ) Float32 --> 32-bit float encoded with J2N.BitConversion.SingleToRawInt32Bits(System.Single) then written as Int32 ( WriteInt32(Int32) ) Float64 --> 64-bit float encoded with J2N.BitConversion.DoubleToRawInt64Bits(System.Double) then written as Int64 ( WriteInt64(Int64) ) TotalBytes --> VLong ( WriteVInt64(Int64) ) TotalVarBytes --> Int64 ( WriteInt64(Int64) ) LengthPrefix --> Length of the data value as VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes) Notes: PackedType is a 0 when compressed, 1 when the stream is written as 64-bit integers. Addresses stores pointers to the actual byte location (indexed by docid). In the VAR_STRAIGHT case, each entry can have a different length, so to determine the length, docid+1 is retrieved. A sentinel address is written at the end for the VAR_STRAIGHT case, so the Addresses stream contains maxdoc+1 indices. For the deduplicated VAR_DEREF case, each length is encoded as a prefix to the data itself as a VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes). Ordinals stores the term ID in sorted order (indexed by docid). In the FIXED_SORTED case, the address into the .dat can be computed from the ordinal as Header+ValueSize+(ordinal*ValueSize) because the byte length is fixed. In the VAR_SORTED case, there is double indirection (docid -> ordinal -> address), but an additional sentinel ordinal+address is always written (so there are NumValues+1 ordinals). To determine the length, ord+1's address is looked up as well. Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT in contrast to other straight variants uses a .idx file to improve lookup perfromance. In contrast to Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF it doesn't apply deduplication of the document values. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Lucene40FieldInfosFormat Lucene 4.0 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: variable-width signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS ) 2: 32-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 ) 3: 64-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 ) 4: fixed-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT ) 5: fixed-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF ) 6: variable-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT ) 7: variable-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF ) 8: 16-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 ) 9: 32-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 ) 10: 64-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 ) 11: 8-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 ) 12: fixed-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED ) 13: variable-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40LiveDocsFormat Lucene 4.0 Live Documents Format. The .del file is optional, and only exists when a segment contains deletions. Although per-segment, this file is maintained exterior to compound segment files. Deletions (.del) --> Format,Header,ByteCount,BitCount, Bits | DGaps (depending on Format) Format,ByteSize,BitCount --> Uint32 ( WriteInt32(Int32) ) Bits --> < Byte ( WriteByte(Byte) ) > ByteCount DGaps --> <DGap,NonOnesByte> NonzeroBytesCount DGap --> VInt ( WriteVInt32(Int32) ) NonOnesByte --> Byte( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Format is 1: indicates cleared DGaps. ByteCount indicates the number of bytes in Bits. It is typically (SegSize/8)+1. BitCount indicates the number of bits that are currently set in Bits. Bits contains one bit for each document indexed. When the bit corresponding to a document number is cleared, that document is marked as deleted. Bit ordering is from least to most significant. Thus, if Bits contains two bytes, 0x00 and 0x02, then document 9 is marked as alive (not deleted). DGaps represents sparse bit-vectors more efficiently than Bits. It is made of DGaps on indexes of nonOnes bytes in Bits, and the nonOnes bytes themselves. The number of nonOnes bytes in Bits (NonOnesBytesCount) is not stored. For example, if there are 8000 bits and only bits 10,12,32 are cleared, DGaps would be used: (VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1 Lucene40NormsFormat Lucene 4.0 Norms Format. Files: .nrm.cfs : compound container ( CompoundFileDirectory ) .nrm.cfe : compound entries ( CompoundFileDirectory ) Norms are implemented as DocValues, so other than file extension, norms are written exactly the same way as Lucene40DocValuesFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . Lucene40PostingsFormat Lucene 4.0 Postings format. Files: .tim : Term Dictionary .tip : Term Index .frq : Frequencies .prx : Positions Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions and skip data in the .frq and .prx files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections described here: Postings Metadata --> Header, SkipInterval, MaxSkipLevels, SkipMinimum Term Metadata --> FreqDelta, SkipDelta?, ProxDelta? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SkipInterval,MaxSkipLevels,SkipMinimum --> Uint32 ( WriteInt32(Int32) ) SkipDelta,FreqDelta,ProxDelta --> VLong ( WriteVInt64(Int64) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. SkipInterval is the fraction of TermDocs stored in skip tables. It is used to accelerate Advance(Int32) . Larger values result in smaller indexes, greater acceleration, but fewer accelerable cases, while smaller values result in bigger indexes, less acceleration (in case of a small value for MaxSkipLevels) and more accelerable cases. MaxSkipLevels is the max. number of skip levels stored for each term in the .frq file. A low value results in smaller indexes but less acceleration, a larger value results in slightly larger indexes but greater acceleration. See format of .frq file for more information about skip levels. SkipMinimum is the minimum document frequency a term must have in order to write any skip data at all. FreqDelta determines the position of this term's TermFreqs within the .frq file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block). ProxDelta determines the position of this term's TermPositions within the .prx file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block. For fields that omit position data, this will be 0 since prox information is not stored. SkipDelta determines the position of this term's SkipData within the .frq file. In particular, it is the number of bytes after TermFreqs that the SkipData starts. In other words, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies The .frq file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). FreqFile (.frq) --> Header, <TermFreqs, SkipData?> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <TermFreq> DocFreq TermFreq --> DocDelta[, Freq?] SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel> <SkipDatum> SkipLevel --> <SkipDatum> DocFreq/(SkipInterval^(Level + 1)) SkipDatum --> DocSkip,PayloadLength?,OffsetLength?,FreqSkip,ProxSkip,SkipChildLevelPointer? DocDelta,Freq,DocSkip,PayloadLength,OffsetLength,FreqSkip,ProxSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) TermFreqs are ordered by term (the term is implicit, from the term dictionary). TermFreq entries are ordered by increasing document number. DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 DocSkip records the document number before every SkipInterval th document in TermFreqs. If payloads and offsets are disabled for the term's field, then DocSkip represents the difference from the previous value in the sequence. If payloads and/or offsets are enabled for the term's field, then DocSkip/2 represents the difference from the previous value in the sequence. In this case when DocSkip is odd, then PayloadLength and/or OffsetLength are stored indicating the length of the last payload/offset before the SkipInterval th document in TermPositions. PayloadLength indicates the length of the last payload. OffsetLength indicates the length of the last offset (endOffset-startOffset). FreqSkip and ProxSkip record the position of every SkipInterval th entry in FreqFile and ProxFile, respectively. File positions are relative to the start of TermFreqs and Positions, to the previous SkipDatum in the sequence. For example, if DocFreq=35 and SkipInterval=16, then there are two SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The first FreqSkip names the number of bytes after the beginning of TermFreqs that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. The first ProxSkip names the number of bytes after the beginning of Positions that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. Each term can have multiple skip levels. The amount of skip levels for a term is NumSkipLevels = Min(MaxSkipLevels, floor(log(DocFreq/log(SkipInterval)))). The number of SkipData entries for a skip level is DocFreq/(SkipInterval^(Level + 1)), whereas the lowest skip level is Level=0. Example: SkipInterval = 4, MaxSkipLevels = 2, DocFreq = 35. Then skip level 0 has 8 SkipData entries, containing the 3 rd , 7 th , 11 th , 15 th , 19 th , 23 rd , 27 th , and 31 st document numbers in TermFreqs. Skip level 1 has 2 SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The SkipData entries on all upper levels > 0 contain a SkipChildLevelPointer referencing the corresponding SkipData entry in level-1. In the example has entry 15 on level 1 a pointer to entry 15 on level 0 and entry 31 on level 1 a pointer to entry 31 on level 0. Positions The .prx file contains the lists of positions that each term occurs at within documents. Note that fields omitting positional data do not store anything into this file, and if all fields in the index omit positional data then the .prx file will not exist. ProxFile (.prx) --> Header, <TermPositions> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <Positions> DocFreq Positions --> <PositionDelta,PayloadLength?,OffsetDelta?,OffsetLength?,PayloadData?> Freq PositionDelta,OffsetDelta,OffsetLength,PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayloadLength TermPositions are ordered by term (the term is implicit, from the term dictionary). Positions entries are ordered by increasing document number (the document number is implicit from the .frq file). PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Lucene40PostingsReader Concrete class that reads the 4.0 frq/prox postings format. Lucene40SegmentInfoFormat Lucene 4.0 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics, Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. Checksum contains the CRC32 checksum of all bytes in the segments_N file up until the checksum. This is used to verify integrity of the file on opening the index. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Attributes: a key-value map of codec-private attributes. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40SegmentInfoReader Lucene 4.0 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40SkipListReader Implements the skip list reader for the 4.0 posting list format that stores positions and payloads. Lucene40StoredFieldsFormat Lucene 4.0 Stored Fields Format. Stored fields are represented by two files: The field index, or .fdx file. This is used to find the location within the field data file of the fields of a particular document. Because it contains fixed-length data, this file may be easily randomly accessed. The position of document n 's field data is the Uint64 ( WriteInt64(Int64) ) at n*8 in this file. This contains, for each document, a pointer to its field data, as follows: FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldValuesPosition --> Uint64 ( WriteInt64(Int64) ) The field data, or .fdt file. This contains the stored fields of each document, as follows: FieldData (.fdt) --> <Header>, <DocFieldData> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount FieldCount --> VInt ( WriteVInt32(Int32) ) FieldNum --> VInt ( WriteVInt32(Int32) ) Bits --> Byte ( WriteByte(Byte) ) low order bit reserved. second bit is one for fields containing binary data third bit reserved. 4th to 6th bit (mask: 0x7<<3) define the type of a numeric field: all bits in mask are cleared if no numeric field at all 1<<3: Value is Int 2<<3: Value is Long 3<<3: Value is Int as Float (as of J2N.BitConversion.Int32BitsToSingle(System.Int32) 4<<3: Value is Long as Double (as of J2N.BitConversion.Int64BitsToDouble(System.Int64) Value --> String | BinaryValue | Int | Long (depending on Bits) BinaryValue --> ValueSize, < Byte ( WriteByte(Byte) ) >^ValueSize ValueSize --> VInt ( WriteVInt32(Int32) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40StoredFieldsReader Class responsible for access to stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET INTERNAL API, use at your own risk Lucene40StoredFieldsWriter Class responsible for writing stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40TermVectorsFormat Lucene 4.0 Term Vectors format. Term Vector support is an optional on a field by field basis. It consists of 3 files. The Document Index or .tvx file. For each document, this stores the offset into the document data (.tvd) and field data (.tvf) files. DocumentIndex (.tvx) --> Header,<DocumentPosition,FieldPosition> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocumentPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvd file) FieldPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvf file) The Document or .tvd file. This contains, for each document, the number of fields, a list of the fields with term vector info and finally a list of pointers to the field information in the .tvf (Term Vector Fields) file. The .tvd file is used to map out the fields that have term vectors stored and where the field information is in the .tvf file. Document (.tvd) --> Header,<NumFields, FieldNums, FieldPositions> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumFields --> VInt ( WriteVInt32(Int32) ) FieldNums --> <FieldNumDelta> NumFields FieldNumDelta --> VInt ( WriteVInt32(Int32) ) FieldPositions --> <FieldPositionDelta> NumFields-1 FieldPositionDelta --> VLong ( WriteVInt64(Int64) ) The Field or .tvf file. This file contains, for each field that has a term vector stored, a list of the terms, their frequencies and, optionally, position, offset, and payload information. Field (.tvf) --> Header,<NumTerms, Flags, TermFreqs> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumTerms --> VInt ( WriteVInt32(Int32) ) Flags --> Byte ( WriteByte(Byte) ) TermFreqs --> <TermText, TermFreq, Positions?, PayloadData?, Offsets?> NumTerms TermText --> <PrefixLength, Suffix> PrefixLength --> VInt ( WriteVInt32(Int32) ) Suffix --> String ( WriteString(String) ) TermFreq --> VInt ( WriteVInt32(Int32) ) Positions --> <PositionDelta PayloadLength?> TermFreq PositionDelta --> VInt ( WriteVInt32(Int32) ) PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> Byte ( WriteByte(Byte) ) NumPayloadBytes Offsets --> <VInt ( WriteVInt32(Int32) ), VInt ( WriteVInt32(Int32) ) > TermFreq Notes: Flags byte stores whether this term vector has position, offset, payload. information stored. Term byte prefixes are shared. The PrefixLength is the number of initial bytes from the previous term which must be pre-pended to a term's suffix in order to form the term's bytes. Thus, if the previous term's text was \"bone\" and the term is \"boy\", the PrefixLength is two and the suffix is \"y\". PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. PayloadData is metadata associated with a term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. PayloadData encodes the concatenated bytes for all of a terms occurrences. Offsets are stored as delta encoded VInts. The first VInt is the startOffset, the second is the endOffset. Lucene40TermVectorsReader Lucene 4.0 Term Vectors reader. It reads .tvd, .tvf, and .tvx files. Lucene40TermVectorsWriter Lucene 4.0 Term Vectors writer. It writes .tvd, .tvf, and .tvx files."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40Codec.html",
    "title": "Class Lucene40Codec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40Codec Implements the Lucene 4.0 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene40 package documentation for file format details. Inheritance System.Object Codec Lucene40Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] [CodecName(\"Lucene40\")] public class Lucene40Codec : Codec Constructors | Improve this Doc View Source Lucene40Codec() Sole constructor. Declaration public Lucene40Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene40\". Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40DocValuesFormat.html",
    "title": "Class Lucene40DocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40DocValuesFormat Lucene 4.0 DocValues format. Files: .dv.cfs : compound container ( CompoundFileDirectory ) .dv.cfe : compound entries ( CompoundFileDirectory ) Entries within the compound file: <segment> <fieldNumber>.dat : data values <segment><fieldNumber>.idx : index into the .dat for DEREF types There are several many types of DocValues with different encodings. From the perspective of filenames, all types store their values in .dat entries within the compound file. In the case of dereferenced/sorted types, the .dat actually contains only the unique values, and an additional .idx file contains pointers to these unique values. Formats: Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS .dat --> Header, PackedType, MinValue, DefaultValue, PackedStream Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 .dat --> Header, ValueSize, Byte ( WriteByte(Byte) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 .dat --> Header, ValueSize, Short ( WriteInt16(Int16) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 .dat --> Header, ValueSize, Int32 ( WriteInt32(Int32) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 .dat --> Header, ValueSize, Int64 ( WriteInt64(Int64) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 .dat --> Header, ValueSize, Float32 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 .dat --> Header, ValueSize, Float64 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .idx --> Header, TotalBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .idx --> Header, NumValues, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .idx --> Header, TotalVarBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .dat --> Header, (LengthPrefix + Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .idx --> Header, NumValues, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .idx --> Header, TotalVarBytes, Addresses, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Data Types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedType --> Byte ( WriteByte(Byte) ) MaxAddress, MinValue, DefaultValue --> Int64 ( WriteInt64(Int64) ) PackedStream, Addresses, Ordinals --> PackedInt32s ValueSize, NumValues --> Int32 ( WriteInt32(Int32) ) Float32 --> 32-bit float encoded with J2N.BitConversion.SingleToRawInt32Bits(System.Single) then written as Int32 ( WriteInt32(Int32) ) Float64 --> 64-bit float encoded with J2N.BitConversion.DoubleToRawInt64Bits(System.Double) then written as Int64 ( WriteInt64(Int64) ) TotalBytes --> VLong ( WriteVInt64(Int64) ) TotalVarBytes --> Int64 ( WriteInt64(Int64) ) LengthPrefix --> Length of the data value as VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes) Notes: PackedType is a 0 when compressed, 1 when the stream is written as 64-bit integers. Addresses stores pointers to the actual byte location (indexed by docid). In the VAR_STRAIGHT case, each entry can have a different length, so to determine the length, docid+1 is retrieved. A sentinel address is written at the end for the VAR_STRAIGHT case, so the Addresses stream contains maxdoc+1 indices. For the deduplicated VAR_DEREF case, each length is encoded as a prefix to the data itself as a VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes). Ordinals stores the term ID in sorted order (indexed by docid). In the FIXED_SORTED case, the address into the .dat can be computed from the ordinal as Header+ValueSize+(ordinal*ValueSize) because the byte length is fixed. In the VAR_SORTED case, there is double indirection (docid -> ordinal -> address), but an additional sentinel ordinal+address is always written (so there are NumValues+1 ordinals). To determine the length, ord+1's address is looked up as well. Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT in contrast to other straight variants uses a .idx file to improve lookup perfromance. In contrast to Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF it doesn't apply deduplication of the document values. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Inheritance System.Object DocValuesFormat Lucene40DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 and 4.1 segments\")] [DocValuesFormatName(\"Lucene40\")] public class Lucene40DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene40DocValuesFormat() Sole constructor. Declaration public Lucene40DocValuesFormat() Fields | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosFormat.html",
    "title": "Class Lucene40FieldInfosFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40FieldInfosFormat Lucene 4.0 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: variable-width signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS ) 2: 32-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 ) 3: 64-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 ) 4: fixed-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT ) 5: fixed-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF ) 6: variable-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT ) 7: variable-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF ) 8: 16-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 ) 9: 32-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 ) 10: 64-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 ) 11: 8-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 ) 12: fixed-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED ) 13: variable-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene40FieldInfosFormat 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 and 4.1 segments\")] public class Lucene40FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene40FieldInfosFormat() Sole constructor. Declaration public Lucene40FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40LiveDocsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40LiveDocsFormat.html",
    "title": "Class Lucene40LiveDocsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40LiveDocsFormat Lucene 4.0 Live Documents Format. The .del file is optional, and only exists when a segment contains deletions. Although per-segment, this file is maintained exterior to compound segment files. Deletions (.del) --> Format,Header,ByteCount,BitCount, Bits | DGaps (depending on Format) Format,ByteSize,BitCount --> Uint32 ( WriteInt32(Int32) ) Bits --> < Byte ( WriteByte(Byte) ) > ByteCount DGaps --> <DGap,NonOnesByte> NonzeroBytesCount DGap --> VInt ( WriteVInt32(Int32) ) NonOnesByte --> Byte( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Format is 1: indicates cleared DGaps. ByteCount indicates the number of bytes in Bits. It is typically (SegSize/8)+1. BitCount indicates the number of bits that are currently set in Bits. Bits contains one bit for each document indexed. When the bit corresponding to a document number is cleared, that document is marked as deleted. Bit ordering is from least to most significant. Thus, if Bits contains two bytes, 0x00 and 0x02, then document 9 is marked as alive (not deleted). DGaps represents sparse bit-vectors more efficiently than Bits. It is made of DGaps on indexes of nonOnes bytes in Bits, and the nonOnes bytes themselves. The number of nonOnes bytes in Bits (NonOnesBytesCount) is not stored. For example, if there are 8000 bits and only bits 10,12,32 are cleared, DGaps would be used: (VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1 Inheritance System.Object LiveDocsFormat Lucene40LiveDocsFormat 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40LiveDocsFormat : LiveDocsFormat Constructors | Improve this Doc View Source Lucene40LiveDocsFormat() Sole constructor. Declaration public Lucene40LiveDocsFormat() Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Declaration public override void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info System.Collections.Generic.ICollection < System.String > files Overrides LiveDocsFormat.Files(SegmentCommitInfo, ICollection<String>) | Improve this Doc View Source NewLiveDocs(IBits) Declaration public override IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(IBits) | Improve this Doc View Source NewLiveDocs(Int32) Declaration public override IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(Int32) | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Declaration public override IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits Overrides LiveDocsFormat.ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Declaration public override void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context Overrides LiveDocsFormat.WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40NormsFormat.html",
    "title": "Class Lucene40NormsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40NormsFormat Lucene 4.0 Norms Format. Files: .nrm.cfs : compound container ( CompoundFileDirectory ) .nrm.cfe : compound entries ( CompoundFileDirectory ) Norms are implemented as DocValues, so other than file extension, norms are written exactly the same way as Lucene40DocValuesFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NormsFormat Lucene40NormsFormat 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 and 4.1 segments\")] public class Lucene40NormsFormat : NormsFormat Constructors | Improve this Doc View Source Lucene40NormsFormat() Sole constructor. Declaration public Lucene40NormsFormat() Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState) See Also Lucene40DocValuesFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsBaseFormat.html",
    "title": "Class Lucene40PostingsBaseFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . Inheritance System.Object PostingsBaseFormat Lucene40PostingsBaseFormat Inherited Members PostingsBaseFormat.Name 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] public sealed class Lucene40PostingsBaseFormat : PostingsBaseFormat Constructors | Improve this Doc View Source Lucene40PostingsBaseFormat() Sole constructor. Declaration public Lucene40PostingsBaseFormat() Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Declaration public override PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase Overrides PostingsBaseFormat.PostingsReaderBase(SegmentReadState) | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Declaration public override PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase Overrides PostingsBaseFormat.PostingsWriterBase(SegmentWriteState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsFormat.html",
    "title": "Class Lucene40PostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40PostingsFormat Lucene 4.0 Postings format. Files: .tim : Term Dictionary .tip : Term Index .frq : Frequencies .prx : Positions Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions and skip data in the .frq and .prx files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections described here: Postings Metadata --> Header, SkipInterval, MaxSkipLevels, SkipMinimum Term Metadata --> FreqDelta, SkipDelta?, ProxDelta? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SkipInterval,MaxSkipLevels,SkipMinimum --> Uint32 ( WriteInt32(Int32) ) SkipDelta,FreqDelta,ProxDelta --> VLong ( WriteVInt64(Int64) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. SkipInterval is the fraction of TermDocs stored in skip tables. It is used to accelerate Advance(Int32) . Larger values result in smaller indexes, greater acceleration, but fewer accelerable cases, while smaller values result in bigger indexes, less acceleration (in case of a small value for MaxSkipLevels) and more accelerable cases. MaxSkipLevels is the max. number of skip levels stored for each term in the .frq file. A low value results in smaller indexes but less acceleration, a larger value results in slightly larger indexes but greater acceleration. See format of .frq file for more information about skip levels. SkipMinimum is the minimum document frequency a term must have in order to write any skip data at all. FreqDelta determines the position of this term's TermFreqs within the .frq file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block). ProxDelta determines the position of this term's TermPositions within the .prx file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block. For fields that omit position data, this will be 0 since prox information is not stored. SkipDelta determines the position of this term's SkipData within the .frq file. In particular, it is the number of bytes after TermFreqs that the SkipData starts. In other words, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies The .frq file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). FreqFile (.frq) --> Header, <TermFreqs, SkipData?> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <TermFreq> DocFreq TermFreq --> DocDelta[, Freq?] SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel> <SkipDatum> SkipLevel --> <SkipDatum> DocFreq/(SkipInterval^(Level + 1)) SkipDatum --> DocSkip,PayloadLength?,OffsetLength?,FreqSkip,ProxSkip,SkipChildLevelPointer? DocDelta,Freq,DocSkip,PayloadLength,OffsetLength,FreqSkip,ProxSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) TermFreqs are ordered by term (the term is implicit, from the term dictionary). TermFreq entries are ordered by increasing document number. DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 DocSkip records the document number before every SkipInterval th document in TermFreqs. If payloads and offsets are disabled for the term's field, then DocSkip represents the difference from the previous value in the sequence. If payloads and/or offsets are enabled for the term's field, then DocSkip/2 represents the difference from the previous value in the sequence. In this case when DocSkip is odd, then PayloadLength and/or OffsetLength are stored indicating the length of the last payload/offset before the SkipInterval th document in TermPositions. PayloadLength indicates the length of the last payload. OffsetLength indicates the length of the last offset (endOffset-startOffset). FreqSkip and ProxSkip record the position of every SkipInterval th entry in FreqFile and ProxFile, respectively. File positions are relative to the start of TermFreqs and Positions, to the previous SkipDatum in the sequence. For example, if DocFreq=35 and SkipInterval=16, then there are two SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The first FreqSkip names the number of bytes after the beginning of TermFreqs that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. The first ProxSkip names the number of bytes after the beginning of Positions that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. Each term can have multiple skip levels. The amount of skip levels for a term is NumSkipLevels = Min(MaxSkipLevels, floor(log(DocFreq/log(SkipInterval)))). The number of SkipData entries for a skip level is DocFreq/(SkipInterval^(Level + 1)), whereas the lowest skip level is Level=0. Example: SkipInterval = 4, MaxSkipLevels = 2, DocFreq = 35. Then skip level 0 has 8 SkipData entries, containing the 3 rd , 7 th , 11 th , 15 th , 19 th , 23 rd , 27 th , and 31 st document numbers in TermFreqs. Skip level 1 has 2 SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The SkipData entries on all upper levels > 0 contain a SkipChildLevelPointer referencing the corresponding SkipData entry in level-1. In the example has entry 15 on level 1 a pointer to entry 15 on level 0 and entry 31 on level 1 a pointer to entry 31 on level 0. Positions The .prx file contains the lists of positions that each term occurs at within documents. Note that fields omitting positional data do not store anything into this file, and if all fields in the index omit positional data then the .prx file will not exist. ProxFile (.prx) --> Header, <TermPositions> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <Positions> DocFreq Positions --> <PositionDelta,PayloadLength?,OffsetDelta?,OffsetLength?,PayloadData?> Freq PositionDelta,OffsetDelta,OffsetLength,PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayloadLength TermPositions are ordered by term (the term is implicit, from the term dictionary). Positions entries are ordered by increasing document number (the document number is implicit from the .frq file). PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Inheritance System.Object PostingsFormat Lucene40PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] [PostingsFormatName(\"Lucene40\")] public class Lucene40PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source Lucene40PostingsFormat() Creates Lucene40PostingsFormat with default settings. Declaration public Lucene40PostingsFormat() Fields | Improve this Doc View Source m_maxBlockSize Maximum items (terms or sub-blocks) per block for BlockTree. Declaration protected readonly int m_maxBlockSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minBlockSize Minimum items (terms or sub-blocks) per block for BlockTree. Declaration protected readonly int m_minBlockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsReader.html",
    "title": "Class Lucene40PostingsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40PostingsReader Concrete class that reads the 4.0 frq/prox postings format. Inheritance System.Object PostingsReaderBase Lucene40PostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] public class Lucene40PostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source Lucene40PostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, String) Sole constructor. Declaration public Lucene40PostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext ioContext, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext ioContext System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoFormat.html",
    "title": "Class Lucene40SegmentInfoFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40SegmentInfoFormat Lucene 4.0 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics, Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. Checksum contains the CRC32 checksum of all bytes in the segments_N file up until the checksum. This is used to verify integrity of the file on opening the index. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Attributes: a key-value map of codec-private attributes. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene40SegmentInfoFormat 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0-4.5 segments, and supporting IndexWriter.AddIndexes()\")] public class Lucene40SegmentInfoFormat : SegmentInfoFormat Constructors | Improve this Doc View Source Lucene40SegmentInfoFormat() Sole constructor. Declaration public Lucene40SegmentInfoFormat() Fields | Improve this Doc View Source SI_EXTENSION File extension used to store SegmentInfo . Declaration public static readonly string SI_EXTENSION Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter See Also SegmentInfos"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoReader.html",
    "title": "Class Lucene40SegmentInfoReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40SegmentInfoReader Lucene 4.0 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene40SegmentInfoReader 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0-4.5 segments\")] public class Lucene40SegmentInfoReader : SegmentInfoReader Constructors | Improve this Doc View Source Lucene40SegmentInfoReader() Sole constructor. Declaration public Lucene40SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory dir, string segment, IOContext context) Parameters Type Name Description Directory dir System.String segment IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) See Also Lucene40SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoWriter.html",
    "title": "Class Lucene40SegmentInfoWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene40SegmentInfoWriter 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete] public class Lucene40SegmentInfoWriter : SegmentInfoWriter Constructors | Improve this Doc View Source Lucene40SegmentInfoWriter() Sole constructor. Declaration public Lucene40SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Save a single segment's info. Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext) See Also Lucene40SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SkipListReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SkipListReader.html",
    "title": "Class Lucene40SkipListReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40SkipListReader Implements the skip list reader for the 4.0 posting list format that stores positions and payloads. Inheritance System.Object MultiLevelSkipListReader Lucene40SkipListReader Implements System.IDisposable Inherited Members MultiLevelSkipListReader.m_maxNumberOfSkipLevels MultiLevelSkipListReader.m_skipDoc MultiLevelSkipListReader.Doc MultiLevelSkipListReader.SkipTo(Int32) MultiLevelSkipListReader.Dispose() MultiLevelSkipListReader.Dispose(Boolean) MultiLevelSkipListReader.Init(Int64, 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] public class Lucene40SkipListReader : MultiLevelSkipListReader, IDisposable Constructors | Improve this Doc View Source Lucene40SkipListReader(IndexInput, Int32, Int32) Sole constructor. Declaration public Lucene40SkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval Properties | Improve this Doc View Source FreqPointer Returns the freq pointer of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual long FreqPointer { get; } Property Value Type Description System.Int64 | Improve this Doc View Source OffsetLength Returns the offset length (endOffset-startOffset) of the position stored just before the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int OffsetLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PayloadLength Returns the payload length of the payload stored just before the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int PayloadLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ProxPointer Returns the prox pointer of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual long ProxPointer { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Init(Int64, Int64, Int64, Int32, Boolean, Boolean) Per-term initialization. Declaration public virtual void Init(long skipPointer, long freqBasePointer, long proxBasePointer, int df, bool storesPayloads, bool storesOffsets) Parameters Type Name Description System.Int64 skipPointer System.Int64 freqBasePointer System.Int64 proxBasePointer System.Int32 df System.Boolean storesPayloads System.Boolean storesOffsets | Improve this Doc View Source ReadSkipData(Int32, IndexInput) Declaration protected override int ReadSkipData(int level, IndexInput skipStream) Parameters Type Name Description System.Int32 level IndexInput skipStream Returns Type Description System.Int32 Overrides MultiLevelSkipListReader.ReadSkipData(Int32, IndexInput) | Improve this Doc View Source SeekChild(Int32) Declaration protected override void SeekChild(int level) Parameters Type Name Description System.Int32 level Overrides MultiLevelSkipListReader.SeekChild(Int32) | Improve this Doc View Source SetLastSkipData(Int32) Declaration protected override void SetLastSkipData(int level) Parameters Type Name Description System.Int32 level Overrides MultiLevelSkipListReader.SetLastSkipData(Int32) Implements System.IDisposable See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsFormat.html",
    "title": "Class Lucene40StoredFieldsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40StoredFieldsFormat Lucene 4.0 Stored Fields Format. Stored fields are represented by two files: The field index, or .fdx file. This is used to find the location within the field data file of the fields of a particular document. Because it contains fixed-length data, this file may be easily randomly accessed. The position of document n 's field data is the Uint64 ( WriteInt64(Int64) ) at n*8 in this file. This contains, for each document, a pointer to its field data, as follows: FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldValuesPosition --> Uint64 ( WriteInt64(Int64) ) The field data, or .fdt file. This contains the stored fields of each document, as follows: FieldData (.fdt) --> <Header>, <DocFieldData> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount FieldCount --> VInt ( WriteVInt32(Int32) ) FieldNum --> VInt ( WriteVInt32(Int32) ) Bits --> Byte ( WriteByte(Byte) ) low order bit reserved. second bit is one for fields containing binary data third bit reserved. 4th to 6th bit (mask: 0x7<<3) define the type of a numeric field: all bits in mask are cleared if no numeric field at all 1<<3: Value is Int 2<<3: Value is Long 3<<3: Value is Int as Float (as of J2N.BitConversion.Int32BitsToSingle(System.Int32) 4<<3: Value is Long as Double (as of J2N.BitConversion.Int64BitsToDouble(System.Int64) Value --> String | BinaryValue | Int | Long (depending on Bits) BinaryValue --> ValueSize, < Byte ( WriteByte(Byte) ) >^ValueSize ValueSize --> VInt ( WriteVInt32(Int32) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat Lucene40StoredFieldsFormat 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40StoredFieldsFormat : StoredFieldsFormat Constructors | Improve this Doc View Source Lucene40StoredFieldsFormat() Sole constructor. Declaration public Lucene40StoredFieldsFormat() Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsReader.html",
    "title": "Class Lucene40StoredFieldsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40StoredFieldsReader Class responsible for access to stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StoredFieldsReader Lucene40StoredFieldsReader Implements System.IDisposable Inherited Members StoredFieldsReader.Dispose() 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40StoredFieldsReader : StoredFieldsReader, IDisposable Constructors | Improve this Doc View Source Lucene40StoredFieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Sole constructor. Declaration public Lucene40StoredFieldsReader(Directory d, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory d SegmentInfo si FieldInfos fn IOContext context Properties | Improve this Doc View Source Count Returns number of documents. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Returns a cloned FieldsReader that shares open IndexInput s with the original one. It is the caller's job not to dispose the original FieldsReader until all clones are called (eg, currently SegmentReader manages this logic). Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Closes the underlying IndexInput streams. This means that the Fields values will not be accessible. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) Exceptions Type Condition System.IO.IOException If an I/O error occurs. | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source RawDocs(Int32[], Int32, Int32) Returns the length in bytes of each raw document in a contiguous range of length numDocs starting with startDocID . Returns the IndexInput (the fieldStream), already seeked to the starting point for startDocID . Declaration public IndexInput RawDocs(int[] lengths, int startDocID, int numDocs) Parameters Type Name Description System.Int32 [] lengths System.Int32 startDocID System.Int32 numDocs Returns Type Description IndexInput | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements System.IDisposable See Also Lucene40StoredFieldsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsWriter.html",
    "title": "Class Lucene40StoredFieldsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40StoredFieldsWriter Class responsible for writing stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter Lucene40StoredFieldsWriter Implements System.IDisposable Inherited Members StoredFieldsWriter.FinishDocument() StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40StoredFieldsWriter : StoredFieldsWriter, IDisposable Constructors | Improve this Doc View Source Lucene40StoredFieldsWriter(Directory, String, IOContext) Sole constructor. Declaration public Lucene40StoredFieldsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Fields | Improve this Doc View Source FIELDS_EXTENSION Extension of stored fields file. Declaration public const string FIELDS_EXTENSION = \"fdt\" Field Value Type Description System.String | Improve this Doc View Source FIELDS_INDEX_EXTENSION Extension of stored fields index file. Declaration public const string FIELDS_INDEX_EXTENSION = \"fdx\" Field Value Type Description System.String Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source AddRawDocuments(IndexInput, Int32[], Int32) Bulk write a contiguous series of documents. The lengths array is the length (in bytes) of each raw document. The stream IndexInput is the fieldsStream from which we should bulk-copy all bytes. Declaration public void AddRawDocuments(IndexInput stream, int[] lengths, int numDocs) Parameters Type Name Description IndexInput stream System.Int32 [] lengths System.Int32 numDocs | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides StoredFieldsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField) Implements System.IDisposable See Also Lucene40StoredFieldsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsFormat.html",
    "title": "Class Lucene40TermVectorsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40TermVectorsFormat Lucene 4.0 Term Vectors format. Term Vector support is an optional on a field by field basis. It consists of 3 files. The Document Index or .tvx file. For each document, this stores the offset into the document data (.tvd) and field data (.tvf) files. DocumentIndex (.tvx) --> Header,<DocumentPosition,FieldPosition> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocumentPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvd file) FieldPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvf file) The Document or .tvd file. This contains, for each document, the number of fields, a list of the fields with term vector info and finally a list of pointers to the field information in the .tvf (Term Vector Fields) file. The .tvd file is used to map out the fields that have term vectors stored and where the field information is in the .tvf file. Document (.tvd) --> Header,<NumFields, FieldNums, FieldPositions> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumFields --> VInt ( WriteVInt32(Int32) ) FieldNums --> <FieldNumDelta> NumFields FieldNumDelta --> VInt ( WriteVInt32(Int32) ) FieldPositions --> <FieldPositionDelta> NumFields-1 FieldPositionDelta --> VLong ( WriteVInt64(Int64) ) The Field or .tvf file. This file contains, for each field that has a term vector stored, a list of the terms, their frequencies and, optionally, position, offset, and payload information. Field (.tvf) --> Header,<NumTerms, Flags, TermFreqs> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumTerms --> VInt ( WriteVInt32(Int32) ) Flags --> Byte ( WriteByte(Byte) ) TermFreqs --> <TermText, TermFreq, Positions?, PayloadData?, Offsets?> NumTerms TermText --> <PrefixLength, Suffix> PrefixLength --> VInt ( WriteVInt32(Int32) ) Suffix --> String ( WriteString(String) ) TermFreq --> VInt ( WriteVInt32(Int32) ) Positions --> <PositionDelta PayloadLength?> TermFreq PositionDelta --> VInt ( WriteVInt32(Int32) ) PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> Byte ( WriteByte(Byte) ) NumPayloadBytes Offsets --> <VInt ( WriteVInt32(Int32) ), VInt ( WriteVInt32(Int32) ) > TermFreq Notes: Flags byte stores whether this term vector has position, offset, payload. information stored. Term byte prefixes are shared. The PrefixLength is the number of initial bytes from the previous term which must be pre-pended to a term's suffix in order to form the term's bytes. Thus, if the previous term's text was \"bone\" and the term is \"boy\", the PrefixLength is two and the suffix is \"y\". PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. PayloadData is metadata associated with a term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. PayloadData encodes the concatenated bytes for all of a terms occurrences. Offsets are stored as delta encoded VInts. The first VInt is the startOffset, the second is the endOffset. Inheritance System.Object TermVectorsFormat Lucene40TermVectorsFormat 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40TermVectorsFormat : TermVectorsFormat Constructors | Improve this Doc View Source Lucene40TermVectorsFormat() Sole constructor. Declaration public Lucene40TermVectorsFormat() Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsReader.html",
    "title": "Class Lucene40TermVectorsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40TermVectorsReader Lucene 4.0 Term Vectors reader. It reads .tvd, .tvf, and .tvx files. Inheritance System.Object TermVectorsReader Lucene40TermVectorsReader Implements System.IDisposable Inherited Members TermVectorsReader.Dispose() 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40TermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source Lucene40TermVectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Sole constructor. Declaration public Lucene40TermVectorsReader(Directory d, SegmentInfo si, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory d SegmentInfo si FieldInfos fieldInfos IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements System.IDisposable See Also Lucene40TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsWriter.html",
    "title": "Class Lucene40TermVectorsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene40TermVectorsWriter Lucene 4.0 Term Vectors writer. It writes .tvd, .tvf, and .tvx files. Inheritance System.Object TermVectorsWriter Lucene40TermVectorsWriter Implements System.IDisposable Inherited Members TermVectorsWriter.FinishField() TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() 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.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40TermVectorsWriter : TermVectorsWriter, IDisposable Constructors | Improve this Doc View Source Lucene40TermVectorsWriter(Directory, String, IOContext) Sole constructor. Declaration public Lucene40TermVectorsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Declaration public override void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets Overrides TermVectorsWriter.AddProx(Int32, DataInput, DataInput) | Improve this Doc View Source Dispose(Boolean) Close all streams. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides TermVectorsWriter.FinishDocument() | Improve this Doc View Source FinishTerm() Declaration public override void FinishTerm() Overrides TermVectorsWriter.FinishTerm() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides TermVectorsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) Implements System.IDisposable See Also Lucene40TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene41 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene41 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene41Codec . Classes Lucene41Codec Implements the Lucene 4.1 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene41 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsFormat Lucene 4.1 postings format, which encodes postings in packed integer blocks for fast decode. NOTE : this format is still experimental and subject to change without backwards compatibility. Basic idea: Packed Blocks and VInt Blocks : In packed blocks, integers are encoded with the same bit width packed format ( PackedInt32s ): the block size (i.e. number of integers inside block) is fixed (currently 128). Additionally blocks that are all the same value are encoded in an optimized way. In VInt blocks, integers are encoded as VInt ( WriteVInt32(Int32) ): the block size is variable. Block structure : When the postings are long enough, Lucene41PostingsFormat will try to encode most integer data as a packed block. Take a term with 259 documents as an example, the first 256 document ids are encoded as two packed blocks, while the remaining 3 are encoded as one VInt block. Different kinds of data are always encoded separately into different packed blocks, but may possibly be interleaved into the same VInt block. This strategy is applied to pairs: <document number, frequency>, <position, payload length>, <position, offset start, offset length>, and <position, payload length, offsetstart, offset length>. Skipdata settings : The structure of skip table is quite similar to previous version of Lucene. Skip interval is the same as block size, and each skip entry points to the beginning of each block. However, for the first block, skip data is omitted. Positions, Payloads, and Offsets : A position is an integer indicating where the term occurs within one document. A payload is a blob of metadata associated with current position. An offset is a pair of integers indicating the tokenized start/end offsets for given term in current position: it is essentially a specialized payload. When payloads and offsets are not omitted, numPositions==numPayloads==numOffsets (assuming a null payload contributes one count). As mentioned in block structure, it is possible to encode these three either combined or separately. In all cases, payloads and offsets are stored together. When encoded as a packed block, position data is separated out as .pos, while payloads and offsets are encoded in .pay (payload metadata will also be stored directly in .pay). When encoded as VInt blocks, all these three are stored interleaved into the .pos (so is payload metadata). With this strategy, the majority of payload and offset data will be outside .pos file. So for queries that require only position data, running on a full index with payloads and offsets, this reduces disk pre-fetches. Files and detailed format: .tim : Term Dictionary .tip : Term Index .doc : Frequencies and Skip Data .pos : Positions .pay : Payloads and Offsets Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions, payload and skip data in the .doc, .pos, and .pay files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the PostingsHeader and TermMetadata sections described here: PostingsHeader --> Header, PackedBlockSize TermMetadata --> (DocFPDelta|SingletonDocID), PosFPDelta?, PosVIntBlockFPDelta?, PayFPDelta?, SkipFPDelta? Header, --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedBlockSize, SingletonDocID --> VInt ( WriteVInt32(Int32) ) DocFPDelta, PosFPDelta, PayFPDelta, PosVIntBlockFPDelta, SkipFPDelta --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. PackedBlockSize is the fixed block size for packed blocks. In packed block, bit width is determined by the largest integer. Smaller block size result in smaller variance among width of integers hence smaller indexes. Larger block size result in more efficient bulk i/o hence better acceleration. This value should always be a multiple of 64, currently fixed as 128 as a tradeoff. It is also the skip interval used to accelerate Advance(Int32) . DocFPDelta determines the position of this term's TermFreqs within the .doc file. In particular, it is the difference of file offset between this term's data and previous term's data (or zero, for the first term in the block).On disk it is stored as the difference from previous value in sequence. PosFPDelta determines the position of this term's TermPositions within the .pos file. While PayFPDelta determines the position of this term's <TermPayloads, TermOffsets?> within the .pay file. Similar to DocFPDelta, it is the difference between two file positions (or neglected, for fields that omit payloads and offsets). PosVIntBlockFPDelta determines the position of this term's last TermPosition in last pos packed block within the .pos file. It is synonym for PayVIntBlockFPDelta or OffsetVIntBlockFPDelta. This is actually used to indicate whether it is necessary to load following payloads and offsets from .pos instead of .pay. Every time a new block of positions are to be loaded, the PostingsReader will use this value to check whether current block is packed format or VInt. When packed format, payloads and offsets are fetched from .pay, otherwise from .pos. (this value is neglected when total number of positions i.e. totalTermFreq is less or equal to PackedBlockSize). SkipFPDelta determines the position of this term's SkipData within the .doc file. In particular, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum (i.e. 128 in Lucene41PostingsFormat). SingletonDocID is an optimization when a term only appears in one document. In this case, instead of writing a file pointer to the .doc file (DocFPDelta), and then a VIntBlock at that location, the single document ID is written to the term dictionary. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies and Skip Data The .doc file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). It also saves skip data to the beginning of each packed or VInt block, when the length of document list is larger than packed block size. docFile(.doc) --> Header, <TermFreqs, SkipData?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <PackedBlock> PackedDocBlockNum , VIntBlock? PackedBlock --> PackedDocDeltaBlock, PackedFreqBlock? VIntBlock --> <DocDelta[, Freq?]> DocFreq-PackedBlockSize PackedDocBlockNum SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel>, SkipDatum? SkipLevel --> <SkipDatum> TrimmedDocFreq/(PackedBlockSize^(Level + 1)) SkipDatum --> DocSkip, DocFPSkip, <PosFPSkip, PosBlockOffset, PayLength?, PayFPSkip?>?, SkipChildLevelPointer? PackedDocDeltaBlock, PackedFreqBlock --> PackedInts ( PackedInt32s ) DocDelta, Freq, DocSkip, DocFPSkip, PosFPSkip, PosBlockOffset, PayByteUpto, PayFPSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: PackedDocDeltaBlock is theoretically generated from two steps: Calculate the difference between each document number and previous one, and get a d-gaps list (for the first document, use absolute value); For those d-gaps from first one to PackedDocBlockNumPackedBlockSize th , separately encode as packed blocks. If frequencies are not omitted, PackedFreqBlock will be generated without d-gap step. VIntBlock stores remaining d-gaps (along with frequencies when possible) with a format that encodes DocDelta and Freq: DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 PackedDocBlockNum is the number of packed blocks for current term's docids or frequencies. In particular, PackedDocBlockNum = floor(DocFreq/PackedBlockSize) TrimmedDocFreq = DocFreq % PackedBlockSize == 0 ? DocFreq - 1 : DocFreq. We use this trick since the definition of skip entry is a little different from base interface. In MultiLevelSkipListWriter , skip data is assumed to be saved for skipInterval th , 2 skipInterval th ... posting in the list. However, in Lucene41PostingsFormat, the skip data is saved for skipInterval+1 th , 2 skipInterval+1 th ... posting (skipInterval==PackedBlockSize in this case). When DocFreq is multiple of PackedBlockSize, MultiLevelSkipListWriter will expect one more skip data than Lucene41SkipWriter. SkipDatum is the metadata of one skip entry. For the first block (no matter packed or VInt), it is omitted. DocSkip records the document number of every PackedBlockSize th document number in the postings (i.e. last document number in each packed block). On disk it is stored as the difference from previous value in the sequence. DocFPSkip records the file offsets of each block (excluding )posting at PackedBlockSize+1 th , 2*PackedBlockSize+1 th ... , in DocFile. The file offsets are relative to the start of current term's TermFreqs. On disk it is also stored as the difference from previous SkipDatum in the sequence. Since positions and payloads are also block encoded, the skip should skip to related block first, then fetch the values according to in-block offset. PosFPSkip and PayFPSkip record the file offsets of related block in .pos and .pay, respectively. While PosBlockOffset indicates which value to fetch inside the related block (PayBlockOffset is unnecessary since it is always equal to PosBlockOffset). Same as DocFPSkip, the file offsets are relative to the start of current term's TermFreqs, and stored as a difference sequence. PayByteUpto indicates the start offset of the current payload. It is equivalent to the sum of the payload lengths in the current block up to PosBlockOffset Positions The .pos file contains the lists of positions that each term occurs at within documents. It also sometimes stores part of payloads and offsets for speedup. PosFile(.pos) --> Header, <TermPositions> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <PackedPosDeltaBlock> PackedPosBlockNum , VIntBlock? VIntBlock --> <PositionDelta[, PayloadLength?], PayloadData?, OffsetDelta?, OffsetLength?> PosVIntCount PackedPosDeltaBlock --> PackedInts ( PackedInt32s ) PositionDelta, OffsetDelta, OffsetLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: TermPositions are order by term (terms are implicit, from the term dictionary), and position values for each term document pair are incremental, and ordered by document number. PackedPosBlockNum is the number of packed blocks for current term's positions, payloads or offsets. In particular, PackedPosBlockNum = floor(totalTermFreq/PackedBlockSize) PosVIntCount is the number of positions encoded as VInt format. In particular, PosVIntCount = totalTermFreq - PackedPosBlockNum*PackedBlockSize The procedure how PackedPosDeltaBlock is generated is the same as PackedDocDeltaBlock in chapter Frequencies and Skip Data . PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Payloads and Offsets The .pay file will store payloads and offsets associated with certain term-document positions. Some payloads and offsets will be separated out into .pos file, for performance reasons. PayFile(.pay): --> Header, <TermPayloads, TermOffsets?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPayloads --> <PackedPayLengthBlock, SumPayLength, PayData> PackedPayBlockNum TermOffsets --> <PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock> PackedPayBlockNum PackedPayLengthBlock, PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock --> PackedInts ( PackedInt32s ) SumPayLength --> VInt ( WriteVInt32(Int32) ) PayData --> byte ( WriteByte(Byte) ) SumPayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The order of TermPayloads/TermOffsets will be the same as TermPositions, note that part of payload/offsets are stored in .pos. The procedure how PackedPayLengthBlock and PackedOffsetLengthBlock are generated is the same as PackedFreqBlock in chapter Frequencies and Skip Data . While PackedStartDeltaBlock follows a same procedure as PackedDocDeltaBlock. PackedPayBlockNum is always equal to PackedPosBlockNum, for the same term. It is also synonym for PackedOffsetBlockNum. SumPayLength is the total length of payloads written within one block, should be the sum of PayLengths in one packed block. PayLength in PackedPayLengthBlock is the length of each payload associated with the current position. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsReader Concrete class that reads docId(maybe frq,pos,offset,payloads) list with postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsWriter Concrete class that writes docId(maybe frq,pos,offset,payloads) list with postings format. Postings list for each term will be stored separately. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsWriter.Int32BlockTermState NOTE: This was IntBlockTermState in Lucene Lucene41StoredFieldsFormat Lucene 4.1 stored fields format. Principle This StoredFieldsFormat compresses blocks of 16KB of documents in order to improve the compression ratio compared to document-level compression. It uses the LZ4 compression algorithm, which is fast to compress and very fast to decompress data. Although the compression method that is used focuses more on speed than on compression ratio, it should provide interesting compression ratios for redundant inputs (such as log files, HTML or plain text). File formats Stored fields are represented by two files: A fields data file (extension .fdt ). this file stores a compact representation of documents in compressed blocks of 16KB or more. When writing a segment, documents are appended to an in-memory byte[] buffer. When its size reaches 16KB or more, some metadata about the documents is flushed to disk, immediately followed by a compressed representation of the buffer using the LZ4 compression format . Here is a more detailed description of the field data file format: FieldData (.fdt) --> <Header>, PackedIntsVersion, <Chunk> ChunkCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, DocFieldCounts, DocLengths, <CompressedDocs> DocBase --> the ID of the first document of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs --> the number of documents in the chunk as a VInt ( WriteVInt32(Int32) ) DocFieldCounts --> the number of stored fields of every document in the chunk, encoded as followed: if chunkDocs=1, the unique value is encoded as a VInt ( WriteVInt32(Int32) ) else read a VInt ( WriteVInt32(Int32) ) (let's call it bitsRequired ) if bitsRequired is 0 then all values are equal, and the common value is the following VInt ( WriteVInt32(Int32) ) else bitsRequired is the number of bits required to store any value, and values are stored in a packed ( PackedInt32s ) array where every value is stored on exactly bitsRequired bits DocLengths --> the lengths of all documents in the chunk, encoded with the same method as DocFieldCounts CompressedDocs --> a compressed representation of <Docs> using the LZ4 compression format Docs --> <Doc> ChunkDocs Doc --> <FieldNumAndType, Value> DocFieldCount FieldNumAndType --> a VLong ( WriteVInt64(Int64) ), whose 3 last bits are Type and other bits are FieldNum Type --> 0: Value is String 1: Value is BinaryValue 2: Value is Int 3: Value is Float 4: Value is Long 5: Value is Double 6, 7: unused FieldNum --> an ID of the field Value --> String ( WriteString(String) ) | BinaryValue | Int | Float | Long | Double depending on Type BinaryValue --> ValueLength <Byte> ValueLength Notes If documents are larger than 16KB then chunks will likely contain only one document. However, documents can never spread across several chunks (all fields of a single document are in the same chunk). When at least one document in a chunk is large enough so that the chunk is larger than 32KB, the chunk will actually be compressed in several LZ4 blocks of 16KB. this allows StoredFieldVisitor s which are only interested in the first fields of a document to not have to decompress 10MB of data if the document is 10MB, but only 16KB. Given that the original lengths are written in the metadata of the chunk, the decompressor can leverage this information to stop decoding as soon as enough data has been decompressed. In case documents are incompressible, CompressedDocs will be less than 0.5% larger than Docs. A fields index file (extension .fdx ). FieldsIndex (.fdx) --> <Header>, <ChunkIndex> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Known limitations This StoredFieldsFormat does not support individual documents larger than ( 2 31 - 2 14 ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41Codec.html",
    "title": "Class Lucene41Codec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41Codec Implements the Lucene 4.1 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene41 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec Lucene41Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] [CodecName(\"Lucene41\")] public class Lucene41Codec : Codec Constructors | Improve this Doc View Source Lucene41Codec() Sole constructor. Declaration public Lucene41Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsBaseFormat.html",
    "title": "Class Lucene41PostingsBaseFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsBaseFormat Lucene41PostingsBaseFormat Inherited Members PostingsBaseFormat.Name 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.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsBaseFormat : PostingsBaseFormat Constructors | Improve this Doc View Source Lucene41PostingsBaseFormat() Sole constructor. Declaration public Lucene41PostingsBaseFormat() Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Declaration public override PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase Overrides PostingsBaseFormat.PostingsReaderBase(SegmentReadState) | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Declaration public override PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase Overrides PostingsBaseFormat.PostingsWriterBase(SegmentWriteState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat.html",
    "title": "Class Lucene41PostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41PostingsFormat Lucene 4.1 postings format, which encodes postings in packed integer blocks for fast decode. NOTE : this format is still experimental and subject to change without backwards compatibility. Basic idea: Packed Blocks and VInt Blocks : In packed blocks, integers are encoded with the same bit width packed format ( PackedInt32s ): the block size (i.e. number of integers inside block) is fixed (currently 128). Additionally blocks that are all the same value are encoded in an optimized way. In VInt blocks, integers are encoded as VInt ( WriteVInt32(Int32) ): the block size is variable. Block structure : When the postings are long enough, Lucene41PostingsFormat will try to encode most integer data as a packed block. Take a term with 259 documents as an example, the first 256 document ids are encoded as two packed blocks, while the remaining 3 are encoded as one VInt block. Different kinds of data are always encoded separately into different packed blocks, but may possibly be interleaved into the same VInt block. This strategy is applied to pairs: <document number, frequency>, <position, payload length>, <position, offset start, offset length>, and <position, payload length, offsetstart, offset length>. Skipdata settings : The structure of skip table is quite similar to previous version of Lucene. Skip interval is the same as block size, and each skip entry points to the beginning of each block. However, for the first block, skip data is omitted. Positions, Payloads, and Offsets : A position is an integer indicating where the term occurs within one document. A payload is a blob of metadata associated with current position. An offset is a pair of integers indicating the tokenized start/end offsets for given term in current position: it is essentially a specialized payload. When payloads and offsets are not omitted, numPositions==numPayloads==numOffsets (assuming a null payload contributes one count). As mentioned in block structure, it is possible to encode these three either combined or separately. In all cases, payloads and offsets are stored together. When encoded as a packed block, position data is separated out as .pos, while payloads and offsets are encoded in .pay (payload metadata will also be stored directly in .pay). When encoded as VInt blocks, all these three are stored interleaved into the .pos (so is payload metadata). With this strategy, the majority of payload and offset data will be outside .pos file. So for queries that require only position data, running on a full index with payloads and offsets, this reduces disk pre-fetches. Files and detailed format: .tim : Term Dictionary .tip : Term Index .doc : Frequencies and Skip Data .pos : Positions .pay : Payloads and Offsets Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions, payload and skip data in the .doc, .pos, and .pay files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the PostingsHeader and TermMetadata sections described here: PostingsHeader --> Header, PackedBlockSize TermMetadata --> (DocFPDelta|SingletonDocID), PosFPDelta?, PosVIntBlockFPDelta?, PayFPDelta?, SkipFPDelta? Header, --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedBlockSize, SingletonDocID --> VInt ( WriteVInt32(Int32) ) DocFPDelta, PosFPDelta, PayFPDelta, PosVIntBlockFPDelta, SkipFPDelta --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. PackedBlockSize is the fixed block size for packed blocks. In packed block, bit width is determined by the largest integer. Smaller block size result in smaller variance among width of integers hence smaller indexes. Larger block size result in more efficient bulk i/o hence better acceleration. This value should always be a multiple of 64, currently fixed as 128 as a tradeoff. It is also the skip interval used to accelerate Advance(Int32) . DocFPDelta determines the position of this term's TermFreqs within the .doc file. In particular, it is the difference of file offset between this term's data and previous term's data (or zero, for the first term in the block).On disk it is stored as the difference from previous value in sequence. PosFPDelta determines the position of this term's TermPositions within the .pos file. While PayFPDelta determines the position of this term's <TermPayloads, TermOffsets?> within the .pay file. Similar to DocFPDelta, it is the difference between two file positions (or neglected, for fields that omit payloads and offsets). PosVIntBlockFPDelta determines the position of this term's last TermPosition in last pos packed block within the .pos file. It is synonym for PayVIntBlockFPDelta or OffsetVIntBlockFPDelta. This is actually used to indicate whether it is necessary to load following payloads and offsets from .pos instead of .pay. Every time a new block of positions are to be loaded, the PostingsReader will use this value to check whether current block is packed format or VInt. When packed format, payloads and offsets are fetched from .pay, otherwise from .pos. (this value is neglected when total number of positions i.e. totalTermFreq is less or equal to PackedBlockSize). SkipFPDelta determines the position of this term's SkipData within the .doc file. In particular, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum (i.e. 128 in Lucene41PostingsFormat). SingletonDocID is an optimization when a term only appears in one document. In this case, instead of writing a file pointer to the .doc file (DocFPDelta), and then a VIntBlock at that location, the single document ID is written to the term dictionary. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies and Skip Data The .doc file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). It also saves skip data to the beginning of each packed or VInt block, when the length of document list is larger than packed block size. docFile(.doc) --> Header, <TermFreqs, SkipData?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <PackedBlock> PackedDocBlockNum , VIntBlock? PackedBlock --> PackedDocDeltaBlock, PackedFreqBlock? VIntBlock --> <DocDelta[, Freq?]> DocFreq-PackedBlockSize PackedDocBlockNum SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel>, SkipDatum? SkipLevel --> <SkipDatum> TrimmedDocFreq/(PackedBlockSize^(Level + 1)) SkipDatum --> DocSkip, DocFPSkip, <PosFPSkip, PosBlockOffset, PayLength?, PayFPSkip?>?, SkipChildLevelPointer? PackedDocDeltaBlock, PackedFreqBlock --> PackedInts ( PackedInt32s ) DocDelta, Freq, DocSkip, DocFPSkip, PosFPSkip, PosBlockOffset, PayByteUpto, PayFPSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: PackedDocDeltaBlock is theoretically generated from two steps: Calculate the difference between each document number and previous one, and get a d-gaps list (for the first document, use absolute value); For those d-gaps from first one to PackedDocBlockNumPackedBlockSize th , separately encode as packed blocks. If frequencies are not omitted, PackedFreqBlock will be generated without d-gap step. VIntBlock stores remaining d-gaps (along with frequencies when possible) with a format that encodes DocDelta and Freq: DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 PackedDocBlockNum is the number of packed blocks for current term's docids or frequencies. In particular, PackedDocBlockNum = floor(DocFreq/PackedBlockSize) TrimmedDocFreq = DocFreq % PackedBlockSize == 0 ? DocFreq - 1 : DocFreq. We use this trick since the definition of skip entry is a little different from base interface. In MultiLevelSkipListWriter , skip data is assumed to be saved for skipInterval th , 2 skipInterval th ... posting in the list. However, in Lucene41PostingsFormat, the skip data is saved for skipInterval+1 th , 2 skipInterval+1 th ... posting (skipInterval==PackedBlockSize in this case). When DocFreq is multiple of PackedBlockSize, MultiLevelSkipListWriter will expect one more skip data than Lucene41SkipWriter. SkipDatum is the metadata of one skip entry. For the first block (no matter packed or VInt), it is omitted. DocSkip records the document number of every PackedBlockSize th document number in the postings (i.e. last document number in each packed block). On disk it is stored as the difference from previous value in the sequence. DocFPSkip records the file offsets of each block (excluding )posting at PackedBlockSize+1 th , 2*PackedBlockSize+1 th ... , in DocFile. The file offsets are relative to the start of current term's TermFreqs. On disk it is also stored as the difference from previous SkipDatum in the sequence. Since positions and payloads are also block encoded, the skip should skip to related block first, then fetch the values according to in-block offset. PosFPSkip and PayFPSkip record the file offsets of related block in .pos and .pay, respectively. While PosBlockOffset indicates which value to fetch inside the related block (PayBlockOffset is unnecessary since it is always equal to PosBlockOffset). Same as DocFPSkip, the file offsets are relative to the start of current term's TermFreqs, and stored as a difference sequence. PayByteUpto indicates the start offset of the current payload. It is equivalent to the sum of the payload lengths in the current block up to PosBlockOffset Positions The .pos file contains the lists of positions that each term occurs at within documents. It also sometimes stores part of payloads and offsets for speedup. PosFile(.pos) --> Header, <TermPositions> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <PackedPosDeltaBlock> PackedPosBlockNum , VIntBlock? VIntBlock --> <PositionDelta[, PayloadLength?], PayloadData?, OffsetDelta?, OffsetLength?> PosVIntCount PackedPosDeltaBlock --> PackedInts ( PackedInt32s ) PositionDelta, OffsetDelta, OffsetLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: TermPositions are order by term (terms are implicit, from the term dictionary), and position values for each term document pair are incremental, and ordered by document number. PackedPosBlockNum is the number of packed blocks for current term's positions, payloads or offsets. In particular, PackedPosBlockNum = floor(totalTermFreq/PackedBlockSize) PosVIntCount is the number of positions encoded as VInt format. In particular, PosVIntCount = totalTermFreq - PackedPosBlockNum*PackedBlockSize The procedure how PackedPosDeltaBlock is generated is the same as PackedDocDeltaBlock in chapter Frequencies and Skip Data . PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Payloads and Offsets The .pay file will store payloads and offsets associated with certain term-document positions. Some payloads and offsets will be separated out into .pos file, for performance reasons. PayFile(.pay): --> Header, <TermPayloads, TermOffsets?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPayloads --> <PackedPayLengthBlock, SumPayLength, PayData> PackedPayBlockNum TermOffsets --> <PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock> PackedPayBlockNum PackedPayLengthBlock, PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock --> PackedInts ( PackedInt32s ) SumPayLength --> VInt ( WriteVInt32(Int32) ) PayData --> byte ( WriteByte(Byte) ) SumPayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The order of TermPayloads/TermOffsets will be the same as TermPositions, note that part of payload/offsets are stored in .pos. The procedure how PackedPayLengthBlock and PackedOffsetLengthBlock are generated is the same as PackedFreqBlock in chapter Frequencies and Skip Data . While PackedStartDeltaBlock follows a same procedure as PackedDocDeltaBlock. PackedPayBlockNum is always equal to PackedPosBlockNum, for the same term. It is also synonym for PackedOffsetBlockNum. SumPayLength is the total length of payloads written within one block, should be the sum of PayLengths in one packed block. PayLength in PackedPayLengthBlock is the length of each payload associated with the current position. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat Lucene41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax [PostingsFormatName(\"Lucene41\")] public sealed class Lucene41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source Lucene41PostingsFormat() Creates Lucene41PostingsFormat with default settings. Declaration public Lucene41PostingsFormat() | Improve this Doc View Source Lucene41PostingsFormat(Int32, Int32) Creates Lucene41PostingsFormat with custom values for minTermBlockSize and maxTermBlockSize passed to block terms dictionary. Declaration public Lucene41PostingsFormat(int minTermBlockSize, int maxTermBlockSize) Parameters Type Name Description System.Int32 minTermBlockSize System.Int32 maxTermBlockSize See Also BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) Fields | Improve this Doc View Source BLOCK_SIZE Fixed packed block size, number of integers encoded in a single packed block. Declaration public static int BLOCK_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source DOC_EXTENSION Filename extension for document number, frequencies, and skip data. See chapter: Frequencies and Skip Data Declaration public const string DOC_EXTENSION = \"doc\" Field Value Type Description System.String | Improve this Doc View Source PAY_EXTENSION Filename extension for payloads and offsets. See chapter: Payloads and Offsets Declaration public const string PAY_EXTENSION = \"pay\" Field Value Type Description System.String | Improve this Doc View Source POS_EXTENSION Filename extension for positions. See chapter: Positions Declaration public const string POS_EXTENSION = \"pos\" Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsReader.html",
    "title": "Class Lucene41PostingsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41PostingsReader Concrete class that reads docId(maybe frq,pos,offset,payloads) list with postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase Lucene41PostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() 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.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source Lucene41PostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, String) Sole constructor. Declaration public Lucene41PostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext ioContext, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext ioContext System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable See Also Lucene.Net.Codecs.Lucene41.Lucene41SkipReader"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.html",
    "title": "Class Lucene41PostingsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41PostingsWriter Concrete class that writes docId(maybe frq,pos,offset,payloads) list with postings format. Postings list for each term will be stored separately. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Lucene41PostingsWriter Implements System.IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) 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.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source Lucene41PostingsWriter(SegmentWriteState) Creates a postings writer with PackedInts.COMPACT Declaration public Lucene41PostingsWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state | Improve this Doc View Source Lucene41PostingsWriter(SegmentWriteState, Single) Creates a postings writer with the specified PackedInts overhead ratio Declaration public Lucene41PostingsWriter(SegmentWriteState state, float acceptableOverheadRatio) Parameters Type Name Description SegmentWriteState state System.Single acceptableOverheadRatio Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] longs, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docId, int termDocFreq) Parameters Type Name Description System.Int32 docId System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements System.IDisposable See Also Lucene.Net.Codecs.Lucene41.Lucene41SkipWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.Int32BlockTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.Int32BlockTermState.html",
    "title": "Class Lucene41PostingsWriter.Int32BlockTermState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41PostingsWriter.Int32BlockTermState NOTE: This was IntBlockTermState in Lucene Inheritance System.Object TermState OrdTermState BlockTermState Lucene41PostingsWriter.Int32BlockTermState Inherited Members BlockTermState.DocFreq BlockTermState.TotalTermFreq BlockTermState.TermBlockOrd BlockTermState.BlockFilePointer OrdTermState.Ord 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.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Int32BlockTermState : BlockTermState Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermState.Clone() | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides BlockTermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BlockTermState.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat.html",
    "title": "Class Lucene41StoredFieldsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene41StoredFieldsFormat Lucene 4.1 stored fields format. Principle This StoredFieldsFormat compresses blocks of 16KB of documents in order to improve the compression ratio compared to document-level compression. It uses the LZ4 compression algorithm, which is fast to compress and very fast to decompress data. Although the compression method that is used focuses more on speed than on compression ratio, it should provide interesting compression ratios for redundant inputs (such as log files, HTML or plain text). File formats Stored fields are represented by two files: A fields data file (extension .fdt ). this file stores a compact representation of documents in compressed blocks of 16KB or more. When writing a segment, documents are appended to an in-memory byte[] buffer. When its size reaches 16KB or more, some metadata about the documents is flushed to disk, immediately followed by a compressed representation of the buffer using the LZ4 compression format . Here is a more detailed description of the field data file format: FieldData (.fdt) --> <Header>, PackedIntsVersion, <Chunk> ChunkCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, DocFieldCounts, DocLengths, <CompressedDocs> DocBase --> the ID of the first document of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs --> the number of documents in the chunk as a VInt ( WriteVInt32(Int32) ) DocFieldCounts --> the number of stored fields of every document in the chunk, encoded as followed: if chunkDocs=1, the unique value is encoded as a VInt ( WriteVInt32(Int32) ) else read a VInt ( WriteVInt32(Int32) ) (let's call it bitsRequired ) if bitsRequired is 0 then all values are equal, and the common value is the following VInt ( WriteVInt32(Int32) ) else bitsRequired is the number of bits required to store any value, and values are stored in a packed ( PackedInt32s ) array where every value is stored on exactly bitsRequired bits DocLengths --> the lengths of all documents in the chunk, encoded with the same method as DocFieldCounts CompressedDocs --> a compressed representation of <Docs> using the LZ4 compression format Docs --> <Doc> ChunkDocs Doc --> <FieldNumAndType, Value> DocFieldCount FieldNumAndType --> a VLong ( WriteVInt64(Int64) ), whose 3 last bits are Type and other bits are FieldNum Type --> 0: Value is String 1: Value is BinaryValue 2: Value is Int 3: Value is Float 4: Value is Long 5: Value is Double 6, 7: unused FieldNum --> an ID of the field Value --> String ( WriteString(String) ) | BinaryValue | Int | Float | Long | Double depending on Type BinaryValue --> ValueLength <Byte> ValueLength Notes If documents are larger than 16KB then chunks will likely contain only one document. However, documents can never spread across several chunks (all fields of a single document are in the same chunk). When at least one document in a chunk is large enough so that the chunk is larger than 32KB, the chunk will actually be compressed in several LZ4 blocks of 16KB. this allows StoredFieldVisitor s which are only interested in the first fields of a document to not have to decompress 10MB of data if the document is 10MB, but only 16KB. Given that the original lengths are written in the metadata of the chunk, the decompressor can leverage this information to stop decoding as soon as enough data has been decompressed. In case documents are incompressible, CompressedDocs will be less than 0.5% larger than Docs. A fields index file (extension .fdx ). FieldsIndex (.fdx) --> <Header>, <ChunkIndex> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Known limitations This StoredFieldsFormat does not support individual documents larger than ( 2 31 - 2 14 ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene41StoredFieldsFormat Inherited Members CompressingStoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) CompressingStoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext) CompressingStoredFieldsFormat.ToString() 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.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41StoredFieldsFormat : CompressingStoredFieldsFormat Constructors | Improve this Doc View Source Lucene41StoredFieldsFormat() Sole constructor. Declaration public Lucene41StoredFieldsFormat()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene42 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene42 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene42Codec . Classes Lucene42Codec Implements the Lucene 4.2 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene42 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene42DocValuesFormat Lucene 4.2 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with seven basic strategies. Delta-compressed Numerics: per-document integers written in blocks of 4096. For each block the minimum value is encoded, and each entry is a delta from that minimum value. Table-compressed Numerics: when the number of unique values is very small, a lookup table is written instead. Each per-document entry is instead the ordinal to this table. Uncompressed Numerics: when all values would fit into a single byte, and the acceptableOverheadRatio would pack values into 8 bits per value anyway, they are written as absolute values (with no indirection or packing) for performance. GCD-compressed Numerics: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed by maxDoc*length . Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 4096, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Sorted: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinals written using one of the numeric strategies above. SortedSet: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinal list written using one of the binary strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<FieldNumber,EntryType,Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry NumericEntry --> DataOffset,CompressionType,PackedVersion BinaryEntry --> DataOffset,DataLength,MinLength,MaxLength,PackedVersion?,BlockSize? SortedEntry --> DataOffset,ValueCount FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) ) DataOffset,DataLength --> Int64 ( WriteInt64(Int64) ) EntryType,CompressionType --> Byte ( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a SortedEntry with the FST metadata, and an ordinary NumericEntry for the document-to-ord metadata. SortedSet fields have two entries: a SortedEntry with the FST metadata, and an ordinary BinaryEntry for the document-to-ord-list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 (NumericEntry), 1 (BinaryEntry, or 2 (SortedEntry) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) CompressionType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 4096 integers, every integer is delta-encoded from the minimum value within the block. 1 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. 2 --> uncompressed. When the acceptableOverheadRatio parameter would upgrade the number of bits required to 8, and all values fit in a byte, these are written as absolute binary values for performance. 3 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length) . Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | UncompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=4096) ( BlockPackedWriter ) TableCompressedNumerics --> TableSize, Int64 ( WriteInt64(Int64) ) TableSize , PackedInts ( PackedInt32s ) UncompressedNumerics --> Byte ( WriteByte(Byte) ) maxdoc Addresses --> MonotonicBlockPackedInts(blockSize=4096) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Lucene42FieldInfosFormat Lucene 4.2 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader WriteHeader(DataOutput, String, Int32) FieldsCount --> VInt WriteVInt32(Int32) FieldName --> String WriteString(String) FieldBits, DocValuesBits --> Byte WriteByte(Byte) FieldNumber --> VInt WriteInt32(Int32) Attributes --> IDictionary<String,String> WriteStringStringMap(IDictionary<String, String>) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues. ( NUMERIC ) 2: BinaryDocValues. ( BINARY ) 3: SortedDocValues. ( SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene42NormsFormat Lucene 4.2 score normalization format. NOTE: this uses the same format as Lucene42DocValuesFormat Numeric DocValues, but with different file extensions, and passing FASTEST for uncompressed encoding: trading off space for performance. Files: .nvd : DocValues data .nvm : DocValues metadata Lucene42TermVectorsFormat Lucene 4.2 term vectors format ( TermVectorsFormat ). Very similarly to Lucene41StoredFieldsFormat , this format is based on compressed chunks of data, with document-level granularity so that a document can never span across distinct chunks. Moreover, data is made as compact as possible: textual data is compressed using the very light, LZ4 compression algorithm, binary data is written using fixed-size blocks of packed System.Int32 s ( PackedInt32s ). Term vectors are stored using two files a data file where terms, frequencies, positions, offsets and payloads are stored, an index file, loaded into memory, used to locate specific documents in the data file. Looking up term vectors for any document requires at most 1 disk seek. File formats A vector data file (extension .tvd ). this file stores terms, frequencies, positions, offsets and payloads for every document. Upon writing a new segment, it accumulates data into memory until the buffer used to store terms and payloads grows beyond 4KB. Then it flushes all metadata, terms and positions to disk using LZ4 compression for terms and payloads and blocks of packed System.Int32 s ( BlockPackedWriter ) for positions. Here is a more detailed description of the field data file format: VectorData (.tvd) --> <Header>, PackedIntsVersion, ChunkSize, <Chunk> ChunkCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkSize is the number of bytes of terms to accumulate before flushing, as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, < NumFields >, < FieldNums >, < FieldNumOffs >, < Flags >, < NumTerms >, < TermLengths >, < TermFreqs >, < Positions >, < StartOffsets >, < Lengths >, < PayloadLengths >, < TermAndPayloads > DocBase is the ID of the first doc of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs is the number of documents in the chunk NumFields --> DocNumFields ChunkDocs DocNumFields is the number of fields for each doc, written as a VInt ( WriteVInt32(Int32) ) if ChunkDocs==1 and as a PackedInt32s array otherwise FieldNums --> FieldNumDelta TotalDistincFields , a delta-encoded list of the sorted unique field numbers present in the chunk FieldNumOffs --> FieldNumOff TotalFields , as a PackedInt32s array FieldNumOff is the offset of the field number in FieldNums TotalFields is the total number of fields (sum of the values of NumFields) Flags --> Bit < FieldFlags > Bit is a single bit which when true means that fields have the same options for every document in the chunk FieldFlags --> if Bit==1: Flag TotalDistinctFields else Flag TotalFields Flag: a 3-bits int where: the first bit means that the field has positions the second bit means that the field has offsets the third bit means that the field has payloads NumTerms --> FieldNumTerms TotalFields FieldNumTerms: the number of terms for each field, using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermLengths --> PrefixLength TotalTerms SuffixLength TotalTerms TotalTerms: total number of terms (sum of NumTerms) PrefixLength: 0 for the first term of a field, the common prefix with the previous term otherwise using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) SuffixLength: length of the term minus PrefixLength for every term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermFreqs --> TermFreqMinus1 TotalTerms TermFreqMinus1: (frequency - 1) for each term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Positions --> PositionDelta TotalPositions TotalPositions is the sum of frequencies of terms of all fields that have positions PositionDelta: the absolute position for the first position of a term, and the difference with the previous positions for following positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) StartOffsets --> (AvgCharsPerTerm TotalDistinctFields ) StartOffsetDelta TotalOffsets TotalOffsets is the sum of frequencies of terms of all fields that have offsets AvgCharsPerTerm: average number of chars per term, encoded as a float on 4 bytes. They are not present if no field has both positions and offsets enabled. StartOffsetDelta: (startOffset - previousStartOffset - AvgCharsPerTerm * PositionDelta). previousStartOffset is 0 for the first offset and AvgCharsPerTerm is 0 if the field has no positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Lengths --> LengthMinusTermLength TotalOffsets LengthMinusTermLength: (endOffset - startOffset - termLength) using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) PayloadLengths --> PayloadLength TotalPayloads TotalPayloads is the sum of frequencies of terms of all fields that have payloads PayloadLength is the payload length encoded using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermAndPayloads --> LZ4-compressed representation of < FieldTermsAndPayLoads > TotalFields FieldTermsAndPayLoads --> Terms (Payloads) Terms: term bytes Payloads: payload bytes (if the field has payloads) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) An index file (extension .tvx ). VectorIndex (.tvx) --> <Header>, <ChunkIndex>, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42Codec.html",
    "title": "Class Lucene42Codec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42Codec Implements the Lucene 4.2 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene42 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec Lucene42Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.2 segments\")] [CodecName(\"Lucene42\")] public class Lucene42Codec : Codec Constructors | Improve this Doc View Source Lucene42Codec() Sole constructor. Declaration public Lucene42Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene42\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42DocValuesFormat.html",
    "title": "Class Lucene42DocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42DocValuesFormat Lucene 4.2 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with seven basic strategies. Delta-compressed Numerics: per-document integers written in blocks of 4096. For each block the minimum value is encoded, and each entry is a delta from that minimum value. Table-compressed Numerics: when the number of unique values is very small, a lookup table is written instead. Each per-document entry is instead the ordinal to this table. Uncompressed Numerics: when all values would fit into a single byte, and the acceptableOverheadRatio would pack values into 8 bits per value anyway, they are written as absolute values (with no indirection or packing) for performance. GCD-compressed Numerics: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed by maxDoc*length . Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 4096, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Sorted: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinals written using one of the numeric strategies above. SortedSet: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinal list written using one of the binary strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<FieldNumber,EntryType,Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry NumericEntry --> DataOffset,CompressionType,PackedVersion BinaryEntry --> DataOffset,DataLength,MinLength,MaxLength,PackedVersion?,BlockSize? SortedEntry --> DataOffset,ValueCount FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) ) DataOffset,DataLength --> Int64 ( WriteInt64(Int64) ) EntryType,CompressionType --> Byte ( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a SortedEntry with the FST metadata, and an ordinary NumericEntry for the document-to-ord metadata. SortedSet fields have two entries: a SortedEntry with the FST metadata, and an ordinary BinaryEntry for the document-to-ord-list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 (NumericEntry), 1 (BinaryEntry, or 2 (SortedEntry) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) CompressionType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 4096 integers, every integer is delta-encoded from the minimum value within the block. 1 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. 2 --> uncompressed. When the acceptableOverheadRatio parameter would upgrade the number of bits required to 8, and all values fit in a byte, these are written as absolute binary values for performance. 3 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length) . Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | UncompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=4096) ( BlockPackedWriter ) TableCompressedNumerics --> TableSize, Int64 ( WriteInt64(Int64) ) TableSize , PackedInts ( PackedInt32s ) UncompressedNumerics --> Byte ( WriteByte(Byte) ) maxdoc Addresses --> MonotonicBlockPackedInts(blockSize=4096) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Inheritance System.Object DocValuesFormat Lucene42DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.2 segments\")] [DocValuesFormatName(\"Lucene42\")] public class Lucene42DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene42DocValuesFormat() Calls Lucene42DocValuesFormat(PackedInts.DEFAULT) ( Lucene42DocValuesFormat(Single) . Declaration public Lucene42DocValuesFormat() | Improve this Doc View Source Lucene42DocValuesFormat(Single) Creates a new Lucene42DocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public Lucene42DocValuesFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Fields | Improve this Doc View Source m_acceptableOverheadRatio Declaration protected readonly float m_acceptableOverheadRatio Field Value Type Description System.Single | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosFormat.html",
    "title": "Class Lucene42FieldInfosFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42FieldInfosFormat Lucene 4.2 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader WriteHeader(DataOutput, String, Int32) FieldsCount --> VInt WriteVInt32(Int32) FieldName --> String WriteString(String) FieldBits, DocValuesBits --> Byte WriteByte(Byte) FieldNumber --> VInt WriteInt32(Int32) Attributes --> IDictionary<String,String> WriteStringStringMap(IDictionary<String, String>) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues. ( NUMERIC ) 2: BinaryDocValues. ( BINARY ) 3: SortedDocValues. ( SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene42FieldInfosFormat 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.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.2-4.5 segments\")] public class Lucene42FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene42FieldInfosFormat() Sole constructor. Declaration public Lucene42FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat.html",
    "title": "Class Lucene42NormsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42NormsFormat Lucene 4.2 score normalization format. NOTE: this uses the same format as Lucene42DocValuesFormat Numeric DocValues, but with different file extensions, and passing FASTEST for uncompressed encoding: trading off space for performance. Files: .nvd : DocValues data .nvm : DocValues metadata Inheritance System.Object NormsFormat Lucene42NormsFormat 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.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public class Lucene42NormsFormat : NormsFormat Constructors | Improve this Doc View Source Lucene42NormsFormat() Calls Lucene42DocValuesFormat(PackedInt32s.FASTEST) ( Lucene42NormsFormat(Single) ). Declaration public Lucene42NormsFormat() | Improve this Doc View Source Lucene42NormsFormat(Single) Creates a new Lucene42DocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public Lucene42NormsFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState) See Also Lucene42DocValuesFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42TermVectorsFormat.html",
    "title": "Class Lucene42TermVectorsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene42TermVectorsFormat Lucene 4.2 term vectors format ( TermVectorsFormat ). Very similarly to Lucene41StoredFieldsFormat , this format is based on compressed chunks of data, with document-level granularity so that a document can never span across distinct chunks. Moreover, data is made as compact as possible: textual data is compressed using the very light, LZ4 compression algorithm, binary data is written using fixed-size blocks of packed System.Int32 s ( PackedInt32s ). Term vectors are stored using two files a data file where terms, frequencies, positions, offsets and payloads are stored, an index file, loaded into memory, used to locate specific documents in the data file. Looking up term vectors for any document requires at most 1 disk seek. File formats A vector data file (extension .tvd ). this file stores terms, frequencies, positions, offsets and payloads for every document. Upon writing a new segment, it accumulates data into memory until the buffer used to store terms and payloads grows beyond 4KB. Then it flushes all metadata, terms and positions to disk using LZ4 compression for terms and payloads and blocks of packed System.Int32 s ( BlockPackedWriter ) for positions. Here is a more detailed description of the field data file format: VectorData (.tvd) --> <Header>, PackedIntsVersion, ChunkSize, <Chunk> ChunkCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkSize is the number of bytes of terms to accumulate before flushing, as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, < NumFields >, < FieldNums >, < FieldNumOffs >, < Flags >, < NumTerms >, < TermLengths >, < TermFreqs >, < Positions >, < StartOffsets >, < Lengths >, < PayloadLengths >, < TermAndPayloads > DocBase is the ID of the first doc of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs is the number of documents in the chunk NumFields --> DocNumFields ChunkDocs DocNumFields is the number of fields for each doc, written as a VInt ( WriteVInt32(Int32) ) if ChunkDocs==1 and as a PackedInt32s array otherwise FieldNums --> FieldNumDelta TotalDistincFields , a delta-encoded list of the sorted unique field numbers present in the chunk FieldNumOffs --> FieldNumOff TotalFields , as a PackedInt32s array FieldNumOff is the offset of the field number in FieldNums TotalFields is the total number of fields (sum of the values of NumFields) Flags --> Bit < FieldFlags > Bit is a single bit which when true means that fields have the same options for every document in the chunk FieldFlags --> if Bit==1: Flag TotalDistinctFields else Flag TotalFields Flag: a 3-bits int where: the first bit means that the field has positions the second bit means that the field has offsets the third bit means that the field has payloads NumTerms --> FieldNumTerms TotalFields FieldNumTerms: the number of terms for each field, using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermLengths --> PrefixLength TotalTerms SuffixLength TotalTerms TotalTerms: total number of terms (sum of NumTerms) PrefixLength: 0 for the first term of a field, the common prefix with the previous term otherwise using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) SuffixLength: length of the term minus PrefixLength for every term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermFreqs --> TermFreqMinus1 TotalTerms TermFreqMinus1: (frequency - 1) for each term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Positions --> PositionDelta TotalPositions TotalPositions is the sum of frequencies of terms of all fields that have positions PositionDelta: the absolute position for the first position of a term, and the difference with the previous positions for following positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) StartOffsets --> (AvgCharsPerTerm TotalDistinctFields ) StartOffsetDelta TotalOffsets TotalOffsets is the sum of frequencies of terms of all fields that have offsets AvgCharsPerTerm: average number of chars per term, encoded as a float on 4 bytes. They are not present if no field has both positions and offsets enabled. StartOffsetDelta: (startOffset - previousStartOffset - AvgCharsPerTerm * PositionDelta). previousStartOffset is 0 for the first offset and AvgCharsPerTerm is 0 if the field has no positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Lengths --> LengthMinusTermLength TotalOffsets LengthMinusTermLength: (endOffset - startOffset - termLength) using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) PayloadLengths --> PayloadLength TotalPayloads TotalPayloads is the sum of frequencies of terms of all fields that have payloads PayloadLength is the payload length encoded using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermAndPayloads --> LZ4-compressed representation of < FieldTermsAndPayLoads > TotalFields FieldTermsAndPayLoads --> Terms (Payloads) Terms: term bytes Payloads: payload bytes (if the field has payloads) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) An index file (extension .tvx ). VectorIndex (.tvx) --> <Header>, <ChunkIndex>, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene42TermVectorsFormat Inherited Members CompressingTermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) CompressingTermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext) CompressingTermVectorsFormat.ToString() 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.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public sealed class Lucene42TermVectorsFormat : CompressingTermVectorsFormat Constructors | Improve this Doc View Source Lucene42TermVectorsFormat() Sole constructor. Declaration public Lucene42TermVectorsFormat()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene45 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene45 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for testing Lucene45Codec . Classes Lucene45Codec Implements the Lucene 4.5 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene45 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene45DocValuesConsumer Writer for Lucene45DocValuesFormat Lucene45DocValuesFormat Lucene 4.5 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with these strategies: NUMERIC : Delta-compressed: per-document integers written in blocks of 16k. For each block the minimum value in that block is encoded, and each entry is a delta from that minimum value. Each block of deltas is compressed with bitpacking. For more information, see BlockPackedWriter . Table-compressed: when the number of unique values is very small (< 256), and when there are unused \"gaps\" in the range of values used (such as SmallSingle ), a lookup table is written instead. Each per-document entry is instead the ordinal to this table, and those ordinals are compressed with bitpacking ( PackedInt32s ). GCD-compressed: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. BINARY : Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed directly with multiplication ( docID * length ). Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Prefix-compressed Binary: values are written in chunks of 16, with the first value written completely and other values sharing prefixes. Chunk addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each chunk the deviation from the delta (actual - expected) is written. SORTED : Sorted: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, along with the per-document ordinals written using one of the numeric strategies above. SORTED_SET : SortedSet: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, an ordinal list and per-document index into this list are written using the numeric strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry | SortedSetEntry NumericEntry --> GCDNumericEntry | TableNumericEntry | DeltaNumericEntry GCDNumericEntry --> NumericHeader,MinValue,GCD TableNumericEntry --> NumericHeader,TableSize,Int64 ( WriteInt64(Int64) ) TableSize DeltaNumericEntry --> NumericHeader NumericHeader --> FieldNumber,EntryType,NumericType,MissingOffset,PackedVersion,DataOffset,Count,BlockSize BinaryEntry --> FixedBinaryEntry | VariableBinaryEntry | PrefixBinaryEntry FixedBinaryEntry --> BinaryHeader VariableBinaryEntry --> BinaryHeader,AddressOffset,PackedVersion,BlockSize PrefixBinaryEntry --> BinaryHeader,AddressInterval,AddressOffset,PackedVersion,BlockSize BinaryHeader --> FieldNumber,EntryType,BinaryType,MissingOffset,MinLength,MaxLength,DataOffset SortedEntry --> FieldNumber,EntryType,BinaryEntry,NumericEntry SortedSetEntry --> EntryType,BinaryEntry,NumericEntry,NumericEntry FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) EntryType,CompressionType --> Byte ( WriteByte(Byte) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) MinValue,GCD,MissingOffset,AddressOffset,DataOffset --> Int64 ( WriteInt64(Int64) ) TableSize --> vInt ( WriteVInt32(Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and an ordinary Lucene45DocValuesProducer.NumericEntry for the document-to-ord metadata. SortedSet fields have three entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and two Lucene45DocValuesProducer.NumericEntry s for the document-to-ord-index and ordinal list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 ( Lucene45DocValuesProducer.NumericEntry ) or 1 ( Lucene45DocValuesProducer.BinaryEntry ) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) NumericType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 16k integers, every integer is delta-encoded from the minimum value within the block. 1 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. 2 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. BinaryType indicates how Binary values will be stored: 0 --> fixed-width. All values have the same length, addressing by multiplication. 1 --> variable-width. An address for each value is stored. 2 --> prefix-compressed. An address to the start of every interval'th value is stored. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length). Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. MissingOffset points to a byte[] containing a bitset of all documents that had a value for the field. If its -1, then there are no missing values. Checksum contains the CRC32 checksum of all bytes in the .dvm file up until the checksum. this is used to verify integrity of the file on opening the index. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) TableCompressedNumerics --> PackedInts ( PackedInt32s ) GCDCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) Addresses --> MonotonicBlockPackedInts(blockSize=16k) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene45DocValuesProducer Reader for Lucene45DocValuesFormat . Lucene45DocValuesProducer.BinaryEntry Metadata entry for a binary docvalues field. Lucene45DocValuesProducer.NumericEntry Metadata entry for a numeric docvalues field. Lucene45DocValuesProducer.SortedSetEntry Metadata entry for a sorted-set docvalues field."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45Codec.html",
    "title": "Class Lucene45Codec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45Codec Implements the Lucene 4.5 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene45 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec Lucene45Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.3-4.5 segments\")] [CodecName(\"Lucene45\")] public class Lucene45Codec : Codec Constructors | Improve this Doc View Source Lucene45Codec() Sole constructor. Declaration public Lucene45Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override sealed NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene45\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesConsumer.html",
    "title": "Class Lucene45DocValuesConsumer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45DocValuesConsumer Writer for Lucene45DocValuesFormat Inheritance System.Object DocValuesConsumer Lucene45DocValuesConsumer Implements System.IDisposable Inherited Members DocValuesConsumer.MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) DocValuesConsumer.MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) DocValuesConsumer.MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) DocValuesConsumer.MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) DocValuesConsumer.Dispose() 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.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public class Lucene45DocValuesConsumer : DocValuesConsumer, IDisposable Constructors | Improve this Doc View Source Lucene45DocValuesConsumer(SegmentWriteState, String, String, String, String) Expert: Creates a new writer. Declaration public Lucene45DocValuesConsumer(SegmentWriteState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension) Parameters Type Name Description SegmentWriteState state System.String dataCodec System.String dataExtension System.String metaCodec System.String metaExtension Fields | Improve this Doc View Source BINARY_FIXED_UNCOMPRESSED Uncompressed binary, written directly (fixed length). Declaration public const int BINARY_FIXED_UNCOMPRESSED = 0 Field Value Type Description System.Int32 | Improve this Doc View Source BINARY_PREFIX_COMPRESSED Compressed binary with shared prefixes Declaration public const int BINARY_PREFIX_COMPRESSED = 2 Field Value Type Description System.Int32 | Improve this Doc View Source BINARY_VARIABLE_UNCOMPRESSED Uncompressed binary, written directly (variable length). Declaration public const int BINARY_VARIABLE_UNCOMPRESSED = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DELTA_COMPRESSED Compressed using packed blocks of System.Int32 s. Declaration public const int DELTA_COMPRESSED = 0 Field Value Type Description System.Int32 | Improve this Doc View Source GCD_COMPRESSED Compressed by computing the GCD. Declaration public const int GCD_COMPRESSED = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SORTED_SET_SINGLE_VALUED_SORTED Single-valued sorted set values, encoded as sorted values, so no level of indirection: docId -> ord. Declaration public static readonly int SORTED_SET_SINGLE_VALUED_SORTED Field Value Type Description System.Int32 | Improve this Doc View Source SORTED_SET_WITH_ADDRESSES Standard storage for sorted set values with 1 level of indirection: docId -> address -> ord. Declaration public static readonly int SORTED_SET_WITH_ADDRESSES Field Value Type Description System.Int32 | Improve this Doc View Source TABLE_COMPRESSED Compressed by giving IDs to unique values. Declaration public const int TABLE_COMPRESSED = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Declaration public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values Overrides DocValuesConsumer.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Declaration public override void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> values Overrides DocValuesConsumer.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrd Overrides DocValuesConsumer.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrdCount System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> ords Overrides DocValuesConsumer.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddTermsDict(FieldInfo, IEnumerable<BytesRef>) Expert: writes a value dictionary for a sorted/sortedset field. Declaration protected virtual void AddTermsDict(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat.html",
    "title": "Class Lucene45DocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45DocValuesFormat Lucene 4.5 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with these strategies: NUMERIC : Delta-compressed: per-document integers written in blocks of 16k. For each block the minimum value in that block is encoded, and each entry is a delta from that minimum value. Each block of deltas is compressed with bitpacking. For more information, see BlockPackedWriter . Table-compressed: when the number of unique values is very small (< 256), and when there are unused \"gaps\" in the range of values used (such as SmallSingle ), a lookup table is written instead. Each per-document entry is instead the ordinal to this table, and those ordinals are compressed with bitpacking ( PackedInt32s ). GCD-compressed: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. BINARY : Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed directly with multiplication ( docID * length ). Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Prefix-compressed Binary: values are written in chunks of 16, with the first value written completely and other values sharing prefixes. Chunk addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each chunk the deviation from the delta (actual - expected) is written. SORTED : Sorted: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, along with the per-document ordinals written using one of the numeric strategies above. SORTED_SET : SortedSet: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, an ordinal list and per-document index into this list are written using the numeric strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry | SortedSetEntry NumericEntry --> GCDNumericEntry | TableNumericEntry | DeltaNumericEntry GCDNumericEntry --> NumericHeader,MinValue,GCD TableNumericEntry --> NumericHeader,TableSize,Int64 ( WriteInt64(Int64) ) TableSize DeltaNumericEntry --> NumericHeader NumericHeader --> FieldNumber,EntryType,NumericType,MissingOffset,PackedVersion,DataOffset,Count,BlockSize BinaryEntry --> FixedBinaryEntry | VariableBinaryEntry | PrefixBinaryEntry FixedBinaryEntry --> BinaryHeader VariableBinaryEntry --> BinaryHeader,AddressOffset,PackedVersion,BlockSize PrefixBinaryEntry --> BinaryHeader,AddressInterval,AddressOffset,PackedVersion,BlockSize BinaryHeader --> FieldNumber,EntryType,BinaryType,MissingOffset,MinLength,MaxLength,DataOffset SortedEntry --> FieldNumber,EntryType,BinaryEntry,NumericEntry SortedSetEntry --> EntryType,BinaryEntry,NumericEntry,NumericEntry FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) EntryType,CompressionType --> Byte ( WriteByte(Byte) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) MinValue,GCD,MissingOffset,AddressOffset,DataOffset --> Int64 ( WriteInt64(Int64) ) TableSize --> vInt ( WriteVInt32(Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and an ordinary Lucene45DocValuesProducer.NumericEntry for the document-to-ord metadata. SortedSet fields have three entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and two Lucene45DocValuesProducer.NumericEntry s for the document-to-ord-index and ordinal list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 ( Lucene45DocValuesProducer.NumericEntry ) or 1 ( Lucene45DocValuesProducer.BinaryEntry ) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) NumericType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 16k integers, every integer is delta-encoded from the minimum value within the block. 1 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. 2 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. BinaryType indicates how Binary values will be stored: 0 --> fixed-width. All values have the same length, addressing by multiplication. 1 --> variable-width. An address for each value is stored. 2 --> prefix-compressed. An address to the start of every interval'th value is stored. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length). Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. MissingOffset points to a byte[] containing a bitset of all documents that had a value for the field. If its -1, then there are no missing values. Checksum contains the CRC32 checksum of all bytes in the .dvm file up until the checksum. this is used to verify integrity of the file on opening the index. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) TableCompressedNumerics --> PackedInts ( PackedInt32s ) GCDCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) Addresses --> MonotonicBlockPackedInts(blockSize=16k) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat Lucene45DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax [DocValuesFormatName(\"Lucene45\")] public sealed class Lucene45DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene45DocValuesFormat() Sole Constructor Declaration public Lucene45DocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.BinaryEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.BinaryEntry.html",
    "title": "Class Lucene45DocValuesProducer.BinaryEntry | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.BinaryEntry Metadata entry for a binary docvalues field. Inheritance System.Object Lucene45DocValuesProducer.BinaryEntry 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.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class BinaryEntry Properties | Improve this Doc View Source AddressesOffset Offset to the addressing data that maps a value to its slice of the byte[] . Declaration public long AddressesOffset { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source AddressInterval Interval of shared prefix chunks (when using prefix-compressed binary). Declaration public long AddressInterval { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source BlockSize Packed ints blocksize. Declaration public int BlockSize { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Count of values written. Declaration public long Count { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source PackedInt32sVersion Packed ints version used to encode addressing information. NOTE: This was packedIntsVersion (field) in Lucene. Declaration public int PackedInt32sVersion { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.html",
    "title": "Class Lucene45DocValuesProducer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45DocValuesProducer Reader for Lucene45DocValuesFormat . Inheritance System.Object DocValuesProducer Lucene45DocValuesProducer Implements System.IDisposable Inherited Members DocValuesProducer.Dispose() 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.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public class Lucene45DocValuesProducer : DocValuesProducer, IDisposable Constructors | Improve this Doc View Source Lucene45DocValuesProducer(SegmentReadState, String, String, String, String) Expert: instantiates a new reader. Declaration protected Lucene45DocValuesProducer(SegmentReadState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension) Parameters Type Name Description SegmentReadState state System.String dataCodec System.String dataExtension System.String metaCodec System.String metaExtension Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides DocValuesProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesProducer.Dispose(Boolean) | Improve this Doc View Source GetAddressInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.BinaryEntry) Returns an address instance for variable-length binary values. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetAddressInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.BinaryEntry bytes) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.BinaryEntry bytes Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetBinary(FieldInfo) Declaration public override BinaryDocValues GetBinary(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description BinaryDocValues Overrides DocValuesProducer.GetBinary(FieldInfo) | Improve this Doc View Source GetDocsWithField(FieldInfo) Declaration public override IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits Overrides DocValuesProducer.GetDocsWithField(FieldInfo) | Improve this Doc View Source GetIntervalInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.BinaryEntry) Returns an address instance for prefix-compressed binary values. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetIntervalInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.BinaryEntry bytes) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.BinaryEntry bytes Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetNumeric(FieldInfo) Declaration public override NumericDocValues GetNumeric(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description NumericDocValues Overrides DocValuesProducer.GetNumeric(FieldInfo) | Improve this Doc View Source GetOrdIndexInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.NumericEntry) Returns an address instance for sortedset ordinal lists. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetOrdIndexInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.NumericEntry entry) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.NumericEntry entry Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetSorted(FieldInfo) Declaration public override SortedDocValues GetSorted(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedDocValues Overrides DocValuesProducer.GetSorted(FieldInfo) | Improve this Doc View Source GetSortedSet(FieldInfo) Declaration public override SortedSetDocValues GetSortedSet(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedSetDocValues Overrides DocValuesProducer.GetSortedSet(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides DocValuesProducer.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.NumericEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.NumericEntry.html",
    "title": "Class Lucene45DocValuesProducer.NumericEntry | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.NumericEntry Metadata entry for a numeric docvalues field. Inheritance System.Object Lucene45DocValuesProducer.NumericEntry 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.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class NumericEntry Properties | Improve this Doc View Source BlockSize Packed System.Int32 s blocksize. Declaration public int BlockSize { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Count of values written. Declaration public long Count { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source Offset Offset to the actual numeric values. Declaration public long Offset { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source PackedInt32sVersion Packed System.Int32 s version used to encode these numerics. NOTE: This was packedIntsVersion (field) in Lucene Declaration public int PackedInt32sVersion { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.SortedSetEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.SortedSetEntry.html",
    "title": "Class Lucene45DocValuesProducer.SortedSetEntry | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.SortedSetEntry Metadata entry for a sorted-set docvalues field. Inheritance System.Object Lucene45DocValuesProducer.SortedSetEntry 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.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class SortedSetEntry"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene46 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene46 <!-- 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. --> Lucene 4.6 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. In version 4.5, DocValues were extended to explicitly represent missing values. In version 4.6, FieldInfos were extended to support per-field DocValues generation, to allow updating NumericDocValues fields. In version 4.8, checksum footers were added to the end of each index file for improved data integrity. Specifically, the last 8 bytes of every index file contain the zlib-crc32 checksum of the file. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene46Codec Implements the Lucene 4.6 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene46 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46FieldInfosFormat Lucene 4.6 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes> FieldsCount ,Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) DocValuesGen --> Int64 ( WriteInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 string. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a System.Byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a System.Byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues . ( NUMERIC ) 2: BinaryDocValues . ( BINARY ) 3: SortedDocValues . ( SORTED ) DocValuesGen is the generation count of the field's DocValues . If this is -1, there are no DocValues updates to that field. Anything above zero means there are updates stored by DocValuesFormat . Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46SegmentInfoFormat Lucene 4.6 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Files, Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46SegmentInfoReader Lucene 4.6 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46Codec.html",
    "title": "Class Lucene46Codec | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene46Codec Implements the Lucene 4.6 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene46 package documentation for file format details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec Lucene46Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() 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.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax [CodecName(\"Lucene46\")] public class Lucene46Codec : Codec Constructors | Improve this Doc View Source Lucene46Codec() Sole constructor. Declaration public Lucene46Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override sealed FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override sealed NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override sealed SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene45\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46FieldInfosFormat.html",
    "title": "Class Lucene46FieldInfosFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene46FieldInfosFormat Lucene 4.6 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes> FieldsCount ,Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) DocValuesGen --> Int64 ( WriteInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 string. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a System.Byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a System.Byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues . ( NUMERIC ) 2: BinaryDocValues . ( BINARY ) 3: SortedDocValues . ( SORTED ) DocValuesGen is the generation count of the field's DocValues . If this is -1, there are no DocValues updates to that field. Anything above zero means there are updates stored by DocValuesFormat . Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene46FieldInfosFormat 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.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public sealed class Lucene46FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene46FieldInfosFormat() Sole constructor. Declaration public Lucene46FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoFormat.html",
    "title": "Class Lucene46SegmentInfoFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene46SegmentInfoFormat Lucene 4.6 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Files, Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene46SegmentInfoFormat 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.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoFormat : SegmentInfoFormat Constructors | Improve this Doc View Source Lucene46SegmentInfoFormat() Sole constructor. Declaration public Lucene46SegmentInfoFormat() Fields | Improve this Doc View Source SI_EXTENSION File extension used to store SegmentInfo . Declaration public static readonly string SI_EXTENSION Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter See Also SegmentInfos"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoReader.html",
    "title": "Class Lucene46SegmentInfoReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene46SegmentInfoReader Lucene 4.6 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene46SegmentInfoReader 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.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoReader : SegmentInfoReader Constructors | Improve this Doc View Source Lucene46SegmentInfoReader() Sole constructor. Declaration public Lucene46SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory dir, string segment, IOContext context) Parameters Type Name Description Directory dir System.String segment IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) See Also Lucene46SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoWriter.html",
    "title": "Class Lucene46SegmentInfoWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lucene46SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene46SegmentInfoWriter 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.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoWriter : SegmentInfoWriter Constructors | Improve this Doc View Source Lucene46SegmentInfoWriter() Sole constructor. Declaration public Lucene46SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Save a single segment's info. Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext) See Also Lucene46SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsAndPositionsEnum.html",
    "title": "Class MappingMultiDocsAndPositionsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MappingMultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MappingMultiDocsAndPositionsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Codecs Assembly : Lucene.Net.dll Syntax public sealed class MappingMultiDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source MappingMultiDocsAndPositionsEnum() Sole constructor. Declaration public MappingMultiDocsAndPositionsEnum() Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source MergeState Gets or Sets the MergeState , which is used to re-map document IDs. Declaration public MergeState MergeState { get; set; } Property Value Type Description MergeState | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsAndPositionsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsAndPositionsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsEnum.html",
    "title": "Class MappingMultiDocsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MappingMultiDocsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum MappingMultiDocsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Codecs Assembly : Lucene.Net.dll Syntax public sealed class MappingMultiDocsEnum : DocsEnum Constructors | Improve this Doc View Source MappingMultiDocsEnum() Sole constructor. Declaration public MappingMultiDocsEnum() Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source MergeState Sets the MergeState , which is used to re-map document IDs. Declaration public MergeState MergeState { get; set; } Property Value Type Description MergeState | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListReader.html",
    "title": "Class MultiLevelSkipListReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiLevelSkipListReader This abstract class reads skip lists with multiple levels. See MultiLevelSkipListWriter for the information about the encoding of the multi level skip lists. Subclasses must implement the abstract method ReadSkipData(Int32, IndexInput) which defines the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiLevelSkipListReader Lucene40SkipListReader 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class MultiLevelSkipListReader : IDisposable Constructors | Improve this Doc View Source MultiLevelSkipListReader(IndexInput, Int32, Int32) Creates a MultiLevelSkipListReader , where Lucene.Net.Codecs.MultiLevelSkipListReader.skipInterval and Lucene.Net.Codecs.MultiLevelSkipListReader.skipMultiplier are the same. Declaration protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval | Improve this Doc View Source MultiLevelSkipListReader(IndexInput, Int32, Int32, Int32) Creates a MultiLevelSkipListReader . Declaration protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval, int skipMultiplier) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval System.Int32 skipMultiplier Fields | Improve this Doc View Source m_maxNumberOfSkipLevels The maximum number of skip levels possible for this index. Declaration protected int m_maxNumberOfSkipLevels Field Value Type Description System.Int32 | Improve this Doc View Source m_skipDoc Doc id of current skip entry per level. Declaration protected int[] m_skipDoc Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Doc Returns the id of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int Doc { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Subclasses may override to dispose their own resources. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Init(Int64, Int32) Initializes the reader, for reuse on a new term. Declaration public virtual void Init(long skipPointer, int df) Parameters Type Name Description System.Int64 skipPointer System.Int32 df | Improve this Doc View Source ReadSkipData(Int32, IndexInput) Subclasses must implement the actual skip data encoding in this method. Declaration protected abstract int ReadSkipData(int level, IndexInput skipStream) Parameters Type Name Description System.Int32 level The level skip data shall be read from. IndexInput skipStream The skip stream to read from. Returns Type Description System.Int32 | Improve this Doc View Source SeekChild(Int32) Seeks the skip entry on the given level. Declaration protected virtual void SeekChild(int level) Parameters Type Name Description System.Int32 level | Improve this Doc View Source SetLastSkipData(Int32) Copies the values of the last read skip entry on this level . Declaration protected virtual void SetLastSkipData(int level) Parameters Type Name Description System.Int32 level | Improve this Doc View Source SkipTo(Int32) Skips entries to the first beyond the current whose document number is greater than or equal to target . Returns the current doc count. Declaration public virtual int SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListWriter.html",
    "title": "Class MultiLevelSkipListWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiLevelSkipListWriter This abstract class writes skip lists with multiple levels. Example for skipInterval = 3: c (skip level 2) c c c (skip level 1) x x x x x x x x x x (skip level 0) d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) 3 6 9 12 15 18 21 24 27 30 (df) d - document x - skip data c - skip data with child pointer Skip level i contains every skipInterval-th entry from skip level i-1. Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. this guarantees a logarithmic amount of skips to find the target document. While this class takes care of writing the different skip levels, subclasses must define the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiLevelSkipListWriter 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class MultiLevelSkipListWriter Constructors | Improve this Doc View Source MultiLevelSkipListWriter(Int32, Int32, Int32) Creates a MultiLevelSkipListWriter , where Lucene.Net.Codecs.MultiLevelSkipListWriter.skipInterval and Lucene.Net.Codecs.MultiLevelSkipListWriter.skipMultiplier are the same. Declaration protected MultiLevelSkipListWriter(int skipInterval, int maxSkipLevels, int df) Parameters Type Name Description System.Int32 skipInterval System.Int32 maxSkipLevels System.Int32 df | Improve this Doc View Source MultiLevelSkipListWriter(Int32, Int32, Int32, Int32) Creates a MultiLevelSkipListWriter . Declaration protected MultiLevelSkipListWriter(int skipInterval, int skipMultiplier, int maxSkipLevels, int df) Parameters Type Name Description System.Int32 skipInterval System.Int32 skipMultiplier System.Int32 maxSkipLevels System.Int32 df Fields | Improve this Doc View Source m_numberOfSkipLevels Number of levels in this skip list. Declaration protected int m_numberOfSkipLevels Field Value Type Description System.Int32 Methods | Improve this Doc View Source BufferSkip(Int32) Writes the current skip data to the buffers. The current document frequency determines the max level is skip data is to be written to. Declaration public virtual void BufferSkip(int df) Parameters Type Name Description System.Int32 df The current document frequency. Exceptions Type Condition System.IO.IOException If an I/O error occurs. | Improve this Doc View Source Init() Allocates internal skip buffers. Declaration protected virtual void Init() | Improve this Doc View Source ResetSkip() Creates new buffers or empties the existing ones. Declaration public virtual void ResetSkip() | Improve this Doc View Source WriteSkip(IndexOutput) Writes the buffered skip lists to the given output. Declaration public virtual long WriteSkip(IndexOutput output) Parameters Type Name Description IndexOutput output The IndexOutput the skip lists shall be written to. Returns Type Description System.Int64 The pointer the skip list starts. | Improve this Doc View Source WriteSkipData(Int32, IndexOutput) Subclasses must implement the actual skip data encoding in this method. Declaration protected abstract void WriteSkipData(int level, IndexOutput skipBuffer) Parameters Type Name Description System.Int32 level The level skip data shall be writing for. IndexOutput skipBuffer The skip buffer to write to."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.NormsFormat.html",
    "title": "Class NormsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormsFormat Encodes/decodes per-document score normalization values. Inheritance System.Object NormsFormat Lucene40NormsFormat Lucene42NormsFormat 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class NormsFormat Constructors | Improve this Doc View Source NormsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected NormsFormat() Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Returns a DocValuesConsumer to write norms to the index. Declaration public abstract DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source NormsProducer(SegmentReadState) Returns a DocValuesProducer to read norms from the index. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an System.IO.IOException should be thrown by the implementation. System.IO.IOException are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.html",
    "title": "Namespace Lucene.Net.Codecs.PerField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.PerField <!-- 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. --> Postings format that can delegate to different formats per-field. Classes PerFieldDocValuesFormat Enables per field docvalues support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. See DefaultDocValuesFormatFactory for information about how to implement your own DocValuesFormat . Files written by each docvalues format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.dat filenames would look like _1_Lucene40_0.dat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PerFieldPostingsFormat Enables per field postings support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. See DefaultPostingsFormatFactory for information about how to implement your own PostingsFormat . Files written by each posting format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.prx filenames would look like _1_Lucene40_0.prx . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldDocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldDocValuesFormat.html",
    "title": "Class PerFieldDocValuesFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PerFieldDocValuesFormat Enables per field docvalues support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. See DefaultDocValuesFormatFactory for information about how to implement your own DocValuesFormat . Files written by each docvalues format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.dat filenames would look like _1_Lucene40_0.dat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat PerFieldDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats 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.Codecs.PerField Assembly : Lucene.Net.dll Syntax [DocValuesFormatName(\"PerFieldDV40\")] public abstract class PerFieldDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source PerFieldDocValuesFormat() Sole constructor. Declaration public PerFieldDocValuesFormat() Fields | Improve this Doc View Source PER_FIELD_FORMAT_KEY FieldInfo attribute name used to store the format name for each field. Declaration public static readonly string PER_FIELD_FORMAT_KEY Field Value Type Description System.String | Improve this Doc View Source PER_FIELD_SUFFIX_KEY FieldInfo attribute name used to store the segment suffix name for each field. Declaration public static readonly string PER_FIELD_SUFFIX_KEY Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override sealed DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override sealed DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the doc values format that should be used for writing new segments of field . The field to format mapping is written to the index, so this method is only invoked when writing, not when reading. Declaration public abstract DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat See Also IDocValuesFormatFactory DefaultDocValuesFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldPostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldPostingsFormat.html",
    "title": "Class PerFieldPostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PerFieldPostingsFormat Enables per field postings support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. See DefaultPostingsFormatFactory for information about how to implement your own PostingsFormat . Files written by each posting format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.prx filenames would look like _1_Lucene40_0.prx . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat PerFieldPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats 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.Codecs.PerField Assembly : Lucene.Net.dll Syntax [PostingsFormatName(\"PerField40\")] public abstract class PerFieldPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source PerFieldPostingsFormat() Sole constructor. Declaration public PerFieldPostingsFormat() Fields | Improve this Doc View Source PER_FIELD_FORMAT_KEY FieldInfo attribute name used to store the format name for each field. Declaration public static readonly string PER_FIELD_FORMAT_KEY Field Value Type Description System.String | Improve this Doc View Source PER_FIELD_SUFFIX_KEY FieldInfo attribute name used to store the segment suffix name for each field. Declaration public static readonly string PER_FIELD_SUFFIX_KEY Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override sealed FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override sealed FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The field to format mapping is written to the index, so this method is only invoked when writing, not when reading. Declaration public abstract PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat See Also IPostingsFormatFactory DefaultPostingsFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsBaseFormat.html",
    "title": "Class PostingsBaseFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsBaseFormat Lucene40PostingsBaseFormat Lucene41PostingsBaseFormat 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsBaseFormat Constructors | Improve this Doc View Source PostingsBaseFormat(String) Sole constructor. Declaration protected PostingsBaseFormat(string name) Parameters Type Name Description System.String name Properties | Improve this Doc View Source Name Unique name that's used to retrieve this codec when reading the index. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Creates the PostingsReaderBase for this format. Declaration public abstract PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Creates the PostingsWriterBase for this format. Declaration public abstract PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsConsumer.html",
    "title": "Class PostingsConsumer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PostingsConsumer Abstract API that consumes postings for an individual term. The lifecycle is: PostingsConsumer is returned for each term by StartTerm(BytesRef) . StartDoc(Int32, Int32) is called for each document where the term occurs, specifying id and term frequency for that document. If positions are enabled for the field, then AddPosition(Int32, BytesRef, Int32, Int32) will be called for each occurrence in the document. FinishDoc() is called when the producer is done adding positions to the document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsConsumer Constructors | Improve this Doc View Source PostingsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsConsumer() Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload, and start/end offset. A null payload means no payload; a non- null payload with zero length also means no payload. Caller may reuse the BytesRef for the payload between calls (method must fully consume the payload). startOffset and endOffset will be -1 when offsets are not indexed. Declaration public abstract void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset | Improve this Doc View Source FinishDoc() Called when we are done adding positions & payloads for each doc. Declaration public abstract void FinishDoc() | Improve this Doc View Source Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) Default merge impl: append documents, mapping around deletes. Declaration public virtual TermStats Merge(MergeState mergeState, IndexOptions indexOptions, DocsEnum postings, FixedBitSet visitedDocs) Parameters Type Name Description MergeState mergeState IndexOptions indexOptions DocsEnum postings FixedBitSet visitedDocs Returns Type Description TermStats | Improve this Doc View Source StartDoc(Int32, Int32) Adds a new doc in this term. freq will be -1 when term frequencies are omitted for the field. Declaration public abstract void StartDoc(int docId, int freq) Parameters Type Name Description System.Int32 docId System.Int32 freq"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormat.html",
    "title": "Class PostingsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PostingsFormat Encodes/decodes terms, postings, and proximity data. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. If you implement your own format: Subclass this class. Subclass DefaultPostingsFormatFactory , override Initialize() , and add the line base.ScanForPostingsFormats(typeof(YourPostingsFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludePostingsFormatFromScanAttribute to them so they are ignored by the scan. Set the new IPostingsFormatFactory by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. If your format has dependencies, you may also override GetPostingsFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. PostingsFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomPostingsFormat\", the codec name will the same name without the \"PostingsFormat\" suffix: \"MyCustom\". You can override this default behavior by using the PostingsFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat Lucene40PostingsFormat Lucene41PostingsFormat PerFieldPostingsFormat 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) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsFormat Constructors | Improve this Doc View Source PostingsFormat() Creates a new postings format. The provided name will be written into the index segment in some configurations (such as when using PerFieldPostingsFormat ): in such configurations, for the segment to be read this class should be registered by subclassing DefaultPostingsFormatFactory and calling ScanForPostingsFormats(Assembly) in the class constructor. The new IPostingsFormatFactory can be registered by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. Declaration protected PostingsFormat() Fields | Improve this Doc View Source EMPTY Zero-length PostingsFormat array. Declaration public static readonly PostingsFormat[] EMPTY Field Value Type Description PostingsFormat [] Properties | Improve this Doc View Source AvailablePostingsFormats Returns a list of all available format names. Declaration public static ICollection<string> AvailablePostingsFormats { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Name Returns this posting format's name. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Writes a new segment. Declaration public abstract FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Reads a segment. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an System.IO.IOException should be thrown by the implementation. System.IO.IOException s are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer | Improve this Doc View Source ForName(String) Looks up a format by name. Declaration public static PostingsFormat ForName(string name) Parameters Type Name Description System.String name Returns Type Description PostingsFormat | Improve this Doc View Source GetPostingsFormatFactory() Gets the associated PostingsFormat factory. Declaration public static IPostingsFormatFactory GetPostingsFormatFactory() Returns Type Description IPostingsFormatFactory The PostingsFormat factory. | Improve this Doc View Source SetPostingsFormatFactory(IPostingsFormatFactory) Sets the IPostingsFormatFactory instance used to instantiate PostingsFormat subclasses. Declaration public static void SetPostingsFormatFactory(IPostingsFormatFactory postingsFormatFactory) Parameters Type Name Description IPostingsFormatFactory postingsFormatFactory The new IPostingsFormatFactory . Exceptions Type Condition System.ArgumentNullException The postingsFormatFactory parameter is null . | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also DefaultPostingsFormatFactory IPostingsFormatFactory PostingsFormatNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormatNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormatNameAttribute.html",
    "title": "Class PostingsFormatNameAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PostingsFormatNameAttribute Represents an attribute that is used to name a PostingsFormat , if a name other than the default PostingsFormat naming convention is desired. Inheritance System.Object System.Attribute ServiceNameAttribute PostingsFormatNameAttribute Inherited Members ServiceNameAttribute.Name System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public sealed class PostingsFormatNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source PostingsFormatNameAttribute(String) Declaration public PostingsFormatNameAttribute(string name) Parameters Type Name Description System.String name"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsReaderBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsReaderBase.html",
    "title": "Class PostingsReaderBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PostingsReaderBase The core terms dictionaries (BlockTermsReader, BlockTreeTermsReader ) interact with a single instance of this class to manage creation of DocsEnum and DocsAndPositionsEnum instances. It provides an IndexInput (termsIn) where this class may read any previously stored data that it had written in its corresponding PostingsWriterBase at indexing time. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase Lucene40PostingsReader Lucene41PostingsReader 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsReaderBase : IDisposable Constructors | Improve this Doc View Source PostingsReaderBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsReaderBase() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Actually decode metadata for next term. Declaration public abstract void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState state System.Boolean absolute See Also EncodeTerm ( System.Int64 [], DataOutput , FieldInfo , BlockTermState , System.Boolean ) | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Must fully consume state, since after this call that TermState may be reused. Declaration public abstract DocsEnum Docs(FieldInfo fieldInfo, BlockTermState state, IBits skipDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState state IBits skipDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Must fully consume state, since after this call that TermState may be reused. Declaration public abstract DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState state, IBits skipDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState state IBits skipDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source Init(IndexInput) Performs any initialization, such as reading and verifying the header from the provided terms dictionary IndexInput . Declaration public abstract void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn | Improve this Doc View Source NewTermState() Return a newly created empty TermState . Declaration public abstract BlockTermState NewTermState() Returns Type Description BlockTermState | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsWriterBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsWriterBase.html",
    "title": "Class PostingsWriterBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PostingsWriterBase Extension of PostingsConsumer to support pluggable term dictionaries. This class contains additional hooks to interact with the provided term dictionaries such as BlockTreeTermsWriter . If you want to re-use an existing implementation and are only interested in customizing the format of the postings list, extend this class instead. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Lucene41PostingsWriter Implements System.IDisposable Inherited Members PostingsConsumer.StartDoc(Int32, Int32) PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) PostingsConsumer.FinishDoc() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsWriterBase : PostingsConsumer, IDisposable Constructors | Improve this Doc View Source PostingsWriterBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsWriterBase() Methods | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Encode metadata as long[] and byte[] . absolute controls whether current term is delta encoded according to latest term. Usually elements in longs are file pointers, so each one always increases when a new term is consumed. out is used to write generic bytes, which are not monotonic. NOTE: sometimes long[] might contain \"don't care\" values that are unused, e.g. the pointer to postings list may not be defined for some terms but is defined for others, if it is designed to inline some postings data in term dictionary. In this case, the postings writer should always use the last value, so that each element in metadata long[] remains monotonic. Declaration public abstract void EncodeTerm(long[] longs, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute | Improve this Doc View Source FinishTerm(BlockTermState) Finishes the current term. The provided BlockTermState contains the term's summary statistics, and will holds metadata from PBF when returned. Declaration public abstract void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state | Improve this Doc View Source Init(IndexOutput) Called once after startup, before any terms have been added. Implementations typically write a header to the provided termsOut . Declaration public abstract void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut | Improve this Doc View Source NewTermState() Return a newly created empty TermState Declaration public abstract BlockTermState NewTermState() Returns Type Description BlockTermState | Improve this Doc View Source SetField(FieldInfo) Sets the current field for writing, and returns the fixed length of long[] metadata (which is fixed per field), called when the writing switches to another field. Declaration public abstract int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 | Improve this Doc View Source StartTerm() Start a new term. Note that a matching call to FinishTerm(BlockTermState) is done, only if the term has at least one document. Declaration public abstract void StartTerm() Implements System.IDisposable See Also PostingsReaderBase"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoFormat.html",
    "title": "Class SegmentInfoFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentInfoFormat Expert: Controls the format of the SegmentInfo (segment metadata file). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene3xSegmentInfoFormat Lucene40SegmentInfoFormat Lucene46SegmentInfoFormat 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoFormat Constructors | Improve this Doc View Source SegmentInfoFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoFormat() Properties | Improve this Doc View Source SegmentInfoReader Returns the SegmentInfoReader for reading SegmentInfo instances. Declaration public abstract SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Returns the SegmentInfoWriter for writing SegmentInfo instances. Declaration public abstract SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter See Also SegmentInfo"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoReader.html",
    "title": "Class SegmentInfoReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentInfoReader Specifies an API for classes that can read SegmentInfo information. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene3xSegmentInfoReader Lucene40SegmentInfoReader Lucene46SegmentInfoReader 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoReader Constructors | Improve this Doc View Source SegmentInfoReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Read SegmentInfo data from a directory. Declaration public abstract SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory Directory to read from. System.String segmentName Name of the segment to read. IOContext context IO context. Returns Type Description SegmentInfo Infos instance to be populated with data. Exceptions Type Condition System.IO.IOException If an I/O error occurs."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoWriter.html",
    "title": "Class SegmentInfoWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentInfoWriter Specifies an API for classes that can write out SegmentInfo data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene40SegmentInfoWriter Lucene46SegmentInfoWriter 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoWriter Constructors | Improve this Doc View Source SegmentInfoWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Write SegmentInfo data. Declaration public abstract void Write(Directory dir, SegmentInfo info, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fis IOContext ioContext Exceptions Type Condition System.IO.IOException If an I/O error occurs."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsFormat.html",
    "title": "Class StoredFieldsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StoredFieldsFormat Controls the format of stored fields. Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene40StoredFieldsFormat 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsFormat Constructors | Improve this Doc View Source StoredFieldsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsFormat() Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Returns a StoredFieldsReader to load stored fields. Declaration public abstract StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Returns a StoredFieldsWriter to write stored fields. Declaration public abstract StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsReader.html",
    "title": "Class StoredFieldsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StoredFieldsReader Codec API for reading stored fields. You need to implement VisitDocument(Int32, StoredFieldVisitor) to read the stored fields for a document, implement Clone() (creating clones of any IndexInput s used, etc), and Dispose(Boolean) to cleanup any allocated resources. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader CompressingStoredFieldsReader Lucene40StoredFieldsReader 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsReader : IDisposable Constructors | Improve this Doc View Source StoredFieldsReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsReader() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Visit the stored fields for document n . Declaration public abstract void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsWriter.html",
    "title": "Class StoredFieldsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StoredFieldsWriter Codec API for writing stored fields: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. WriteField(FieldInfo, IIndexableField) is called for each field in the document. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter CompressingStoredFieldsWriter Lucene40StoredFieldsWriter 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsWriter : IDisposable Constructors | Improve this Doc View Source StoredFieldsWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsWriter() Methods | Improve this Doc View Source Abort() Aborts writing entirely, implementation should remove any partially-written files, etc. Declaration public abstract void Abort() | Improve this Doc View Source AddDocument<T1>(IEnumerable<T1>, FieldInfos) Sugar method for StartDocument(Int32) + WriteField(FieldInfo, IIndexableField) for every stored field in the document. Declaration protected void AddDocument<T1>(IEnumerable<T1> doc, FieldInfos fieldInfos) where T1 : IIndexableField Parameters Type Name Description System.Collections.Generic.IEnumerable <T1> doc FieldInfos fieldInfos Type Parameters Name Description T1 | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Called before Dispose() , passing in the number of documents that were written. Note that this is intentionally redundant (equivalent to the number of calls to StartDocument(Int32) , but a Codec should check that this is the case to detect the bug described in LUCENE-1282. Declaration public abstract void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source FinishDocument() Called when a document and all its fields have been added. Declaration public virtual void FinishDocument() | Improve this Doc View Source Merge(MergeState) Merges in the stored fields from the readers in mergeState . The default implementation skips over deleted documents, and uses StartDocument(Int32) , WriteField(FieldInfo, IIndexableField) , and Finish(FieldInfos, Int32) , returning the number of documents that were written. Implementations can override this method for more sophisticated merging (bulk-byte copying, etc). Declaration public virtual int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 | Improve this Doc View Source StartDocument(Int32) Called before writing the stored fields of the document. WriteField(FieldInfo, IIndexableField) will be called numStoredFields times. Note that this is called even if the document has no stored fields, in this case numStoredFields will be zero. Declaration public abstract void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Writes a single stored field. Declaration public abstract void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermsConsumer.html",
    "title": "Class TermsConsumer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsConsumer Abstract API that consumes terms for an individual field. The lifecycle is: TermsConsumer is returned for each field by AddField(FieldInfo) . TermsConsumer returns a PostingsConsumer for each term in StartTerm(BytesRef) . When the producer (e.g. IndexWriter) is done adding documents for the term, it calls FinishTerm(BytesRef, TermStats) , passing in the accumulated term statistics. Producer calls Finish(Int64, Int64, Int32) with the accumulated collection statistics when it is finished adding terms to the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsConsumer 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermsConsumer Constructors | Improve this Doc View Source TermsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermsConsumer() Properties | Improve this Doc View Source Comparer Gets the IComparer{BytesRef} used to sort terms before feeding to this API. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Finish(Int64, Int64, Int32) Called when we are done adding terms to this field. sumTotalTermFreq will be -1 when term frequencies are omitted for the field. Declaration public abstract void Finish(long sumTotalTermFreq, long sumDocFreq, int docCount) Parameters Type Name Description System.Int64 sumTotalTermFreq System.Int64 sumDocFreq System.Int32 docCount | Improve this Doc View Source FinishTerm(BytesRef, TermStats) Finishes the current term; numDocs must be > 0. stats.TotalTermFreq will be -1 when term frequencies are omitted for the field. Declaration public abstract void FinishTerm(BytesRef text, TermStats stats) Parameters Type Name Description BytesRef text TermStats stats | Improve this Doc View Source Merge(MergeState, IndexOptions, TermsEnum) Default merge impl. Declaration public virtual void Merge(MergeState mergeState, IndexOptions indexOptions, TermsEnum termsEnum) Parameters Type Name Description MergeState mergeState IndexOptions indexOptions TermsEnum termsEnum | Improve this Doc View Source StartTerm(BytesRef) Starts a new term in this field; this may be called with no corresponding call to finish if the term had no docs. Declaration public abstract PostingsConsumer StartTerm(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description PostingsConsumer"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermStats.html",
    "title": "Class TermStats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermStats Holder for per-term statistics. Inheritance System.Object TermStats 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.Codecs Assembly : Lucene.Net.dll Syntax public class TermStats Constructors | Improve this Doc View Source TermStats(Int32, Int64) Sole constructor. Declaration public TermStats(int docFreq, long totalTermFreq) Parameters Type Name Description System.Int32 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq How many documents have at least one occurrence of this term. Declaration public int DocFreq { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTermFreq Total number of times this term occurs across all documents in the field. Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 See Also DocFreq TotalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsFormat.html",
    "title": "Class TermVectorsFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermVectorsFormat Controls the format of term vectors. Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene40TermVectorsFormat 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsFormat Constructors | Improve this Doc View Source TermVectorsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsFormat() Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Returns a TermVectorsReader to read term vectors. Declaration public abstract TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Returns a TermVectorsWriter to write term vectors. Declaration public abstract TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsReader.html",
    "title": "Class TermVectorsReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermVectorsReader Codec API for reading term vectors: This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader CompressingTermVectorsReader Lucene40TermVectorsReader 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsReader : IDisposable Constructors | Improve this Doc View Source TermVectorsReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsReader() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Clone() Create a clone that one caller at a time may use to read term vectors. Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Get(Int32) Returns term vectors for this document, or null if term vectors were not indexed. If offsets are available they are in an OffsetAttribute available from the DocsAndPositionsEnum . Declaration public abstract Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsWriter.html",
    "title": "Class TermVectorsWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermVectorsWriter Codec API for writing term vectors: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) is called for each field in the document, informing the codec how many terms will be written for that field, and whether or not positions, offsets, or payloads are enabled. Within each field, StartTerm(BytesRef, Int32) is called for each term. If offsets and/or positions are enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called for each term occurrence. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter CompressingTermVectorsWriter Lucene40TermVectorsWriter 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.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsWriter : IDisposable Constructors | Improve this Doc View Source TermVectorsWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsWriter() Properties | Improve this Doc View Source Comparer Return the IComparer{BytesRef} used to sort terms before feeding to this API. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Abort() Aborts writing entirely, implementation should remove any partially-written files, etc. Declaration public abstract void Abort() | Improve this Doc View Source AddAllDocVectors(Fields, MergeState) Safe (but, slowish) default method to write every vector field in the document. Declaration protected void AddAllDocVectors(Fields vectors, MergeState mergeState) Parameters Type Name Description Fields vectors MergeState mergeState | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Adds a term position and offsets. Declaration public abstract void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Called by IndexWriter when writing new segments. This is an expert API that allows the codec to consume positions and offsets directly from the indexer. The default implementation calls AddPosition(Int32, Int32, Int32, BytesRef) , but subclasses can override this if they want to efficiently write all the positions, then all the offsets, for example. NOTE: this API is extremely expert and subject to change or removal!!! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Called before Dispose(Boolean) , passing in the number of documents that were written. Note that this is intentionally redundant (equivalent to the number of calls to StartDocument(Int32) , but a Codec should check that this is the case to detect the bug described in LUCENE-1282. Declaration public abstract void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source FinishDocument() Called after a doc and all its fields have been added. Declaration public virtual void FinishDocument() | Improve this Doc View Source FinishField() Called after a field and all its terms have been added. Declaration public virtual void FinishField() | Improve this Doc View Source FinishTerm() Called after a term and all its positions have been added. Declaration public virtual void FinishTerm() | Improve this Doc View Source Merge(MergeState) Merges in the term vectors from the readers in mergeState . The default implementation skips over deleted documents, and uses StartDocument(Int32) , StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) , StartTerm(BytesRef, Int32) , AddPosition(Int32, Int32, Int32, BytesRef) , and Finish(FieldInfos, Int32) , returning the number of documents that were written. Implementations can override this method for more sophisticated merging (bulk-byte copying, etc). Declaration public virtual int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 | Improve this Doc View Source StartDocument(Int32) Called before writing the term vectors of the document. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) will be called numVectorFields times. Note that if term vectors are enabled, this is called even if the document has no vector fields, in this case numVectorFields will be zero. Declaration public abstract void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Called before writing the terms of the field. StartTerm(BytesRef, Int32) will be called numTerms times. Declaration public abstract void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads | Improve this Doc View Source StartTerm(BytesRef, Int32) Adds a term and its term frequency freq . If this field has positions and/or offsets enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called freq times respectively. Declaration public abstract void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Documents.BinaryDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.BinaryDocValuesField.html",
    "title": "Class BinaryDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BinaryDocValuesField Field that stores a per-document BytesRef value. The values are stored directly with no sharing, which is a good fit when the fields don't share (many) values, such as a title field. If values may be shared and sorted it's better to use SortedDocValuesField . Here's an example usage: document.Add(new BinaryDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField DerefBytesDocValuesField StraightBytesDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public class BinaryDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source BinaryDocValuesField(String, BytesRef) Create a new binary DocValues field. Declaration public BinaryDocValuesField(string name, BytesRef value) Parameters Type Name Description System.String name field name BytesRef value binary content Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source fType Type for straight bytes DocValues . Declaration public static readonly FieldType fType Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also BinaryDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Documents.ByteDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.ByteDocValuesField.html",
    "title": "Class ByteDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteDocValuesField Field that stores a per-document System.Byte value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new ByteDocValuesField(name, (byte) 22)); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field NumericDocValuesField ByteDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead\")] public class ByteDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source ByteDocValuesField(String, Byte) Creates a new DocValues field with the specified 8-bit byte value Declaration public ByteDocValuesField(string name, byte value) Parameters Type Name Description System.String name field name System.Byte value 8-bit byte value Exceptions Type Condition System.ArgumentNullException if the field name is null. Methods | Improve this Doc View Source SetByteValue(Byte) Declaration public override void SetByteValue(byte value) Parameters Type Name Description System.Byte value Overrides Field.SetByteValue(Byte) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.CompressionTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.CompressionTools.html",
    "title": "Class CompressionTools | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompressionTools Simple utility class providing static methods to compress and decompress binary data for stored fields. this class uses the System.IO.Compression.DeflateStream class to compress and decompress. Inheritance System.Object CompressionTools 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.dll Syntax public class CompressionTools Methods | Improve this Doc View Source Compress(Byte[]) Compresses all System.Byte s in the array, with default System.IO.Compression.CompressionLevel.Optimal level Declaration public static byte[] Compress(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.Byte [] | Improve this Doc View Source Compress(Byte[], Int32, Int32) Compresses the specified System.Byte range, with default System.IO.Compression.CompressionLevel.Optimal level Declaration public static byte[] Compress(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.Byte [] | Improve this Doc View Source Compress(Byte[], Int32, Int32, CompressionLevel) Compresses the specified System.Byte range using the specified compressionLevel . Declaration public static byte[] Compress(byte[] value, int offset, int length, CompressionLevel compressionLevel) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length System.IO.Compression.CompressionLevel compressionLevel Returns Type Description System.Byte [] | Improve this Doc View Source CompressString(String) Compresses the System.String value, with default System.IO.Compression.CompressionLevel.Optimal level Declaration public static byte[] CompressString(string value) Parameters Type Name Description System.String value Returns Type Description System.Byte [] | Improve this Doc View Source CompressString(String, CompressionLevel) Compresses the System.String value using the specified compressionLevel . Declaration public static byte[] CompressString(string value, CompressionLevel compressionLevel) Parameters Type Name Description System.String value System.IO.Compression.CompressionLevel compressionLevel Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(BytesRef) Decompress the System.Byte array previously returned by compress (referenced by the provided BytesRef ) Declaration public static byte[] Decompress(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(Byte[]) Decompress the System.Byte array previously returned by compress Declaration public static byte[] Decompress(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(Byte[], Int32, Int32) Decompress the System.Byte array previously returned by compress Declaration public static byte[] Decompress(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.Byte [] | Improve this Doc View Source DecompressString(BytesRef) Decompress the System.Byte array (referenced by the provided BytesRef ) previously returned by CompressString(String) back into a System.String Declaration public static string DecompressString(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.String | Improve this Doc View Source DecompressString(Byte[]) Decompress the System.Byte array previously returned by CompressString(String) back into a System.String Declaration public static string DecompressString(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.String | Improve this Doc View Source DecompressString(Byte[], Int32, Int32) Decompress the System.Byte array previously returned by CompressString(String) back into a System.String Declaration public static string DecompressString(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DateTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DateTools.html",
    "title": "Class DateTools | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DateTools Provides support for converting dates to strings and vice-versa. The strings are structured so that lexicographic sorting orders them by date, which makes them suitable for use as field values and search terms. This class also helps you to limit the resolution of your dates. Do not save dates with a finer resolution than you really need, as then TermRangeQuery and PrefixQuery will require more memory and become slower. Another approach is NumericUtils , which provides a sortable binary representation (prefix encoded) of numeric values, which date/time are. For indexing a System.DateTime , just get the System.DateTime.Ticks and index this as a numeric value with Int64Field and use NumericRangeQuery<T> to query it. Inheritance System.Object DateTools 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.dll Syntax public static class DateTools Methods | Improve this Doc View Source DateToString(DateTime, DateTools.Resolution) Converts a System.DateTime to a string suitable for indexing. Declaration public static string DateToString(DateTime date, DateTools.Resolution resolution) Parameters Type Name Description System.DateTime date the date to be converted DateTools.Resolution resolution the desired resolution, see Round(DateTime, DateTools.Resolution) Returns Type Description System.String a string in format yyyyMMddHHmmssSSS or shorter, depending on resolution ; using GMT as timezone | Improve this Doc View Source Round(DateTime, DateTools.Resolution) Limit a date's resolution. For example, the date 2004-09-21 13:50:11 will be changed to 2004-09-01 00:00:00 when using MONTH . Declaration public static DateTime Round(DateTime date, DateTools.Resolution resolution) Parameters Type Name Description System.DateTime date the date to be rounded DateTools.Resolution resolution The desired resolution of the date to be returned Returns Type Description System.DateTime the date with all values more precise than resolution set to 0 or 1 | Improve this Doc View Source Round(Int64, DateTools.Resolution) Limit a date's resolution. For example, the date 1095767411000 (which represents 2004-09-21 13:50:11) will be changed to 1093989600000 (2004-09-01 00:00:00) when using MONTH . Declaration public static long Round(long time, DateTools.Resolution resolution) Parameters Type Name Description System.Int64 time the time to be rounded DateTools.Resolution resolution The desired resolution of the date to be returned Returns Type Description System.Int64 the date with all values more precise than resolution set to 0 or 1, expressed as milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") | Improve this Doc View Source StringToDate(String) Converts a string produced by TimeToString(Int64, DateTools.Resolution) or DateToString(DateTime, DateTools.Resolution) back to a time, represented as a System.DateTime object. Declaration public static DateTime StringToDate(string dateString) Parameters Type Name Description System.String dateString the date string to be converted Returns Type Description System.DateTime the parsed time as a System.DateTime object Exceptions Type Condition System.FormatException if dateString is not in the expected format | Improve this Doc View Source StringToTime(String) Converts a string produced by TimeToString(Int64, DateTools.Resolution) or DateToString(DateTime, DateTools.Resolution) back to a time, represented as the number of milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\"). Declaration public static long StringToTime(string dateString) Parameters Type Name Description System.String dateString the date string to be converted Returns Type Description System.Int64 the number of milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") Exceptions Type Condition System.FormatException if dateString is not in the expected format | Improve this Doc View Source TimeToString(Int64, DateTools.Resolution) Converts a millisecond time to a string suitable for indexing. Declaration public static string TimeToString(long time, DateTools.Resolution resolution) Parameters Type Name Description System.Int64 time the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") DateTools.Resolution resolution the desired resolution, see Round(Int64, DateTools.Resolution) Returns Type Description System.String a string in format yyyyMMddHHmmssSSS or shorter, depending on resolution ; using GMT as timezone"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DateTools.Resolution.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DateTools.Resolution.html",
    "title": "Enum DateTools.Resolution | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum DateTools.Resolution Specifies the time granularity. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum Resolution Fields Name Description DAY Limit a date's resolution to day granularity. HOUR Limit a date's resolution to hour granularity. MILLISECOND Limit a date's resolution to millisecond granularity. MINUTE Limit a date's resolution to minute granularity. MONTH Limit a date's resolution to month granularity. SECOND Limit a date's resolution to second granularity. YEAR Limit a date's resolution to year granularity."
  },
  "api/Lucene.Net/Lucene.Net.Documents.DerefBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DerefBytesDocValuesField.html",
    "title": "Class DerefBytesDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DerefBytesDocValuesField Field that stores a per-document BytesRef value. Here's an example usage: document.Add(new DerefBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField DerefBytesDocValuesField Implements IIndexableField Inherited Members BinaryDocValuesField.fType Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use BinaryDocValuesField instead.\")] public class DerefBytesDocValuesField : BinaryDocValuesField, IIndexableField Constructors | Improve this Doc View Source DerefBytesDocValuesField(String, BytesRef) Create a new fixed or variable-length DocValues field. Declaration public DerefBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source DerefBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length DocValues field. Declaration public DerefBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also BinaryDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Document.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Document.html",
    "title": "Class Document | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Document Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored ( IsStored ) with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it. Note that fields which are not IsStored are not available in documents retrieved from the index, e.g. with Doc or Document(Int32) . Inheritance System.Object Document Implements System.Collections.Generic.IEnumerable < IIndexableField > 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) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class Document : IEnumerable<IIndexableField>, IEnumerable Constructors | Improve this Doc View Source Document() Constructs a new document with no fields. Declaration public Document() Properties | Improve this Doc View Source Fields Returns a List of all the fields in a document. Note that fields which are not stored are not available in documents retrieved from the index, e.g. Doc(Int32) or Document(Int32) . Declaration public IList<IIndexableField> Fields { get; } Property Value Type Description System.Collections.Generic.IList < IIndexableField > Methods | Improve this Doc View Source Add(IIndexableField) Adds a field to a document. Several fields may be added with the same name. In this case, if the fields are indexed, their text is treated as though appended for the purposes of search. Note that add like the RemoveField(String) and RemoveFields(String) methods only makes sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void Add(IIndexableField field) Parameters Type Name Description IIndexableField field | Improve this Doc View Source Get(String) Returns the string value of the field with the given name if any exist in this document, or null . If multiple fields exist with this name, this method returns the first value added. If only binary fields with this name exist, returns null . For Int32Field , Int64Field , SingleField and DoubleField it returns the string value of the number. If you want the actual numeric field instance back, use GetField(String) . Declaration public string Get(string name) Parameters Type Name Description System.String name Returns Type Description System.String | Improve this Doc View Source GetBinaryValue(String) Returns an array of bytes for the first (or only) field that has the name specified as the method parameter. this method will return null if no binary fields with the specified name are available. There may be non-binary fields with the same name. Declaration public BytesRef GetBinaryValue(string name) Parameters Type Name Description System.String name the name of the field. Returns Type Description BytesRef a BytesRef containing the binary field value or null | Improve this Doc View Source GetBinaryValues(String) Returns an array of byte arrays for of the fields that have the name specified as the method parameter. This method returns an empty array when there are no matching fields. It never returns null . Declaration public BytesRef[] GetBinaryValues(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description BytesRef [] a BytesRef[] of binary field values | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<IIndexableField> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < IIndexableField > | Improve this Doc View Source GetField(String) Returns a field with the given name if any exist in this document, or null . If multiple fields exists with this name, this method returns the first value added. Declaration public IIndexableField GetField(string name) Parameters Type Name Description System.String name Returns Type Description IIndexableField | Improve this Doc View Source GetFields(String) Returns an array of IIndexableField s with the given name. This method returns an empty array when there are no matching fields. It never returns null . Declaration public IIndexableField[] GetFields(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description IIndexableField [] a IndexableField[] array | Improve this Doc View Source GetValues(String) Returns an array of values of the field specified as the method parameter. This method returns an empty array when there are no matching fields. It never returns null . For Int32Field , Int64Field , SingleField and DoubleField it returns the string value of the number. If you want the actual numeric field instances back, use GetFields(String) . Declaration public string[] GetValues(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description System.String [] a string[] of field values | Improve this Doc View Source RemoveField(String) Removes field with the specified name from the document. If multiple fields exist with this name, this method removes the first field that has been added. If there is no field with the specified name, the document remains unchanged. Note that the RemoveField(String) and RemoveFields(String) methods like the add method only make sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void RemoveField(string name) Parameters Type Name Description System.String name | Improve this Doc View Source RemoveFields(String) Removes all fields with the given name from the document. If there is no field with the specified name, the document remains unchanged. Note that the RemoveField(String) and RemoveFields(String) methods like the add method only make sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void RemoveFields(string name) Parameters Type Name Description System.String name | Improve this Doc View Source ToString() Prints the fields of a document for human consumption. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods DocumentExtensions.GetField<T>(Document, String) DocumentExtensions.GetFields<T>(Document, String) DocumentExtensions.AddBinaryDocValuesField(Document, String, BytesRef) DocumentExtensions.AddDoubleDocValuesField(Document, String, Double) DocumentExtensions.AddDoubleField(Document, String, Double, Field.Store) DocumentExtensions.AddDoubleField(Document, String, Double, FieldType) DocumentExtensions.AddSingleDocValuesField(Document, String, Single) DocumentExtensions.AddSingleField(Document, String, Single, Field.Store) DocumentExtensions.AddSingleField(Document, String, Single, FieldType) DocumentExtensions.AddInt32Field(Document, String, Int32, Field.Store) DocumentExtensions.AddInt32Field(Document, String, Int32, FieldType) DocumentExtensions.AddInt64Field(Document, String, Int64, Field.Store) DocumentExtensions.AddInt64Field(Document, String, Int64, FieldType) DocumentExtensions.AddNumericDocValuesField(Document, String, Int64) DocumentExtensions.AddSortedDocValuesField(Document, String, BytesRef) DocumentExtensions.AddSortedSetDocValuesField(Document, String, BytesRef) DocumentExtensions.AddStoredField(Document, String, Byte[]) DocumentExtensions.AddStoredField(Document, String, Byte[], Int32, Int32) DocumentExtensions.AddStoredField(Document, String, BytesRef) DocumentExtensions.AddStoredField(Document, String, String) DocumentExtensions.AddStoredField(Document, String, Int32) DocumentExtensions.AddStoredField(Document, String, Single) DocumentExtensions.AddStoredField(Document, String, Int64) DocumentExtensions.AddStoredField(Document, String, Double) DocumentExtensions.AddStringField(Document, String, String, Field.Store) DocumentExtensions.AddTextField(Document, String, TextReader) DocumentExtensions.AddTextField(Document, String, String, Field.Store) DocumentExtensions.AddTextField(Document, String, TokenStream)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DocumentStoredFieldVisitor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DocumentStoredFieldVisitor.html",
    "title": "Class DocumentStoredFieldVisitor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocumentStoredFieldVisitor A StoredFieldVisitor that creates a Document containing all stored fields, or only specific requested fields provided to DocumentStoredFieldVisitor(ISet<String>) . This is used by Document(Int32) to load a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldVisitor DocumentStoredFieldVisitor 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.dll Syntax public class DocumentStoredFieldVisitor : StoredFieldVisitor Constructors | Improve this Doc View Source DocumentStoredFieldVisitor() Load all stored fields. Declaration public DocumentStoredFieldVisitor() | Improve this Doc View Source DocumentStoredFieldVisitor(ISet<String>) Load only fields named in the provided System.Collections.Generic.ISet<T> . Declaration public DocumentStoredFieldVisitor(ISet<string> fieldsToAdd) Parameters Type Name Description System.Collections.Generic.ISet < System.String > fieldsToAdd Set of fields to load, or null (all fields). | Improve this Doc View Source DocumentStoredFieldVisitor(String[]) Load only fields named in the provided fields. Declaration public DocumentStoredFieldVisitor(params string[] fields) Parameters Type Name Description System.String [] fields Properties | Improve this Doc View Source Document Retrieve the visited document. Declaration public virtual Document Document { get; } Property Value Type Description Document Document populated with stored fields. Note that only the stored information in the field instances is valid, data such as boosts, indexing options, term vector options, etc is not set. Methods | Improve this Doc View Source BinaryField(FieldInfo, Byte[]) Declaration public override void BinaryField(FieldInfo fieldInfo, byte[] value) Parameters Type Name Description FieldInfo fieldInfo System.Byte [] value Overrides StoredFieldVisitor.BinaryField(FieldInfo, Byte[]) | Improve this Doc View Source DoubleField(FieldInfo, Double) Declaration public override void DoubleField(FieldInfo fieldInfo, double value) Parameters Type Name Description FieldInfo fieldInfo System.Double value Overrides StoredFieldVisitor.DoubleField(FieldInfo, Double) | Improve this Doc View Source Int32Field(FieldInfo, Int32) Declaration public override void Int32Field(FieldInfo fieldInfo, int value) Parameters Type Name Description FieldInfo fieldInfo System.Int32 value Overrides StoredFieldVisitor.Int32Field(FieldInfo, Int32) | Improve this Doc View Source Int64Field(FieldInfo, Int64) Declaration public override void Int64Field(FieldInfo fieldInfo, long value) Parameters Type Name Description FieldInfo fieldInfo System.Int64 value Overrides StoredFieldVisitor.Int64Field(FieldInfo, Int64) | Improve this Doc View Source NeedsField(FieldInfo) Declaration public override StoredFieldVisitor.Status NeedsField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description StoredFieldVisitor.Status Overrides StoredFieldVisitor.NeedsField(FieldInfo) | Improve this Doc View Source SingleField(FieldInfo, Single) Declaration public override void SingleField(FieldInfo fieldInfo, float value) Parameters Type Name Description FieldInfo fieldInfo System.Single value Overrides StoredFieldVisitor.SingleField(FieldInfo, Single) | Improve this Doc View Source StringField(FieldInfo, String) Declaration public override void StringField(FieldInfo fieldInfo, string value) Parameters Type Name Description FieldInfo fieldInfo System.String value Overrides StoredFieldVisitor.StringField(FieldInfo, String)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DoubleDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DoubleDocValuesField.html",
    "title": "Class DoubleDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleDocValuesField Syntactic sugar for encoding doubles as NumericDocValues via J2N.BitConversion.DoubleToRawInt64Bits(System.Double) . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. Inheritance System.Object Field NumericDocValuesField DoubleDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetSingleValue(Single) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public class DoubleDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source DoubleDocValuesField(String, Double) Creates a new DocValues field with the specified 64-bit double value Declaration public DoubleDocValuesField(string name, double value) Parameters Type Name Description System.String name field name System.Double value 64-bit double value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetDoubleValue(Double) Declaration public override void SetDoubleValue(double value) Parameters Type Name Description System.Double value Overrides Field.SetDoubleValue(Double) | Improve this Doc View Source SetInt64Value(Int64) Declaration public override void SetInt64Value(long value) Parameters Type Name Description System.Int64 value Overrides Field.SetInt64Value(Int64) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DoubleField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DoubleField.html",
    "title": "Class DoubleField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleField Field that indexes System.Double values for efficient range filtering and sorting. Here's an example usage: document.Add(new DoubleField(name, 6.0, Field.Store.NO)); For optimal performance, re-use the DoubleField and Document instance for more than one document: DoubleField field = new DoubleField(name, 0.0, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetDoubleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , SingleField . To perform range querying or filtering against a DoubleField , use NumericRangeQuery or NumericRangeFilter<T> . To sort according to a DoubleField , use the normal numeric sort types, eg DOUBLE . DoubleField values can also be loaded directly from IFieldCache . You may add the same field name as an DoubleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued DoubleField . A DoubleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep ( precisionStep ) configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. @since 2.9 Inheritance System.Object Field DoubleField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public sealed class DoubleField : Field, IIndexableField Constructors | Improve this Doc View Source DoubleField(String, Double, Field.Store) Creates a stored or un-stored DoubleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public DoubleField(string name, double value, Field.Store stored) Parameters Type Name Description System.String name field name System.Double value 64-bit System.Double value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source DoubleField(String, Double, FieldType) Expert: allows you to customize the FieldType . Declaration public DoubleField(string name, double value, FieldType type) Parameters Type Name Description System.String name field name System.Double value 64-bit double value FieldType type customized field type: must have NumericType of DOUBLE . Exceptions Type Condition System.ArgumentNullException if the field name or type is null , or if the field type does not have a DOUBLE NumericType Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a DoubleField that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored DoubleField : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Extensions.DocumentExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Extensions.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the 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.Extensions Assembly : Lucene.Net.dll Syntax public static class DocumentExtensions Methods | Improve this Doc View Source AddBinaryDocValuesField(Document, String, BytesRef) Adds a new BinaryDocValuesField . Declaration public static BinaryDocValuesField AddBinaryDocValuesField(this Document document, string name, BytesRef value) Parameters Type Name Description Document document This Document . System.String name field name BytesRef value binary content Returns Type Description BinaryDocValuesField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddDoubleDocValuesField(Document, String, Double) Adds a new DoubleDocValuesField field with the specified 64-bit double value Declaration public static DoubleDocValuesField AddDoubleDocValuesField(this Document document, string name, double value) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit double value Returns Type Description DoubleDocValuesField The field that was added to this Document . Remarks Syntactic sugar for encoding doubles as NumericDocValues via J2N.BitConversion.DoubleToRawInt64Bits(System.Double) . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddDoubleField(Document, String, Double, Field.Store) Adds a stored or un-stored DoubleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static DoubleField AddDoubleField(this Document document, string name, double value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit System.Double value Field.Store stored YES if the content should also be stored Returns Type Description DoubleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddDoubleField(Document, String, Double, FieldType) Adds a stored or un-stored DoubleField with the provided value. Expert: allows you to customize the FieldType . Declaration public static DoubleField AddDoubleField(this Document document, string name, double value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit double value FieldType type customized field type: must have NumericType of DOUBLE . Returns Type Description DoubleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is null , or if the field type does not have a DOUBLE NumericType | Improve this Doc View Source AddInt32Field(Document, String, Int32, Field.Store) Adds a stored or un-stored Int32Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static Int32Field AddInt32Field(this Document document, string name, int value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value 32-bit System.Int32 value Field.Store stored YES if the content should also be stored Returns Type Description Int32Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddInt32Field(Document, String, Int32, FieldType) Adds a stored or un-stored Int32Field with the provided value. Expert: allows you to customize the FieldType . Declaration public static Int32Field AddInt32Field(this Document document, string name, int value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value 32-bit System.Int32 value FieldType type customized field type: must have NumericType of INT32 . Returns Type Description Int32Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT32 | Improve this Doc View Source AddInt64Field(Document, String, Int64, Field.Store) Adds a stored or un-stored Int64Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static Int64Field AddInt64Field(this Document document, string name, long value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit System.Int64 value Field.Store stored YES if the content should also be stored Returns Type Description Int64Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddInt64Field(Document, String, Int64, FieldType) Adds a stored or un-stored Int64Field with the provided value. Expert: allows you to customize the FieldType . Declaration public static Int64Field AddInt64Field(this Document document, string name, long value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit System.Int64 value FieldType type customized field type: must have NumericType of INT64 . Returns Type Description Int64Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT64 | Improve this Doc View Source AddNumericDocValuesField(Document, String, Int64) Adds a new NumericDocValuesField field with the specified 64-bit System.Int64 value Declaration public static NumericDocValuesField AddNumericDocValuesField(this Document document, string name, long value) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit System.Int64 value Returns Type Description NumericDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddSingleDocValuesField(Document, String, Single) Adds a new SingleDocValuesField field with the specified 32-bit System.Single value Declaration public static SingleDocValuesField AddSingleDocValuesField(this Document document, string name, float value) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit System.Single value Returns Type Description SingleDocValuesField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddSingleField(Document, String, Single, Field.Store) Adds a stored or un-stored SingleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static SingleField AddSingleField(this Document document, string name, float value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit System.Single value Field.Store stored YES if the content should also be stored Returns Type Description SingleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddSingleField(Document, String, Single, FieldType) Adds a stored or un-stored SingleField with the provided value. Expert: allows you to customize the FieldType . Declaration public static SingleField AddSingleField(this Document document, string name, float value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit System.Single value FieldType type customized field type: must have NumericType of SINGLE . Returns Type Description SingleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a SINGLE NumericType | Improve this Doc View Source AddSortedDocValuesField(Document, String, BytesRef) Adds a new SortedDocValuesField field. Declaration public static SortedDocValuesField AddSortedDocValuesField(this Document document, string name, BytesRef bytes) Parameters Type Name Description Document document This Document . System.String name field name BytesRef bytes binary content Returns Type Description SortedDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddSortedSetDocValuesField(Document, String, BytesRef) Adds a new SortedSetDocValuesField field. Declaration public static SortedSetDocValuesField AddSortedSetDocValuesField(this Document document, string name, BytesRef bytes) Parameters Type Name Description Document document This Document . System.String name field name BytesRef bytes binary content Returns Type Description SortedSetDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddStoredField(Document, String, BytesRef) Adds a stored-only field with the given binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, BytesRef value) Parameters Type Name Description Document document This Document . System.String name field name BytesRef value BytesRef pointing to binary content (not copied) Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Byte[]) Adds a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, byte[] value) Parameters Type Name Description Document document This Document . System.String name field name System.Byte [] value byte array pointing to binary content (not copied) Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Byte[], Int32, Int32) Adds a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, byte[] value, int offset, int length) Parameters Type Name Description Document document This Document . System.String name field name System.Byte [] value System.Byte array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Double) Adds a stored-only field with the given System.Double value. Declaration public static StoredField AddStoredField(this Document document, string name, double value) Parameters Type Name Description Document document This Document . System.String name field name System.Double value System.Double value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Int32) Adds a stored-only field with the given System.Int32 value. Declaration public static StoredField AddStoredField(this Document document, string name, int value) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value System.Int32 value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Int64) Adds a stored-only field with the given System.Int64 value. Declaration public static StoredField AddStoredField(this Document document, string name, long value) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value System.Int64 value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Single) Adds a stored-only field with the given System.Single value. Declaration public static StoredField AddStoredField(this Document document, string name, float value) Parameters Type Name Description Document document This Document . System.String name field name System.Single value System.Single value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, String) Adds a stored-only field with the given System.String value. Declaration public static StoredField AddStoredField(this Document document, string name, string value) Parameters Type Name Description Document document This Document . System.String name field name System.String value System.String value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or value is null . | Improve this Doc View Source AddStringField(Document, String, String, Field.Store) Adds a new StringField (a field that is indexed but not tokenized) Declaration public static StringField AddStringField(this Document document, string name, string value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.String value System.String value Field.Store stored YES if the content should also be stored Returns Type Description StringField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or value is null . | Improve this Doc View Source AddTextField(Document, String, TokenStream) Adds a new un-stored TextField with TokenStream value. Declaration public static TextField AddTextField(this Document document, string name, TokenStream stream) Parameters Type Name Description Document document This Document . System.String name field name TokenStream stream TokenStream value Returns Type Description TextField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or stream is null . | Improve this Doc View Source AddTextField(Document, String, TextReader) Adds a new un-stored TextField with System.IO.TextReader value. Declaration public static TextField AddTextField(this Document document, string name, TextReader reader) Parameters Type Name Description Document document This Document . System.String name field name System.IO.TextReader reader System.IO.TextReader value Returns Type Description TextField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or reader is null | Improve this Doc View Source AddTextField(Document, String, String, Field.Store) Adds a new TextField with System.String value. Declaration public static TextField AddTextField(this Document document, string name, string value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.String value System.String value Field.Store stored YES if the content should also be stored Returns Type Description TextField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or value is null . | Improve this Doc View Source GetField<T>(Document, String) Returns a field with the given name if any exist in this document cast to type T , or null . If multiple fields exists with this name, this method returns the first value added. Declaration public static T GetField<T>(this Document document, string name) where T : IIndexableField Parameters Type Name Description Document document This Document . System.String name Field name Returns Type Description T Type Parameters Name Description T Exceptions Type Condition System.InvalidCastException If the field type cannot be cast to T . | Improve this Doc View Source GetFields<T>(Document, String) Returns an array of IIndexableField s with the given name, cast to type T . This method returns an empty array when there are no matching fields. It never returns null . Declaration public static T[] GetFields<T>(this Document document, string name) where T : IIndexableField Parameters Type Name Description Document document This Document . System.String name the name of the field Returns Type Description T[] a IndexableField[] array Type Parameters Name Description T Exceptions Type Condition System.InvalidCastException If the field type cannot be cast to ."
  },
  "api/Lucene.Net/Lucene.Net.Documents.Extensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Extensions.html",
    "title": "Namespace Lucene.Net.Documents.Extensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Documents.Extensions Classes DocumentExtensions LUCENENET specific extensions to the Document class. IndexableFieldExtensions Extension methods to the IIndexableField interface."
  },
  "api/Lucene.Net/Lucene.Net.Documents.Extensions.IndexableFieldExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Extensions.IndexableFieldExtensions.html",
    "title": "Class IndexableFieldExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexableFieldExtensions Extension methods to the IIndexableField interface. Inheritance System.Object IndexableFieldExtensions 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.Extensions Assembly : Lucene.Net.dll Syntax public static class IndexableFieldExtensions Methods | Improve this Doc View Source GetByteValueOrDefault(IIndexableField) Returns the field value as System.Byte or 0 if the type is non-numeric. Declaration public static byte GetByteValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Byte The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetDoubleValueOrDefault(IIndexableField) Returns the field value as System.Double or 0 if the type is non-numeric. Declaration public static double GetDoubleValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Double The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt16ValueOrDefault(IIndexableField) Returns the field value as System.Int16 or 0 if the type is non-numeric. Declaration public static short GetInt16ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int16 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt32ValueOrDefault(IIndexableField) Returns the field value as System.Int32 or 0 if the type is non-numeric. Declaration public static int GetInt32ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int32 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt64ValueOrDefault(IIndexableField) Returns the field value as System.Int64 or 0 if the type is non-numeric. Declaration public static long GetInt64ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int64 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetSingleValueOrDefault(IIndexableField) Returns the field value as System.Single or 0 if the type is non-numeric. Declaration public static float GetSingleValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Single The field value or 0 if the type is non-numeric."
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Byte.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Byte.html",
    "title": "Class Field.Byte | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field.Byte Inheritance System.Object Field.Number Field.Byte Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() 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.Documents Assembly : Lucene.Net.dll Syntax [Serializable] protected sealed class Byte : Field.Number Constructors | Improve this Doc View Source Byte(Byte) Declaration public Byte(byte value) Parameters Type Name Description System.Byte value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Double.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Double.html",
    "title": "Class Field.Double | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field.Double Inheritance System.Object Field.Number Field.Double Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() 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.Documents Assembly : Lucene.Net.dll Syntax [Serializable] protected sealed class Double : Field.Number Constructors | Improve this Doc View Source Double(Double) Declaration public Double(double value) Parameters Type Name Description System.Double value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.html",
    "title": "Class Field | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field Expert: directly create a field for a document. Most users should use one of the sugar subclasses: Int32Field , Int64Field , SingleField , DoubleField , BinaryDocValuesField , NumericDocValuesField , SortedDocValuesField , StringField , TextField , StoredField . A field is a section of a Document . Each field has three parts: name, type and value. Values may be text ( System.String , System.IO.TextReader or pre-analyzed TokenStream ), binary ( byte[] ), or numeric ( System.Int32 , System.Int64 , System.Single , or System.Double ). Fields are optionally stored in the index, so that they may be returned with hits on the document. NOTE: the field type is an IIndexableFieldType . Making changes to the state of the IIndexableFieldType will impact any Field it is used in. It is strongly recommended that no changes be made after Field instantiation. Inheritance System.Object Field BinaryDocValuesField DoubleField Int32Field Int64Field NumericDocValuesField SingleField SortedDocValuesField SortedSetDocValuesField StoredField StringField TextField Implements IIndexableField 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) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class Field : IIndexableField Constructors | Improve this Doc View Source Field(String, TokenStream) Create a tokenized and indexed field that is not stored. Term vectors will not be stored. This is useful for pre-analyzed fields. The TokenStream is read only when the Document is added to the index, i.e. you may not close the TokenStream until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TokenStream tokenStream) Parameters Type Name Description System.String name The name of the field TokenStream tokenStream The TokenStream with the content Exceptions Type Condition System.ArgumentNullException if name or tokenStream is null | Improve this Doc View Source Field(String, TokenStream, Field.TermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors. This is useful for pre-analyzed fields. The TokenStream is read only when the Document is added to the index, i.e. you may not close the TokenStream until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TokenStream tokenStream, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field TokenStream tokenStream The TokenStream with the content Field.TermVector termVector Whether term vector should be stored Exceptions Type Condition System.ArgumentNullException if name or tokenStream is null | Improve this Doc View Source Field(String, TokenStream, FieldType) Create field with TokenStream value. Declaration public Field(string name, TokenStream tokenStream, FieldType type) Parameters Type Name Description System.String name field name TokenStream tokenStream TokenStream value FieldType type field type Exceptions Type Condition System.ArgumentException if IsStored is true, or if IsTokenized is false, or if IsIndexed is false. System.ArgumentNullException if either the name or type is null , or if the tokenStream is null | Improve this Doc View Source Field(String, FieldType) Expert: creates a field with no initial value. Intended only for custom Field subclasses. Declaration protected Field(string name, FieldType type) Parameters Type Name Description System.String name field name FieldType type field type Exceptions Type Condition System.ArgumentNullException if either the name or type is null . | Improve this Doc View Source Field(String, BytesRef, FieldType) Create field with binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, BytesRef bytes, FieldType type) Parameters Type Name Description System.String name field name BytesRef bytes BytesRef pointing to binary content (not copied) FieldType type field type Exceptions Type Condition System.ArgumentException if the IsIndexed is true System.ArgumentNullException if the field name is null , or the type is null | Improve this Doc View Source Field(String, Byte[]) Create a stored field with binary value. Optionally the value may be compressed. Declaration [Obsolete(\"Use StoredField instead.\")] public Field(string name, byte[] value) Parameters Type Name Description System.String name The name of the field System.Byte [] value The binary value | Improve this Doc View Source Field(String, Byte[], FieldType) Create field with binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, byte[] value, FieldType type) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) FieldType type field type Exceptions Type Condition System.ArgumentException if the IsIndexed is true System.ArgumentNullException the field name is null , or if the type is null | Improve this Doc View Source Field(String, Byte[], Int32, Int32) Create a stored field with binary value. Optionally the value may be compressed. Declaration [Obsolete(\"Use StoredField instead.\")] public Field(string name, byte[] value, int offset, int length) Parameters Type Name Description System.String name The name of the field System.Byte [] value The binary value System.Int32 offset Starting offset in value where this Field 's bytes are System.Int32 length Number of bytes to use for this Field , starting at offset | Improve this Doc View Source Field(String, Byte[], Int32, Int32, FieldType) Create field with binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, byte[] value, int offset, int length, FieldType type) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array FieldType type field type Exceptions Type Condition System.ArgumentException if the IsIndexed is true System.ArgumentNullException if the field name is null , or the type is null | Improve this Doc View Source Field(String, TextReader) Create a tokenized and indexed field that is not stored. Term vectors will not be stored. The System.IO.TextReader is read only when the Document is added to the index, i.e. you may not close the System.IO.TextReader until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TextReader reader) Parameters Type Name Description System.String name The name of the field System.IO.TextReader reader The reader with the content Exceptions Type Condition System.ArgumentNullException if name or reader is null | Improve this Doc View Source Field(String, TextReader, Field.TermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors. The System.IO.TextReader is read only when the Document is added to the index, i.e. you may not close the System.IO.TextReader until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TextReader reader, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field System.IO.TextReader reader The reader with the content Field.TermVector termVector Whether term vector should be stored Exceptions Type Condition System.ArgumentNullException if name or reader is null | Improve this Doc View Source Field(String, TextReader, FieldType) Create field with System.IO.TextReader value. Declaration public Field(string name, TextReader reader, FieldType type) Parameters Type Name Description System.String name field name System.IO.TextReader reader reader value FieldType type field type Exceptions Type Condition System.ArgumentException if IsStored is true, or if IsTokenized is false. System.ArgumentNullException if either the name or type is null , or if the reader is null | Improve this Doc View Source Field(String, String, Field.Store, Field.Index) Create a field by specifying its name , value and how it will be saved in the index. Term vectors will not be stored in the index. Declaration [Obsolete(\"Use StringField, TextField instead.\")] public Field(string name, string value, Field.Store store, Field.Index index) Parameters Type Name Description System.String name The name of the field System.String value The string to process Field.Store store Whether value should be stored in the index Field.Index index Whether the field should be indexed, and if so, if it should be tokenized before indexing Exceptions Type Condition System.ArgumentNullException if name or value is null System.ArgumentException if the field is neither stored nor indexed | Improve this Doc View Source Field(String, String, Field.Store, Field.Index, Field.TermVector) Create a field by specifying its name , value and how it will be saved in the index. Declaration [Obsolete(\"Use StringField, TextField instead.\")] public Field(string name, string value, Field.Store store, Field.Index index, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field System.String value The string to process Field.Store store Whether value should be stored in the index Field.Index index Whether the field should be indexed, and if so, if it should be tokenized before indexing Field.TermVector termVector Whether term vector should be stored Exceptions Type Condition System.ArgumentNullException if name or value is null System.ArgumentException in any of the following situations: the field is neither stored nor indexed the field is not indexed but termVector is YES | Improve this Doc View Source Field(String, String, FieldType) Create field with System.String value. Declaration public Field(string name, string value, FieldType type) Parameters Type Name Description System.String name field name System.String value string value FieldType type field type Exceptions Type Condition System.ArgumentException if the field's type is neither indexed() nor stored(), or if indexed() is false but storeTermVectors() is true. System.ArgumentNullException if either the name or value is null , or if the type is null Fields | Improve this Doc View Source m_boost Field's boost Declaration protected float m_boost Field Value Type Description System.Single See Also Boost | Improve this Doc View Source m_name Field's name Declaration protected readonly string m_name Field Value Type Description System.String | Improve this Doc View Source m_tokenStream Pre-analyzed TokenStream for indexed fields; this is separate from FieldsData because you are allowed to have both; eg maybe field has a System.String value but you customize how it's tokenized Declaration protected TokenStream m_tokenStream Field Value Type Description TokenStream | Improve this Doc View Source m_type Field's type Declaration protected readonly FieldType m_type Field Value Type Description FieldType Properties | Improve this Doc View Source Boost Gets or sets the boost factor on this field. Declaration public virtual float Boost { get; set; } Property Value Type Description System.Single Remarks The default value is 1.0f (no boost). Exceptions Type Condition System.ArgumentException (setter only) if this field is not indexed, or if it omits norms. | Improve this Doc View Source FieldsData Field's value Setting this property will automatically set the backing field for the NumericType property. Declaration protected object FieldsData { get; set; } Property Value Type Description System.Object | Improve this Doc View Source FieldType Returns the FieldType for this field as type FieldType . Declaration public virtual FieldType FieldType { get; } Property Value Type Description FieldType | Improve this Doc View Source IndexableFieldType Returns the FieldType for this field as type IIndexableFieldType . Declaration public virtual IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name The field's name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration public virtual NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration public virtual BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as System.Byte or null if the type is non-numeric. Declaration public virtual byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as System.Double or null if the type is non-numeric. Declaration public virtual double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as System.Int16 or null if the type is non-numeric. Declaration public virtual short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as System.Int32 or null if the type is non-numeric. Declaration public virtual int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as System.Int64 or null if the type is non-numeric. Declaration public virtual long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Declaration [Obsolete(\"In .NET, use of this method will cause boxing/unboxing. Instead, use the NumericType property to check the underlying type and call the appropriate GetXXXValue() method to retrieve the value.\")] public virtual object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() The value of the field as a System.IO.TextReader , or null . If null , the System.String value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual TextReader GetReaderValue() Returns Type Description System.IO.TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as System.Single or null if the type is non-numeric. Declaration public virtual float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Declaration public virtual TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStreamValue() The TokenStream for this field to be used when indexing, or null . If null , the System.IO.TextReader value or System.String value is analyzed to produce the indexed tokens. Declaration public virtual TokenStream GetTokenStreamValue() Returns Type Description TokenStream | Improve this Doc View Source SetBytesValue(BytesRef) Expert: change the value of this field. See SetStringValue(String) . NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public virtual void SetBytesValue(BytesRef value) Parameters Type Name Description BytesRef value | Improve this Doc View Source SetBytesValue(Byte[]) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetBytesValue(byte[] value) Parameters Type Name Description System.Byte [] value | Improve this Doc View Source SetByteValue(Byte) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetByteValue(byte value) Parameters Type Name Description System.Byte value | Improve this Doc View Source SetDoubleValue(Double) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetDoubleValue(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source SetInt16Value(Int16) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt16Value(short value) Parameters Type Name Description System.Int16 value | Improve this Doc View Source SetInt32Value(Int32) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt32Value(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source SetInt64Value(Int64) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt64Value(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source SetReaderValue(TextReader) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetReaderValue(TextReader value) Parameters Type Name Description System.IO.TextReader value | Improve this Doc View Source SetSingleValue(Single) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetSingleValue(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source SetStringValue(String) Expert: change the value of this field. This can be used during indexing to re-use a single Field instance to improve indexing speed by avoiding GC cost of new'ing and reclaiming Field instances. Typically a single Document instance is re-used as well. This helps most on small documents. Each Field instance should only be used once within a single Document instance. See ImproveIndexingSpeed for details. Declaration public virtual void SetStringValue(string value) Parameters Type Name Description System.String value | Improve this Doc View Source SetTokenStream(TokenStream) Expert: sets the token stream to be used for indexing and causes IsIndexed and IsTokenized to return true. May be combined with stored values from GetStringValue() or GetBinaryValue() Declaration public virtual void SetTokenStream(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream | Improve this Doc View Source ToString() Prints a Field for human consumption. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Translates the pre-4.0 enums for specifying how a field should be indexed into the 4.0 FieldType approach. Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static FieldType TranslateFieldType(Field.Store store, Field.Index index, Field.TermVector termVector) Parameters Type Name Description Field.Store store Field.Index index Field.TermVector termVector Returns Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Index.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Index.html",
    "title": "Enum Field.Index | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Field.Index Specifies whether and how a field should be indexed. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public enum Index Fields Name Description ANALYZED Index the tokens produced by running the field's value through an Analyzer . This is useful for common text. ANALYZED_NO_NORMS Expert: Index the tokens produced by running the field's value through an Analyzer, and also separately disable the storing of norms. See NOT_ANALYZED_NO_NORMS for what norms are and why you may want to disable them. NO Do not index the field value. This field can thus not be searched, but one can still access its contents provided it is Field.Store . NOT_ANALYZED Index the field's value without using an Analyzer , so it can be searched. As no analyzer is used the value will be stored as a single term. This is useful for unique Ids like product numbers. NOT_ANALYZED_NO_NORMS Expert: Index the field's value without an Analyzer, and also disable the storing of norms. Note that you can also separately enable/disable norms by setting OmitNorms . No norms means that index-time field and document boosting and field length normalization are disabled. The benefit is less memory usage as norms take up one byte of RAM per indexed field for every document in the index, during searching. Note that once you index a given field with norms enabled, disabling norms will have no effect. In other words, for this to have the above described effect on a field, all instances of that field must be indexed with NOT_ANALYZED_NO_NORMS from the beginning. Extension Methods FieldExtensions.IsIndexed() FieldExtensions.IsAnalyzed() FieldExtensions.OmitNorms()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int16.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int16.html",
    "title": "Class Field.Int16 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field.Int16 Inheritance System.Object Field.Number Field.Int16 Inherited Members Field.Number.GetByteValue() 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.Documents Assembly : Lucene.Net.dll Syntax [Serializable] protected sealed class Int16 : Field.Number Constructors | Improve this Doc View Source Int16(Int16) Declaration public Int16(short value) Parameters Type Name Description System.Int16 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt16Value() Declaration public override short GetInt16Value() Returns Type Description System.Int16 Overrides Field.Number.GetInt16Value() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int32.html",
    "title": "Class Field.Int32 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field.Int32 Inheritance System.Object Field.Number Field.Int32 Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() 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.Documents Assembly : Lucene.Net.dll Syntax [Serializable] protected sealed class Int32 : Field.Number Constructors | Improve this Doc View Source Int32(Int32) Declaration public Int32(int value) Parameters Type Name Description System.Int32 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int64.html",
    "title": "Class Field.Int64 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field.Int64 Inheritance System.Object Field.Number Field.Int64 Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() 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.Documents Assembly : Lucene.Net.dll Syntax [Serializable] protected sealed class Int64 : Field.Number Constructors | Improve this Doc View Source Int64(Int64) Declaration public Int64(long value) Parameters Type Name Description System.Int64 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Number.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Number.html",
    "title": "Class Field.Number | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field.Number Inheritance System.Object Field.Number Field.Byte Field.Double Field.Int16 Field.Int32 Field.Int64 Field.Single 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) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Serializable] protected abstract class Number Methods | Improve this Doc View Source GetByteValue() Returns this object's value as a System.Byte . Might involve rounding and/or truncating the value, so it fits into a System.Byte . Declaration public virtual byte GetByteValue() Returns Type Description System.Byte the primitive System.Byte value of this object. | Improve this Doc View Source GetDoubleValue() Returns this object's value as a System.Double . Might involve rounding. Declaration public abstract double GetDoubleValue() Returns Type Description System.Double the primitive System.Double value of this object. | Improve this Doc View Source GetInt16Value() Returns this object's value as a System.Int16 . Might involve rounding and/or truncating the value, so it fits into a System.Int16 . Declaration public virtual short GetInt16Value() Returns Type Description System.Int16 the primitive System.Int16 value of this object. | Improve this Doc View Source GetInt32Value() Returns this object's value as an System.Int32 . Might involve rounding and/or truncating the value, so it fits into an System.Int32 . Declaration public abstract int GetInt32Value() Returns Type Description System.Int32 the primitive System.Int32 value of this object. | Improve this Doc View Source GetInt64Value() Returns this object's value as a System.Int64 . Might involve rounding and/or truncating the value, so it fits into a System.Int64 . Declaration public abstract long GetInt64Value() Returns Type Description System.Int64 the primitive System.Int64 value of this object. | Improve this Doc View Source GetSingleValue() Returns this object's value as a System.Single . Might involve rounding. Declaration public abstract float GetSingleValue() Returns Type Description System.Single the primitive System.Single value of this object. | Improve this Doc View Source ToString() Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public abstract string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String | Improve this Doc View Source ToString(String) Declaration public abstract string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public abstract string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Single.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Single.html",
    "title": "Class Field.Single | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Field.Single Inheritance System.Object Field.Number Field.Single Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() 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.Documents Assembly : Lucene.Net.dll Syntax [Serializable] protected sealed class Single : Field.Number Constructors | Improve this Doc View Source Single(Single) Declaration public Single(float value) Parameters Type Name Description System.Single value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Store.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Store.html",
    "title": "Enum Field.Store | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Field.Store Specifies whether and how a field should be stored. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum Store Fields Name Description NO Do not store the field's value in the index. YES Store the original field value in the index. this is useful for short texts like a document's title which should be displayed with the results. The value is stored in its original form, i.e. no analyzer is used before it is stored. Extension Methods FieldExtensions.IsStored()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.TermVector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.TermVector.html",
    "title": "Enum Field.TermVector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Field.TermVector Specifies whether and how a field should have term vectors. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public enum TermVector Fields Name Description NO Do not store term vectors. WITH_OFFSETS Store the term vector + Token offset information WITH_POSITIONS Store the term vector + token position information WITH_POSITIONS_OFFSETS Store the term vector + Token position and offset information YES Store the term vectors of each document. A term vector is a list of the document's terms and their number of occurrences in that document. Extension Methods FieldExtensions.IsStored() FieldExtensions.WithPositions() FieldExtensions.WithOffsets()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.FieldExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.FieldExtensions.html",
    "title": "Class FieldExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldExtensions LUCENENET specific extension methods to add functionality to enumerations that mimic Lucene Inheritance System.Object FieldExtensions 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.dll Syntax public static class FieldExtensions Methods | Improve this Doc View Source IsAnalyzed(Field.Index) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool IsAnalyzed(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source IsIndexed(Field.Index) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool IsIndexed(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source IsStored(Field.Store) Declaration public static bool IsStored(this Field.Store store) Parameters Type Name Description Field.Store store Returns Type Description System.Boolean | Improve this Doc View Source IsStored(Field.TermVector) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool IsStored(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean | Improve this Doc View Source OmitNorms(Field.Index) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool OmitNorms(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source ToIndex(Boolean, Boolean) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static Field.Index ToIndex(bool indexed, bool analyed) Parameters Type Name Description System.Boolean indexed System.Boolean analyed Returns Type Description Field.Index | Improve this Doc View Source ToIndex(Boolean, Boolean, Boolean) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static Field.Index ToIndex(bool indexed, bool analyzed, bool omitNorms) Parameters Type Name Description System.Boolean indexed System.Boolean analyzed System.Boolean omitNorms Returns Type Description Field.Index | Improve this Doc View Source ToTermVector(Boolean, Boolean, Boolean) Get the best representation of a TermVector given the flags. Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static Field.TermVector ToTermVector(bool stored, bool withOffsets, bool withPositions) Parameters Type Name Description System.Boolean stored System.Boolean withOffsets System.Boolean withPositions Returns Type Description Field.TermVector | Improve this Doc View Source WithOffsets(Field.TermVector) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool WithOffsets(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean | Improve this Doc View Source WithPositions(Field.TermVector) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool WithPositions(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Documents.FieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.FieldType.html",
    "title": "Class FieldType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldType Describes the properties of a field. Inheritance System.Object FieldType Implements IIndexableFieldType 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) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class FieldType : IIndexableFieldType Constructors | Improve this Doc View Source FieldType() Create a new FieldType with default properties. Declaration public FieldType() | Improve this Doc View Source FieldType(FieldType) Create a new mutable FieldType with all of the properties from ref Declaration public FieldType(FieldType ref) Parameters Type Name Description FieldType ref Properties | Improve this Doc View Source DocValueType Sets the field's DocValuesType , or set to NONE if no DocValues should be stored. The default is NONE (no DocValues ). Declaration public virtual DocValuesType DocValueType { get; set; } Property Value Type Description DocValuesType Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IndexOptions Sets the indexing options for the field. The default is DOCS_AND_FREQS_AND_POSITIONS . Declaration public virtual IndexOptions IndexOptions { get; set; } Property Value Type Description IndexOptions Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IsIndexed Set to true to index (invert) this field. The default is false . Declaration public virtual bool IsIndexed { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IsStored Set to true to store this field. The default is false . Declaration public virtual bool IsStored { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IsTokenized Set to true to tokenize this field's contents via the configured Analyzer . The default is false . Declaration public virtual bool IsTokenized { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source NumericPrecisionStep Sets the numeric precision step for the field. This has no effect if NumericType returns NONE . The default is PRECISION_STEP_DEFAULT . Declaration public virtual int NumericPrecisionStep { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if precisionStep is less than 1. System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source NumericType Specifies the field's numeric type, or set to null if the field has no numeric type. If non-null then the field's value will be indexed numerically so that NumericRangeQuery can be used at search time. Declaration public virtual NumericType NumericType { get; set; } Property Value Type Description NumericType Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source OmitNorms Set to true to omit normalization values for the field. The default is false . Declaration public virtual bool OmitNorms { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectorOffsets Set to true to also store token character offsets into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorOffsets { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectorPayloads Set to true to also store token payloads into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorPayloads { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectorPositions Set to true to also store token positions into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorPositions { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectors Set to true if this field's indexed form should be also stored into term vectors. The default is false . Declaration public virtual bool StoreTermVectors { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. Methods | Improve this Doc View Source Freeze() Prevents future changes. Note, it is recommended that this is called once the FieldType 's properties have been set, to prevent unintentional state changes. Declaration public virtual void Freeze() | Improve this Doc View Source ToString() Prints a FieldType for human consumption. Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IIndexableFieldType"
  },
  "api/Lucene.Net/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- 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. --> Misc extensions of the Document/Field API. Classes BinaryDocValuesField Field that stores a per-document BytesRef value. The values are stored directly with no sharing, which is a good fit when the fields don't share (many) values, such as a title field. If values may be shared and sorted it's better to use SortedDocValuesField . Here's an example usage: document.Add(new BinaryDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. ByteDocValuesField Field that stores a per-document System.Byte value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new ByteDocValuesField(name, (byte) 22)); If you also need to store the value, you should add a separate StoredField instance. CompressionTools Simple utility class providing static methods to compress and decompress binary data for stored fields. this class uses the System.IO.Compression.DeflateStream class to compress and decompress. DateTools Provides support for converting dates to strings and vice-versa. The strings are structured so that lexicographic sorting orders them by date, which makes them suitable for use as field values and search terms. This class also helps you to limit the resolution of your dates. Do not save dates with a finer resolution than you really need, as then TermRangeQuery and PrefixQuery will require more memory and become slower. Another approach is NumericUtils , which provides a sortable binary representation (prefix encoded) of numeric values, which date/time are. For indexing a System.DateTime , just get the System.DateTime.Ticks and index this as a numeric value with Int64Field and use NumericRangeQuery<T> to query it. DerefBytesDocValuesField Field that stores a per-document BytesRef value. Here's an example usage: document.Add(new DerefBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Document Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored ( IsStored ) with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it. Note that fields which are not IsStored are not available in documents retrieved from the index, e.g. with Doc or Document(Int32) . DocumentStoredFieldVisitor A StoredFieldVisitor that creates a Document containing all stored fields, or only specific requested fields provided to DocumentStoredFieldVisitor(ISet<String>) . This is used by Document(Int32) to load a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DoubleDocValuesField Syntactic sugar for encoding doubles as NumericDocValues via J2N.BitConversion.DoubleToRawInt64Bits(System.Double) . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. DoubleField Field that indexes System.Double values for efficient range filtering and sorting. Here's an example usage: document.Add(new DoubleField(name, 6.0, Field.Store.NO)); For optimal performance, re-use the DoubleField and Document instance for more than one document: DoubleField field = new DoubleField(name, 0.0, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetDoubleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , SingleField . To perform range querying or filtering against a DoubleField , use NumericRangeQuery or NumericRangeFilter<T> . To sort according to a DoubleField , use the normal numeric sort types, eg DOUBLE . DoubleField values can also be loaded directly from IFieldCache . You may add the same field name as an DoubleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued DoubleField . A DoubleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep ( precisionStep ) configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. @since 2.9 Field Expert: directly create a field for a document. Most users should use one of the sugar subclasses: Int32Field , Int64Field , SingleField , DoubleField , BinaryDocValuesField , NumericDocValuesField , SortedDocValuesField , StringField , TextField , StoredField . A field is a section of a Document . Each field has three parts: name, type and value. Values may be text ( System.String , System.IO.TextReader or pre-analyzed TokenStream ), binary ( byte[] ), or numeric ( System.Int32 , System.Int64 , System.Single , or System.Double ). Fields are optionally stored in the index, so that they may be returned with hits on the document. NOTE: the field type is an IIndexableFieldType . Making changes to the state of the IIndexableFieldType will impact any Field it is used in. It is strongly recommended that no changes be made after Field instantiation. Field.Byte Field.Double Field.Int16 Field.Int32 Field.Int64 Field.Number Field.Single FieldExtensions LUCENENET specific extension methods to add functionality to enumerations that mimic Lucene FieldType Describes the properties of a field. Int16DocValuesField Field that stores a per-document System.Int16 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int16DocValuesField(name, (short) 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was ShortDocValuesField in Lucene Int32DocValuesField Field that stores a per-document System.Int32 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int32DocValuesField(name, 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was IntDocValuesField in Lucene Int32Field Field that indexes System.Int32 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int32Field(name, 6, Field.Store.NO)); For optimal performance, re-use the Int32Field and Document instance for more than one document: Int32Field field = new Int32Field(name, 6, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt32Value(value) writer.AddDocument(document); ... } See also Int64Field , SingleField , DoubleField . To perform range querying or filtering against a Int32Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int32Field , use the normal numeric sort types, eg INT32 . Int32Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int32Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int32Field . An Int32Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was IntField in Lucene @since 2.9 Int64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was LongDocValuesField in Lucene Int64Field Field that indexes System.Int64 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int64Field(name, 6L, Field.Store.NO)); For optimal performance, re-use the Int64Field and Document instance for more than one document: Int64Field field = new Int64Field(name, 0L, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt64Value(value) writer.AddDocument(document); ... } See also Int32Field , SingleField , DoubleField . Any type that can be converted to long can also be indexed. For example, date/time values represented by a System.DateTime can be translated into a long value using the System.DateTime.Ticks property. If you don't need millisecond precision, you can quantize the value, either by dividing the result of System.DateTime.Ticks or using the separate getters (for year, month, etc.) to construct an System.Int32 or System.Int64 value. To perform range querying or filtering against a Int64Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int64Field , use the normal numeric sort types, eg INT64 . Int64Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int64Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int64Field . An Int64Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was LongField in Lucene @since 2.9 NumericDocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new NumericDocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. PackedInt64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new PackedInt64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was PackedLongDocValuesField in Lucene SingleDocValuesField Syntactic sugar for encoding floats as NumericDocValues via J2N.BitConversion.SingleToRawInt32Bits(System.Single) . Per-document floating point values can be retrieved via GetSingles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring four bytes per document. Consider encoding floating point values yourself with only as much precision as you require. NOTE: This was FloatDocValuesField in Lucene SingleField Field that indexes System.Single values for efficient range filtering and sorting. Here's an example usage: document.Add(new SingleField(name, 6.0F, Field.Store.NO)); For optimal performance, re-use the SingleField and Document instance for more than one document: FloatField field = new SingleField(name, 0.0F, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetSingleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , DoubleField . To perform range querying or filtering against a SingleField , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a SingleField , use the normal numeric sort types, eg SINGLE . SingleField values can also be loaded directly from IFieldCache . You may add the same field name as an SingleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued SingleField . A SingleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was FloatField in Lucene @since 2.9 SortedBytesDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. SortedDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. SortedSetDocValuesField Field that stores a set of per-document BytesRef values, indexed for faceting,grouping,joining. Here's an example usage: document.Add(new SortedSetDocValuesField(name, new BytesRef(\"hello\"))); document.Add(new SortedSetDocValuesField(name, new BytesRef(\"world\"))); If you also need to store the value, you should add a separate StoredField instance. StoredField A field whose value is stored so that Doc(Int32) and Document(Int32) will return the field and its value. StraightBytesDocValuesField Field that stores a per-document BytesRef value. If values may be shared it's better to use SortedDocValuesField . Here's an example usage: document.Add(new StraightBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. StringField A field that is indexed but not tokenized: the entire System.String value is indexed as a single token. For example this might be used for a 'country' field or an 'id' field, or any field that you intend to use for sorting or access through the field cache. TextField A field that is indexed and tokenized, without term vectors. For example this would be used on a 'body' field, that contains the bulk of a document's text. Enums DateTools.Resolution Specifies the time granularity. Field.Index Specifies whether and how a field should be indexed. Field.Store Specifies whether and how a field should be stored. Field.TermVector Specifies whether and how a field should have term vectors. NumericFieldType Data type of the numeric IIndexableField value NumericType Data type of the numeric value @since 3.2"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int16DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int16DocValuesField.html",
    "title": "Class Int16DocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int16DocValuesField Field that stores a per-document System.Int16 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int16DocValuesField(name, (short) 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was ShortDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int16DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead.\")] public class Int16DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int16DocValuesField(String, Int16) Creates a new DocValues field with the specified 16-bit System.Int16 value Declaration public Int16DocValuesField(string name, short value) Parameters Type Name Description System.String name field name System.Int16 value 16-bit System.Int16 value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetInt16Value(Int16) Declaration public override void SetInt16Value(short value) Parameters Type Name Description System.Int16 value Overrides Field.SetInt16Value(Int16) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int32DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int32DocValuesField.html",
    "title": "Class Int32DocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32DocValuesField Field that stores a per-document System.Int32 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int32DocValuesField(name, 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was IntDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int32DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Deprecated, use NumericDocValuesField instead\")] public class Int32DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int32DocValuesField(String, Int32) Creates a new DocValues field with the specified 32-bit System.Int32 value Declaration public Int32DocValuesField(string name, int value) Parameters Type Name Description System.String name field name System.Int32 value 32-bit System.Int32 value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetInt32Value(Int32) Declaration public override void SetInt32Value(int value) Parameters Type Name Description System.Int32 value Overrides Field.SetInt32Value(Int32) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int32Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int32Field.html",
    "title": "Class Int32Field | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32Field Field that indexes System.Int32 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int32Field(name, 6, Field.Store.NO)); For optimal performance, re-use the Int32Field and Document instance for more than one document: Int32Field field = new Int32Field(name, 6, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt32Value(value) writer.AddDocument(document); ... } See also Int64Field , SingleField , DoubleField . To perform range querying or filtering against a Int32Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int32Field , use the normal numeric sort types, eg INT32 . Int32Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int32Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int32Field . An Int32Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was IntField in Lucene @since 2.9 Inheritance System.Object Field Int32Field Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public sealed class Int32Field : Field, IIndexableField Constructors | Improve this Doc View Source Int32Field(String, Int32, Field.Store) Creates a stored or un-stored Int32Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public Int32Field(string name, int value, Field.Store stored) Parameters Type Name Description System.String name field name System.Int32 value 32-bit System.Int32 value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source Int32Field(String, Int32, FieldType) Expert: allows you to customize the FieldType . Declaration public Int32Field(string name, int value, FieldType type) Parameters Type Name Description System.String name field name System.Int32 value 32-bit System.Int32 value FieldType type customized field type: must have NumericType of INT32 . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT32 Fields | Improve this Doc View Source TYPE_NOT_STORED Type for an Int32Field that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored Int32Field : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int64DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int64DocValuesField.html",
    "title": "Class Int64DocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was LongDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int64DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead\")] public class Int64DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int64DocValuesField(String, Int64) Creates a new DocValues field with the specified 64-bit System.Int64 value Declaration public Int64DocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Exceptions Type Condition System.ArgumentNullException if the field name is null Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int64Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int64Field.html",
    "title": "Class Int64Field | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64Field Field that indexes System.Int64 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int64Field(name, 6L, Field.Store.NO)); For optimal performance, re-use the Int64Field and Document instance for more than one document: Int64Field field = new Int64Field(name, 0L, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt64Value(value) writer.AddDocument(document); ... } See also Int32Field , SingleField , DoubleField . Any type that can be converted to long can also be indexed. For example, date/time values represented by a System.DateTime can be translated into a long value using the System.DateTime.Ticks property. If you don't need millisecond precision, you can quantize the value, either by dividing the result of System.DateTime.Ticks or using the separate getters (for year, month, etc.) to construct an System.Int32 or System.Int64 value. To perform range querying or filtering against a Int64Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int64Field , use the normal numeric sort types, eg INT64 . Int64Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int64Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int64Field . An Int64Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was LongField in Lucene @since 2.9 Inheritance System.Object Field Int64Field Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public sealed class Int64Field : Field, IIndexableField Constructors | Improve this Doc View Source Int64Field(String, Int64, Field.Store) Creates a stored or un-stored Int64Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public Int64Field(string name, long value, Field.Store stored) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source Int64Field(String, Int64, FieldType) Expert: allows you to customize the FieldType . Declaration public Int64Field(string name, long value, FieldType type) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value FieldType type customized field type: must have NumericType of INT64 . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT64 Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a Int64Field that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored Int64Field : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericDocValuesField.html",
    "title": "Class NumericDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericDocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new NumericDocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field NumericDocValuesField ByteDocValuesField DoubleDocValuesField Int16DocValuesField Int32DocValuesField Int64DocValuesField PackedInt64DocValuesField SingleDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public class NumericDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source NumericDocValuesField(String, Int64) Creates a new DocValues field with the specified 64-bit System.Int64 value Declaration public NumericDocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE Type for numeric DocValues . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericFieldType.html",
    "title": "Enum NumericFieldType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum NumericFieldType Data type of the numeric IIndexableField value Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum NumericFieldType Fields Name Description BYTE 8-bit unsigned integer numeric type DOUBLE 64-bit double numeric type INT16 16-bit short numeric type INT32 32-bit integer numeric type INT64 64-bit long numeric type NONE No numeric type (the field is not numeric). SINGLE 32-bit float numeric type"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericType.html",
    "title": "Enum NumericType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum NumericType Data type of the numeric value @since 3.2 Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum NumericType Fields Name Description DOUBLE 64-bit double numeric type INT32 32-bit integer numeric type NOTE: This was INT in Lucene INT64 64-bit long numeric type NOTE: This was LONG in Lucene NONE No numeric type will be used. NOTE: This is the same as setting to null in Lucene SINGLE 32-bit float numeric type NOTE: This was FLOAT in Lucene"
  },
  "api/Lucene.Net/Lucene.Net.Documents.PackedInt64DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.PackedInt64DocValuesField.html",
    "title": "Class PackedInt64DocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new PackedInt64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was PackedLongDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField PackedInt64DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead.\")] public class PackedInt64DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source PackedInt64DocValuesField(String, Int64) Creates a new DocValues field with the specified System.Int64 value Declaration public PackedInt64DocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Exceptions Type Condition System.ArgumentException if the field name is null Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SingleDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SingleDocValuesField.html",
    "title": "Class SingleDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleDocValuesField Syntactic sugar for encoding floats as NumericDocValues via J2N.BitConversion.SingleToRawInt32Bits(System.Single) . Per-document floating point values can be retrieved via GetSingles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring four bytes per document. Consider encoding floating point values yourself with only as much precision as you require. NOTE: This was FloatDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField SingleDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public class SingleDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source SingleDocValuesField(String, Single) Creates a new DocValues field with the specified 32-bit System.Single value Declaration public SingleDocValuesField(string name, float value) Parameters Type Name Description System.String name field name System.Single value 32-bit System.Single value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetInt64Value(Int64) Declaration public override void SetInt64Value(long value) Parameters Type Name Description System.Int64 value Overrides Field.SetInt64Value(Int64) | Improve this Doc View Source SetSingleValue(Single) Declaration public override void SetSingleValue(float value) Parameters Type Name Description System.Single value Overrides Field.SetSingleValue(Single) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SingleField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SingleField.html",
    "title": "Class SingleField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleField Field that indexes System.Single values for efficient range filtering and sorting. Here's an example usage: document.Add(new SingleField(name, 6.0F, Field.Store.NO)); For optimal performance, re-use the SingleField and Document instance for more than one document: FloatField field = new SingleField(name, 0.0F, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetSingleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , DoubleField . To perform range querying or filtering against a SingleField , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a SingleField , use the normal numeric sort types, eg SINGLE . SingleField values can also be loaded directly from IFieldCache . You may add the same field name as an SingleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued SingleField . A SingleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was FloatField in Lucene @since 2.9 Inheritance System.Object Field SingleField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public sealed class SingleField : Field, IIndexableField Constructors | Improve this Doc View Source SingleField(String, Single, Field.Store) Creates a stored or un-stored SingleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public SingleField(string name, float value, Field.Store stored) Parameters Type Name Description System.String name field name System.Single value 32-bit System.Single value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source SingleField(String, Single, FieldType) Expert: allows you to customize the FieldType . Declaration public SingleField(string name, float value, FieldType type) Parameters Type Name Description System.String name field name System.Single value 32-bit System.Single value FieldType type customized field type: must have NumericType of SINGLE . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a SINGLE NumericType Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a SingleField that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored SingleField : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedBytesDocValuesField.html",
    "title": "Class SortedBytesDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedBytesDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedDocValuesField SortedBytesDocValuesField Implements IIndexableField Inherited Members SortedDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use SortedDocValuesField instead.\")] public class SortedBytesDocValuesField : SortedDocValuesField, IIndexableField Constructors | Improve this Doc View Source SortedBytesDocValuesField(String, BytesRef) Create a new fixed or variable-length sorted DocValues field. Declaration public SortedBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source SortedBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length sorted DocValues field. Declaration public SortedBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for sorted bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for sorted bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also SortedDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedDocValuesField.html",
    "title": "Class SortedDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedDocValuesField SortedBytesDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public class SortedDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source SortedDocValuesField(String, BytesRef) Create a new sorted DocValues field. Declaration public SortedDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE Type for sorted bytes DocValues Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedSetDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedSetDocValuesField.html",
    "title": "Class SortedSetDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedSetDocValuesField Field that stores a set of per-document BytesRef values, indexed for faceting,grouping,joining. Here's an example usage: document.Add(new SortedSetDocValuesField(name, new BytesRef(\"hello\"))); document.Add(new SortedSetDocValuesField(name, new BytesRef(\"world\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedSetDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public class SortedSetDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source SortedSetDocValuesField(String, BytesRef) Create a new sorted DocValues field. Declaration public SortedSetDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE Type for sorted bytes DocValues Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StoredField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StoredField.html",
    "title": "Class StoredField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StoredField A field whose value is stored so that Doc(Int32) and Document(Int32) will return the field and its value. Inheritance System.Object Field StoredField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public sealed class StoredField : Field, IIndexableField Constructors | Improve this Doc View Source StoredField(String, BytesRef) Create a stored-only field with the given binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, BytesRef value) Parameters Type Name Description System.String name field name BytesRef value BytesRef pointing to binary content (not copied) Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Byte[]) Create a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, byte[] value) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Byte[], Int32, Int32) Create a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, byte[] value, int offset, int length) Parameters Type Name Description System.String name field name System.Byte [] value System.Byte array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Double) Create a stored-only field with the given System.Double value. Declaration public StoredField(string name, double value) Parameters Type Name Description System.String name field name System.Double value System.Double value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Int32) Create a stored-only field with the given System.Int32 value. Declaration public StoredField(string name, int value) Parameters Type Name Description System.String name field name System.Int32 value System.Int32 value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Int64) Create a stored-only field with the given System.Int64 value. Declaration public StoredField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value System.Int64 value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Single) Create a stored-only field with the given System.Single value. Declaration public StoredField(string name, float value) Parameters Type Name Description System.String name field name System.Single value System.Single value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, String) Create a stored-only field with the given System.String value. Declaration public StoredField(string name, string value) Parameters Type Name Description System.String name field name System.String value System.String value Exceptions Type Condition System.ArgumentNullException if the field name or value is null . Fields | Improve this Doc View Source TYPE Type for a stored-only field. Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StraightBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StraightBytesDocValuesField.html",
    "title": "Class StraightBytesDocValuesField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StraightBytesDocValuesField Field that stores a per-document BytesRef value. If values may be shared it's better to use SortedDocValuesField . Here's an example usage: document.Add(new StraightBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField StraightBytesDocValuesField Implements IIndexableField Inherited Members BinaryDocValuesField.fType Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use BinaryDocValuesField instead.\")] public class StraightBytesDocValuesField : BinaryDocValuesField, IIndexableField Constructors | Improve this Doc View Source StraightBytesDocValuesField(String, BytesRef) Create a new fixed or variable length DocValues field. Declaration public StraightBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source StraightBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length direct DocValues field. Declaration public StraightBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for direct bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for direct bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) See Also BinaryDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StringField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StringField.html",
    "title": "Class StringField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StringField A field that is indexed but not tokenized: the entire System.String value is indexed as a single token. For example this might be used for a 'country' field or an 'id' field, or any field that you intend to use for sorting or access through the field cache. Inheritance System.Object Field StringField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public sealed class StringField : Field, IIndexableField Constructors | Improve this Doc View Source StringField(String, String, Field.Store) Creates a new StringField (a field that is indexed but not tokenized) Declaration public StringField(string name, string value, Field.Store stored) Parameters Type Name Description System.String name field name System.String value System.String value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name or value is null . Fields | Improve this Doc View Source TYPE_NOT_STORED Indexed, not tokenized, omits norms, indexes DOCS_ONLY , not stored. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Indexed, not tokenized, omits norms, indexes DOCS_ONLY , stored Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.TextField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.TextField.html",
    "title": "Class TextField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TextField A field that is indexed and tokenized, without term vectors. For example this would be used on a 'body' field, that contains the bulk of a document's text. Inheritance System.Object Field TextField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, 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.Documents Assembly : Lucene.Net.dll Syntax public sealed class TextField : Field, IIndexableField Constructors | Improve this Doc View Source TextField(String, TokenStream) Creates a new un-stored TextField with TokenStream value. Declaration public TextField(string name, TokenStream stream) Parameters Type Name Description System.String name field name TokenStream stream TokenStream value Exceptions Type Condition System.ArgumentNullException if the field name or stream is null . | Improve this Doc View Source TextField(String, TextReader) Creates a new un-stored TextField with System.IO.TextReader value. Declaration public TextField(string name, TextReader reader) Parameters Type Name Description System.String name field name System.IO.TextReader reader System.IO.TextReader value Exceptions Type Condition System.ArgumentNullException if the field name or reader is null | Improve this Doc View Source TextField(String, String, Field.Store) Creates a new TextField with System.String value. Declaration public TextField(string name, string value, Field.Store store) Parameters Type Name Description System.String name field name System.String value System.String value Field.Store store YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name or value is null . Fields | Improve this Doc View Source TYPE_NOT_STORED Indexed, tokenized, not stored. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Indexed, tokenized, stored. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Index.AtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.AtomicReader.html",
    "title": "Class AtomicReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AtomicReader AtomicReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. IndexReader s implemented by this subclass do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader ParallelAtomicReader SegmentReader SlowCompositeReaderWrapper Implements System.IDisposable Inherited Members IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVectors(Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDocs IndexReader.MaxDoc IndexReader.NumDeletedDocs IndexReader.Document(Int32, StoredFieldVisitor) IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey 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.Index Assembly : Lucene.Net.dll Syntax public abstract class AtomicReader : IndexReader, IDisposable Constructors | Improve this Doc View Source AtomicReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected AtomicReader() Properties | Improve this Doc View Source AtomicContext LUCENENET specific propety that allows access to the context as AtomicReaderContext , which prevents the need to cast. Declaration public AtomicReaderContext AtomicContext { get; } Property Value Type Description AtomicReaderContext | Improve this Doc View Source Context Declaration public override sealed IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext Overrides IndexReader.Context | Improve this Doc View Source FieldInfos Get the FieldInfos describing all fields in this reader. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source Fields Returns Fields for this reader. this property may return null if the reader has no postings. Declaration public abstract Fields Fields { get; } Property Value Type Description Fields | Improve this Doc View Source LiveDocs Returns the IBits representing live (not deleted) docs. A set bit indicates the doc ID has not been deleted. If this method returns null it means there are no deleted documents (all documents are live). The returned instance has been safely published for use by multiple threads without additional synchronization. Declaration public abstract IBits LiveDocs { get; } Property Value Type Description IBits Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source DocFreq(Term) Declaration public override sealed int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 Overrides IndexReader.DocFreq(Term) | Improve this Doc View Source GetBinaryDocValues(String) Returns BinaryDocValues for this field, or null if no BinaryDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocCount(String) Declaration public override sealed int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 Overrides IndexReader.GetDocCount(String) | Improve this Doc View Source GetDocsWithField(String) Returns a IBits at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field, or null if no DocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(String) Returns NumericDocValues representing norms for this field, or null if no NumericDocValues were indexed. The returned instance should only be used by a single thread. Declaration public abstract NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericDocValues(String) Returns NumericDocValues for this field, or null if no NumericDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedDocValues(String) Returns SortedDocValues for this field, or null if no SortedDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSetDocValues(String) Returns SortedSetDocValues for this field, or null if no SortedSetDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetSumDocFreq(String) Declaration public override sealed long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumDocFreq(String) | Improve this Doc View Source GetSumTotalTermFreq(String) Declaration public override sealed long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumTotalTermFreq(String) | Improve this Doc View Source GetTermDocsEnum(Term) Returns DocsEnum for the specified term. This will return null if either the field or term does not exist. Declaration public DocsEnum GetTermDocsEnum(Term term) Parameters Type Name Description Term term Returns Type Description DocsEnum See Also Docs ( IBits , DocsEnum ) | Improve this Doc View Source GetTermPositionsEnum(Term) Returns DocsAndPositionsEnum for the specified term. This will return null if the field or term does not exist or positions weren't indexed. Declaration public DocsAndPositionsEnum GetTermPositionsEnum(Term term) Parameters Type Name Description Term term Returns Type Description DocsAndPositionsEnum See Also DocsAndPositions ( IBits , DocsAndPositionsEnum ) | Improve this Doc View Source GetTerms(String) This may return null if the field does not exist. Declaration public Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms | Improve this Doc View Source HasNorms(String) Returns true if there are norms stored for this field . Declaration [Obsolete(\"(4.0) use FieldInfos and check FieldInfo.HasNorms for the field instead.\")] public bool HasNorms(string field) Parameters Type Name Description System.String field Returns Type Description System.Boolean | Improve this Doc View Source TotalTermFreq(Term) Returns the number of documents containing the term . This method returns 0 if the term or field does not exist. This method does not take into account deleted documents that have not yet been merged away. Declaration public override sealed long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 Overrides IndexReader.TotalTermFreq(Term) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.AtomicReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.AtomicReaderContext.html",
    "title": "Class AtomicReaderContext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AtomicReaderContext IndexReaderContext for AtomicReader instances. Inheritance System.Object IndexReaderContext AtomicReaderContext Inherited Members IndexReaderContext.Parent IndexReaderContext.IsTopLevel IndexReaderContext.DocBaseInParent IndexReaderContext.OrdInParent 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.Index Assembly : Lucene.Net.dll Syntax public sealed class AtomicReaderContext : IndexReaderContext Properties | Improve this Doc View Source AtomicReader Declaration public AtomicReader AtomicReader { get; } Property Value Type Description AtomicReader | Improve this Doc View Source Children Declaration public override IList<IndexReaderContext> Children { get; } Property Value Type Description System.Collections.Generic.IList < IndexReaderContext > Overrides IndexReaderContext.Children | Improve this Doc View Source DocBase The readers absolute doc base Declaration public int DocBase { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Leaves Declaration public override IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > Overrides IndexReaderContext.Leaves | Improve this Doc View Source Ord The readers ord in the top-level's leaves array Declaration public int Ord { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Reader Declaration public override IndexReader Reader { get; } Property Value Type Description IndexReader Overrides IndexReaderContext.Reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.BaseCompositeReader-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BaseCompositeReader-1.html",
    "title": "Class BaseCompositeReader<R> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseCompositeReader<R> Base class for implementing CompositeReader s based on an array of sub-readers. The implementing class has to add code for correctly refcounting and closing the sub-readers. User code will most likely use MultiReader to build a composite reader on a set of sub-readers (like several DirectoryReader s). For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IndexReader CompositeReader BaseCompositeReader<R> DirectoryReader MultiReader ParallelCompositeReader Implements System.IDisposable Inherited Members CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class BaseCompositeReader<R> : CompositeReader, IDisposable where R : IndexReader Type Parameters Name Description R Constructors | Improve this Doc View Source BaseCompositeReader(R[]) Constructs a BaseCompositeReader<R> on the given subReaders . Declaration protected BaseCompositeReader(R[] subReaders) Parameters Type Name Description R[] subReaders the wrapped sub-readers. This array is returned by GetSequentialSubReaders() and used to resolve the correct subreader for docID-based methods. Please note: this array is not cloned and not protected for modification, the subclass is responsible to do this. Properties | Improve this Doc View Source MaxDoc Declaration public override sealed int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override sealed int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source DocFreq(Term) Declaration public override sealed int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 Overrides IndexReader.DocFreq(Term) | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override sealed void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetDocCount(String) Declaration public override sealed int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 Overrides IndexReader.GetDocCount(String) | Improve this Doc View Source GetSequentialSubReaders() Declaration protected override sealed IList<IndexReader> GetSequentialSubReaders() Returns Type Description System.Collections.Generic.IList < IndexReader > Overrides CompositeReader.GetSequentialSubReaders() | Improve this Doc View Source GetSumDocFreq(String) Declaration public override sealed long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumDocFreq(String) | Improve this Doc View Source GetSumTotalTermFreq(String) Declaration public override sealed long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumTotalTermFreq(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override sealed Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ReaderBase(Int32) Helper method for subclasses to get the docBase of the given sub-reader index. Declaration protected int ReaderBase(int readerIndex) Parameters Type Name Description System.Int32 readerIndex Returns Type Description System.Int32 | Improve this Doc View Source ReaderIndex(Int32) Helper method for subclasses to get the corresponding reader for a doc ID Declaration protected int ReaderIndex(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 | Improve this Doc View Source TotalTermFreq(Term) Declaration public override sealed long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 Overrides IndexReader.TotalTermFreq(Term) Implements System.IDisposable See Also MultiReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.BinaryDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BinaryDocValues.html",
    "title": "Class BinaryDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BinaryDocValues A per-document byte[] Inheritance System.Object BinaryDocValues SortedDocValues 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.Index Assembly : Lucene.Net.dll Syntax public abstract class BinaryDocValues Constructors | Improve this Doc View Source BinaryDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected BinaryDocValues() Methods | Improve this Doc View Source Get(Int32, BytesRef) Lookup the value for document. Declaration public abstract void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result"
  },
  "api/Lucene.Net/Lucene.Net.Index.BufferedUpdates.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BufferedUpdates.html",
    "title": "Class BufferedUpdates | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BufferedUpdates Holds buffered deletes and updates, by docID, term or query for a single segment. this is used to hold buffered pending deletes and updates against the to-be-flushed segment. Once the deletes and updates are pushed (on flush in Lucene.Net.Index.DocumentsWriter ), they are converted to a FrozenDeletes instance. NOTE: instances of this class are accessed either via a private instance on Lucene.Net.Index.DocumentsWriterPerThread , or via sync'd code by Lucene.Net.Index.DocumentsWriterDeleteQueue Inheritance System.Object BufferedUpdates 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class BufferedUpdates Fields | Improve this Doc View Source MAX_INT32 NOTE: This was MAX_INT in Lucene Declaration public static readonly int MAX_INT32 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddBinaryUpdate(DocValuesUpdate.BinaryDocValuesUpdate, Int32) Declaration public virtual void AddBinaryUpdate(DocValuesUpdate.BinaryDocValuesUpdate update, int docIDUpto) Parameters Type Name Description DocValuesUpdate.BinaryDocValuesUpdate update System.Int32 docIDUpto | Improve this Doc View Source AddDocID(Int32) Declaration public virtual void AddDocID(int docID) Parameters Type Name Description System.Int32 docID | Improve this Doc View Source AddNumericUpdate(DocValuesUpdate.NumericDocValuesUpdate, Int32) Declaration public virtual void AddNumericUpdate(DocValuesUpdate.NumericDocValuesUpdate update, int docIDUpto) Parameters Type Name Description DocValuesUpdate.NumericDocValuesUpdate update System.Int32 docIDUpto | Improve this Doc View Source AddQuery(Query, Int32) Declaration public virtual void AddQuery(Query query, int docIDUpto) Parameters Type Name Description Query query System.Int32 docIDUpto | Improve this Doc View Source AddTerm(Term, Int32) Declaration public virtual void AddTerm(Term term, int docIDUpto) Parameters Type Name Description Term term System.Int32 docIDUpto | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.ByteSliceReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ByteSliceReader.html",
    "title": "Class ByteSliceReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteSliceReader IndexInput that knows how to read the byte slices written by Posting and PostingVector. We read the bytes in each slice until we hit the end of that slice at which point we read the forwarding address of the next slice and then jump to it. Inheritance System.Object DataInput ByteSliceReader Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Index Assembly : Lucene.Net.dll Syntax public sealed class ByteSliceReader : DataInput Properties | Improve this Doc View Source BufferOffset Declaration public int BufferOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndIndex Declaration public int EndIndex { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Eof() Declaration public bool Eof() Returns Type Description System.Boolean | Improve this Doc View Source Init(ByteBlockPool, Int32, Int32) Declaration public void Init(ByteBlockPool pool, int startIndex, int endIndex) Parameters Type Name Description ByteBlockPool pool System.Int32 startIndex System.Int32 endIndex | Improve this Doc View Source NextSlice() Declaration public void NextSlice() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source WriteTo(DataOutput) Declaration public long WriteTo(DataOutput out) Parameters Type Name Description DataOutput out Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckAbort.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckAbort.html",
    "title": "Class CheckAbort | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckAbort Class for recording units of work when merging segments. Inheritance System.Object CheckAbort 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.Index Assembly : Lucene.Net.dll Syntax public class CheckAbort Constructors | Improve this Doc View Source CheckAbort(MergePolicy.OneMerge, Directory) Creates a CheckAbort instance. Declaration public CheckAbort(MergePolicy.OneMerge merge, Directory dir) Parameters Type Name Description MergePolicy.OneMerge merge Directory dir Fields | Improve this Doc View Source NONE If you use this: IW.Dispose(false) cannot abort your merge! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static readonly CheckAbort NONE Field Value Type Description CheckAbort Methods | Improve this Doc View Source Work(Double) Records the fact that roughly units amount of work have been done since this method was last called. When adding time-consuming code into Lucene.Net.Index.SegmentMerger , you should test different values for units to ensure that the time in between calls to merge.CheckAborted is up to ~ 1 second. Declaration public virtual void Work(double units) Parameters Type Name Description System.Double units"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.html",
    "title": "Class CheckIndex | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex Basic tool and API to check the health of an index and write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Please make a complete backup of your index before using this to fix your index! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex 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.Index Assembly : Lucene.Net.dll Syntax public class CheckIndex Constructors | Improve this Doc View Source CheckIndex(Directory) Create a new CheckIndex on the directory. Declaration public CheckIndex(Directory dir) Parameters Type Name Description Directory dir Properties | Improve this Doc View Source CrossCheckTermVectors If true , term vectors are compared against postings to make sure they are the same. This will likely drastically increase time it takes to run CheckIndex ! Declaration public virtual bool CrossCheckTermVectors { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source InfoStream Gets or Sets infoStream where messages should go. If null, no messages are printed. If InfoStreamIsVerbose is true then more details are printed. Declaration public virtual TextWriter InfoStream { get; set; } Property Value Type Description System.IO.TextWriter | Improve this Doc View Source InfoStreamIsVerbose If true , prints more details to the InfoStream , if set. Declaration public virtual bool InfoStreamIsVerbose { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source DoCheckIndex() Returns a CheckIndex.Status instance detailing the state of the index. As this method checks every byte in the index, on a large index it can take quite a long time to run. WARNING : make sure you only call this when the index is not opened by any writer. Declaration public virtual CheckIndex.Status DoCheckIndex() Returns Type Description CheckIndex.Status | Improve this Doc View Source DoCheckIndex(IList<String>) Returns a CheckIndex.Status instance detailing the state of the index. Declaration public virtual CheckIndex.Status DoCheckIndex(IList<string> onlySegments) Parameters Type Name Description System.Collections.Generic.IList < System.String > onlySegments list of specific segment names to check As this method checks every byte in the specified segments, on a large index it can take quite a long time to run. WARNING : make sure you only call this when the index is not opened by any writer. Returns Type Description CheckIndex.Status | Improve this Doc View Source FixIndex(CheckIndex.Status) Repairs the index using previously returned result from DoCheckIndex() . Note that this does not remove any of the unreferenced files after it's done; you must separately open an IndexWriter , which deletes unreferenced files when it's created. WARNING : this writes a new segments file into the index, effectively removing all documents in broken segments from the index. BE CAREFUL. WARNING : Make sure you only call this when the index is not opened by any writer. Declaration public virtual void FixIndex(CheckIndex.Status result) Parameters Type Name Description CheckIndex.Status result | Improve this Doc View Source FlushInfoStream() Declaration public virtual void FlushInfoStream() | Improve this Doc View Source Main(String[]) Declaration [STAThread] public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source TestDocValues(AtomicReader, TextWriter) Test docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.DocValuesStatus TestDocValues(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.DocValuesStatus | Improve this Doc View Source TestFieldNorms(AtomicReader, TextWriter) Test field norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.FieldNormStatus TestFieldNorms(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.FieldNormStatus | Improve this Doc View Source TestPostings(AtomicReader, TextWriter) Test the term index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermIndexStatus TestPostings(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TestPostings(AtomicReader, TextWriter, Boolean) Test the term index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermIndexStatus TestPostings(AtomicReader reader, TextWriter infoStream, bool verbose) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream System.Boolean verbose Returns Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TestStoredFields(AtomicReader, TextWriter) Test stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.StoredFieldStatus TestStoredFields(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.StoredFieldStatus | Improve this Doc View Source TestTermVectors(AtomicReader, TextWriter) Test term vectors. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermVectorStatus TestTermVectors(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.TermVectorStatus | Improve this Doc View Source TestTermVectors(AtomicReader, TextWriter, Boolean, Boolean) Test term vectors. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermVectorStatus TestTermVectors(AtomicReader reader, TextWriter infoStream, bool verbose, bool crossCheckTermVectors) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream System.Boolean verbose System.Boolean crossCheckTermVectors Returns Type Description CheckIndex.Status.TermVectorStatus"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.DocValuesStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.DocValuesStatus.html",
    "title": "Class CheckIndex.Status.DocValuesStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex.Status.DocValuesStatus Status from testing DocValues Inheritance System.Object CheckIndex.Status.DocValuesStatus 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.Index Assembly : Lucene.Net.dll Syntax public sealed class DocValuesStatus Properties | Improve this Doc View Source Error Exception thrown during doc values test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotalBinaryFields Total number of binary fields Declaration public long TotalBinaryFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalNumericFields Total number of numeric fields Declaration public long TotalNumericFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalSortedFields Total number of sorted fields Declaration public long TotalSortedFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalSortedSetFields Total number of sortedset fields Declaration public long TotalSortedSetFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalValueFields Total number of docValues tested. Declaration public long TotalValueFields { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.FieldNormStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.FieldNormStatus.html",
    "title": "Class CheckIndex.Status.FieldNormStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex.Status.FieldNormStatus Status from testing field norms. Inheritance System.Object CheckIndex.Status.FieldNormStatus 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.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldNormStatus Properties | Improve this Doc View Source Error Exception thrown during term index test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotFields Number of fields successfully tested Declaration public long TotFields { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.html",
    "title": "Class CheckIndex.Status | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex.Status Returned from DoCheckIndex() detailing the health and status of the index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex.Status 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.Index Assembly : Lucene.Net.dll Syntax public class Status Properties | Improve this Doc View Source CantOpenSegments True if we were unable to open the segments_N file. Declaration public bool CantOpenSegments { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Clean True if no problems were found with the index. Declaration public bool Clean { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Dir Directory index is in. Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source MaxSegmentName The greatest segment name. Declaration public int MaxSegmentName { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MissingSegments True if we were unable to locate and load the segments_N file. Declaration public bool MissingSegments { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MissingSegmentVersion True if we were unable to read the version number from segments_N file. Declaration public bool MissingSegmentVersion { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NumBadSegments How many bad segments were found. Declaration public int NumBadSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumSegments Number of segments in the index. Declaration public int NumSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Partial True if we checked only specific segments ( DoCheckIndex(IList<String>) was called with non-null argument). Declaration public bool Partial { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SegmentInfos List of CheckIndex.Status.SegmentInfoStatus instances, detailing status of each segment. Declaration public IList<CheckIndex.Status.SegmentInfoStatus> SegmentInfos { get; } Property Value Type Description System.Collections.Generic.IList < CheckIndex.Status.SegmentInfoStatus > | Improve this Doc View Source SegmentsChecked Empty unless you passed specific segments list to check as optional 3rd argument. Declaration public IList<string> SegmentsChecked { get; } Property Value Type Description System.Collections.Generic.IList < System.String > See Also DoCheckIndex(IList<String>) | Improve this Doc View Source SegmentsFileName Name of latest segments_N file in the index. Declaration public string SegmentsFileName { get; } Property Value Type Description System.String | Improve this Doc View Source ToolOutOfDate True if the index was created with a newer version of Lucene than the CheckIndex tool. Declaration public bool ToolOutOfDate { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TotLoseDocCount How many documents will be lost to bad segments. Declaration public int TotLoseDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UserData Holds the userData of the last commit in the index Declaration public IDictionary<string, string> UserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source ValidCounter Whether the Counter is greater than any of the segments' names. Declaration public bool ValidCounter { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.SegmentInfoStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.SegmentInfoStatus.html",
    "title": "Class CheckIndex.Status.SegmentInfoStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex.Status.SegmentInfoStatus Holds the status of each segment in the index. See SegmentInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex.Status.SegmentInfoStatus 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.Index Assembly : Lucene.Net.dll Syntax public class SegmentInfoStatus Properties | Improve this Doc View Source Codec Codec used to read this segment. Declaration public Codec Codec { get; } Property Value Type Description Codec | Improve this Doc View Source Compound True if segment is compound file format. Declaration public bool Compound { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DeletionsGen Current deletions generation. Declaration public long DeletionsGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Diagnostics Map that includes certain debugging details that IndexWriter records into each segment it creates Declaration public IDictionary<string, string> Diagnostics { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source DocCount Document count (does not take deletions into account). Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DocStoreCompoundFile True if the shared doc store files are compound file format. Declaration public bool DocStoreCompoundFile { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DocStoreOffset Doc store offset, if this segment shares the doc store files (stored fields and term vectors) with other segments. This is -1 if it does not share. Declaration public int DocStoreOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DocStoreSegment String of the shared doc store segment, or null if this segment does not share the doc store files. Declaration public string DocStoreSegment { get; } Property Value Type Description System.String | Improve this Doc View Source DocValuesStatus Status for testing of DocValues ( null if DocValues could not be tested). Declaration public CheckIndex.Status.DocValuesStatus DocValuesStatus { get; } Property Value Type Description CheckIndex.Status.DocValuesStatus | Improve this Doc View Source FieldNormStatus Status for testing of field norms ( null if field norms could not be tested). Declaration public CheckIndex.Status.FieldNormStatus FieldNormStatus { get; } Property Value Type Description CheckIndex.Status.FieldNormStatus | Improve this Doc View Source HasDeletions True if this segment has pending deletions. Declaration public bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Name of the segment. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumDeleted Number of deleted documents. Declaration public int NumDeleted { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumFiles Number of files referenced by this segment. Declaration public int NumFiles { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OpenReaderPassed True if we were able to open an AtomicReader on this segment. Declaration public bool OpenReaderPassed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SizeMB Net size (MB) of the files referenced by this segment. Declaration public double SizeMB { get; } Property Value Type Description System.Double | Improve this Doc View Source StoredFieldStatus Status for testing of stored fields ( null if stored fields could not be tested). Declaration public CheckIndex.Status.StoredFieldStatus StoredFieldStatus { get; } Property Value Type Description CheckIndex.Status.StoredFieldStatus | Improve this Doc View Source TermIndexStatus Status for testing of indexed terms ( null if indexed terms could not be tested). Declaration public CheckIndex.Status.TermIndexStatus TermIndexStatus { get; } Property Value Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TermVectorStatus Status for testing of term vectors ( null if term vectors could not be tested). Declaration public CheckIndex.Status.TermVectorStatus TermVectorStatus { get; } Property Value Type Description CheckIndex.Status.TermVectorStatus"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.StoredFieldStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.StoredFieldStatus.html",
    "title": "Class CheckIndex.Status.StoredFieldStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex.Status.StoredFieldStatus Status from testing stored fields. Inheritance System.Object CheckIndex.Status.StoredFieldStatus 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.Index Assembly : Lucene.Net.dll Syntax public sealed class StoredFieldStatus Properties | Improve this Doc View Source DocCount Number of documents tested. Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Error Exception thrown during stored fields test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotFields Total number of stored fields tested. Declaration public long TotFields { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermIndexStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermIndexStatus.html",
    "title": "Class CheckIndex.Status.TermIndexStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex.Status.TermIndexStatus Status from testing term index. Inheritance System.Object CheckIndex.Status.TermIndexStatus 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.Index Assembly : Lucene.Net.dll Syntax public sealed class TermIndexStatus Properties | Improve this Doc View Source BlockTreeStats Holds details of block allocations in the block tree terms dictionary (this is only set if the PostingsFormat for this segment uses block tree. Declaration public IDictionary<string, BlockTreeTermsReader.Stats> BlockTreeStats { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , BlockTreeTermsReader.Stats > | Improve this Doc View Source DelTermCount Number of terms with zero live docs docs. Declaration public long DelTermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Error Exception thrown during term index test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TermCount Number of terms with at least one live doc. Declaration public long TermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotFreq Total frequency across all terms. Declaration public long TotFreq { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotPos Total number of positions. Declaration public long TotPos { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermVectorStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermVectorStatus.html",
    "title": "Class CheckIndex.Status.TermVectorStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CheckIndex.Status.TermVectorStatus Status from testing stored fields. Inheritance System.Object CheckIndex.Status.TermVectorStatus 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.Index Assembly : Lucene.Net.dll Syntax public sealed class TermVectorStatus Properties | Improve this Doc View Source DocCount Number of documents tested. Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Error Exception thrown during term vector test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotVectors Total number of term vectors tested. Declaration public long TotVectors { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReader.html",
    "title": "Class CompositeReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompositeReader Instances of this reader type can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the AtomicReaderContext for all sub-readers via Leaves . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader implements the CompositeReader interface, it is not possible to directly get postings. Concrete subclasses of IndexReader are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader<R> Implements System.IDisposable Inherited Members IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVectors(Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDocs IndexReader.MaxDoc IndexReader.NumDeletedDocs IndexReader.Document(Int32, StoredFieldVisitor) IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey IndexReader.DocFreq(Term) IndexReader.TotalTermFreq(Term) IndexReader.GetSumDocFreq(String) IndexReader.GetDocCount(String) IndexReader.GetSumTotalTermFreq(String) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class CompositeReader : IndexReader, IDisposable Constructors | Improve this Doc View Source CompositeReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected CompositeReader() Properties | Improve this Doc View Source Context Declaration public override sealed IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext Overrides IndexReader.Context Methods | Improve this Doc View Source GetSequentialSubReaders() Expert: returns the sequential sub readers that this reader is logically composed of. This method may not return null . NOTE: In contrast to previous Lucene versions this method is no longer public, code that wants to get all AtomicReader s this composite is composed of should use Leaves . Declaration protected abstract IList<IndexReader> GetSequentialSubReaders() Returns Type Description System.Collections.Generic.IList < IndexReader > See Also Leaves | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.Builder.html",
    "title": "Class CompositeReaderContext.Builder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompositeReaderContext.Builder Inheritance System.Object CompositeReaderContext.Builder 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.Index Assembly : Lucene.Net.dll Syntax public sealed class Builder Constructors | Improve this Doc View Source Builder(CompositeReader) Declaration public Builder(CompositeReader reader) Parameters Type Name Description CompositeReader reader Methods | Improve this Doc View Source Build() Declaration public CompositeReaderContext Build() Returns Type Description CompositeReaderContext"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.html",
    "title": "Class CompositeReaderContext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompositeReaderContext IndexReaderContext for CompositeReader instance. Inheritance System.Object IndexReaderContext CompositeReaderContext Inherited Members IndexReaderContext.Parent IndexReaderContext.IsTopLevel IndexReaderContext.DocBaseInParent IndexReaderContext.OrdInParent 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.Index Assembly : Lucene.Net.dll Syntax public sealed class CompositeReaderContext : IndexReaderContext Properties | Improve this Doc View Source Children Declaration public override IList<IndexReaderContext> Children { get; } Property Value Type Description System.Collections.Generic.IList < IndexReaderContext > Overrides IndexReaderContext.Children | Improve this Doc View Source Leaves Declaration public override IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > Overrides IndexReaderContext.Leaves | Improve this Doc View Source Reader Declaration public override IndexReader Reader { get; } Property Value Type Description IndexReader Overrides IndexReaderContext.Reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.html",
    "title": "Class ConcurrentMergeScheduler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConcurrentMergeScheduler A MergeScheduler that runs each merge using a separate thread. Specify the max number of threads that may run at once, and the maximum number of simultaneous merges with SetMaxMergesAndThreads(Int32, Int32) . If the number of merges exceeds the max number of threads then the largest merges are paused until one of the smaller merges completes. If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. Inheritance System.Object MergeScheduler ConcurrentMergeScheduler Implements IConcurrentMergeScheduler IMergeScheduler System.IDisposable Inherited Members MergeScheduler.Dispose() 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.Index Assembly : Lucene.Net.dll Syntax public class ConcurrentMergeScheduler : MergeScheduler, IConcurrentMergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source ConcurrentMergeScheduler() Sole constructor, with all settings set to default values. Declaration public ConcurrentMergeScheduler() Fields | Improve this Doc View Source compareByMergeDocCount Sorts ConcurrentMergeScheduler.MergeThread s; larger merges come first. Declaration protected static readonly IComparer<ConcurrentMergeScheduler.MergeThread> compareByMergeDocCount Field Value Type Description System.Collections.Generic.IComparer < ConcurrentMergeScheduler.MergeThread > | Improve this Doc View Source DEFAULT_MAX_MERGE_COUNT Default MaxMergeCount . Declaration public const int DEFAULT_MAX_MERGE_COUNT = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_THREAD_COUNT Default MaxThreadCount . We default to 1: tests on spinning-magnet drives showed slower indexing performance if more than one merge thread runs at once (though on an SSD it was faster) Declaration public const int DEFAULT_MAX_THREAD_COUNT = 1 Field Value Type Description System.Int32 | Improve this Doc View Source m_dir Directory that holds the index. Declaration protected Directory m_dir Field Value Type Description Directory | Improve this Doc View Source m_mergeThreadCount How many ConcurrentMergeScheduler.MergeThread s have kicked off (this is use to name them). Declaration protected int m_mergeThreadCount Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeThreads List of currently active ConcurrentMergeScheduler.MergeThread s. Declaration protected IList<ConcurrentMergeScheduler.MergeThread> m_mergeThreads Field Value Type Description System.Collections.Generic.IList < ConcurrentMergeScheduler.MergeThread > | Improve this Doc View Source m_writer IndexWriter that owns this instance. Declaration protected IndexWriter m_writer Field Value Type Description IndexWriter Properties | Improve this Doc View Source IsVerbose Returns true if verbosing is enabled. This method is usually used in conjunction with Message(String) , like that: if (IsVerbose) { Message(\"your message\"); } Declaration protected virtual bool IsVerbose { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxMergeCount See SetMaxMergesAndThreads(Int32, Int32) . Declaration public virtual int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Returns Lucene.Net.Index.ConcurrentMergeScheduler.maxThreadCount . Declaration public virtual int MaxThreadCount { get; } Property Value Type Description System.Int32 See Also SetMaxMergesAndThreads(Int32, Int32) | Improve this Doc View Source MergeThreadCount Returns the number of merge threads that are alive. Note that this number is <= m_mergeThreads size. Declaration protected virtual int MergeThreadCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeThreadPriority Return the priority that merge threads run at. By default the priority is 1 plus the priority of (ie, slightly higher priority than) the first thread that calls merge. Declaration public virtual int MergeThreadPriority { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ClearSuppressExceptions() Used for testing Declaration public virtual void ClearSuppressExceptions() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source DoMerge(MergePolicy.OneMerge) Does the actual merge, by calling Merge(MergePolicy.OneMerge) Declaration protected virtual void DoMerge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source GetMergeThread(IndexWriter, MergePolicy.OneMerge) Create and return a new ConcurrentMergeScheduler.MergeThread Declaration protected virtual ConcurrentMergeScheduler.MergeThread GetMergeThread(IndexWriter writer, MergePolicy.OneMerge merge) Parameters Type Name Description IndexWriter writer MergePolicy.OneMerge merge Returns Type Description ConcurrentMergeScheduler.MergeThread | Improve this Doc View Source HandleMergeException(Exception) Called when an exception is hit in a background merge thread Declaration protected virtual void HandleMergeException(Exception exc) Parameters Type Name Description System.Exception exc | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) | Improve this Doc View Source Message(String) Outputs the given message - this method assumes IsVerbose was called and returned true . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Sets the maximum number of merge threads and simultaneous merges allowed. Declaration public virtual void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount the max # simultaneous merges that are allowed. If a merge is necessary yet we already have this many threads running, the incoming thread (that is calling add/updateDocument) will block until a merge thread has completed. Note that we will only run the smallest maxThreadCount merges at a time. System.Int32 maxThreadCount The max # simultaneous merge threads that should be running at once. This must be <= maxMergeCount | Improve this Doc View Source SetMergeThreadPriority(Int32) Set the base priority that merge threads run at. Note that CMS may increase priority of some merge threads beyond this base priority. It's best not to set this any higher than System.Threading.ThreadPriority.Highest (4)-maxThreadCount, so that CMS has room to set relative priority among threads. Declaration public virtual void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Used for testing Declaration public virtual void SetSuppressExceptions() | Improve this Doc View Source Sync() Wait for any running merge threads to finish. This call is not interruptible as used by Dispose(Boolean) . Declaration public virtual void Sync() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UpdateMergeThreads() Called whenever the running merges have changed, to pause & unpause threads. This method sorts the merge threads by their merge size in descending order and then pauses/unpauses threads from first to last -- that way, smaller merges are guaranteed to run before larger ones. Declaration protected virtual void UpdateMergeThreads() Implements IConcurrentMergeScheduler IMergeScheduler System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.html",
    "title": "Class ConcurrentMergeScheduler.MergeThread | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConcurrentMergeScheduler.MergeThread Runs a merge thread, which may run one or more merges in sequence. Inheritance System.Object J2N.Threading.ThreadJob ConcurrentMergeScheduler.MergeThread Implements System.IEquatable < J2N.Threading.ThreadJob > System.IEquatable < System.Threading.Thread > Inherited Members J2N.Threading.ThreadJob.SafeRun(System.Threading.ThreadStart) J2N.Threading.ThreadJob.Start() J2N.Threading.ThreadJob.Interrupt() J2N.Threading.ThreadJob.Join() J2N.Threading.ThreadJob.Join(System.Int64) J2N.Threading.ThreadJob.Join(System.Int64, System.Int32) J2N.Threading.ThreadJob.Resume() J2N.Threading.ThreadJob.Abort() J2N.Threading.ThreadJob.Abort(System.Object) J2N.Threading.ThreadJob.Yield() J2N.Threading.ThreadJob.Suspend() J2N.Threading.ThreadJob.Sleep(System.Int64) J2N.Threading.ThreadJob.Sleep(System.Int64, System.Int32) J2N.Threading.ThreadJob.Sleep(System.TimeSpan) J2N.Threading.ThreadJob.Interrupted() J2N.Threading.ThreadJob.Equals(System.Threading.Thread) J2N.Threading.ThreadJob.Equals(J2N.Threading.ThreadJob) J2N.Threading.ThreadJob.Equals(System.Object) J2N.Threading.ThreadJob.GetHashCode() J2N.Threading.ThreadJob.ToString() J2N.Threading.ThreadJob.SyncRoot J2N.Threading.ThreadJob.Instance J2N.Threading.ThreadJob.CurrentThread J2N.Threading.ThreadJob.Name J2N.Threading.ThreadJob.State J2N.Threading.ThreadJob.Priority J2N.Threading.ThreadJob.IsAlive J2N.Threading.ThreadJob.IsBackground J2N.Threading.ThreadJob.IsDebug System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax protected class MergeThread : ThreadJob, IEquatable<ThreadJob>, IEquatable<Thread> Constructors | Improve this Doc View Source MergeThread(ConcurrentMergeScheduler, IndexWriter, MergePolicy.OneMerge) Sole constructor. Declaration public MergeThread(ConcurrentMergeScheduler outerInstance, IndexWriter writer, MergePolicy.OneMerge startMerge) Parameters Type Name Description ConcurrentMergeScheduler outerInstance IndexWriter writer MergePolicy.OneMerge startMerge Properties | Improve this Doc View Source CurrentMerge Return the current merge, or null if this ConcurrentMergeScheduler.MergeThread is done. Declaration public virtual MergePolicy.OneMerge CurrentMerge { get; } Property Value Type Description MergePolicy.OneMerge | Improve this Doc View Source RunningMerge Record the currently running merge. Declaration public virtual MergePolicy.OneMerge RunningMerge { get; set; } Property Value Type Description MergePolicy.OneMerge Methods | Improve this Doc View Source Run() Declaration public override void Run() Overrides J2N.Threading.ThreadJob.Run() | Improve this Doc View Source SetThreadPriority(ThreadPriority) Set the priority of this thread. Declaration public virtual void SetThreadPriority(ThreadPriority priority) Parameters Type Name Description System.Threading.ThreadPriority priority Implements System.IEquatable<T> System.IEquatable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Index.CorruptIndexException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CorruptIndexException.html",
    "title": "Class CorruptIndexException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CorruptIndexException This exception is thrown when Lucene detects an inconsistency in the index. Inheritance System.Object System.Exception System.SystemException System.IO.IOException CorruptIndexException IndexFormatTooNewException IndexFormatTooOldException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CorruptIndexException : IOException, ISerializable Constructors | Improve this Doc View Source CorruptIndexException(String) Constructor. Declaration public CorruptIndexException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source CorruptIndexException(String, Exception) Constructor. Declaration public CorruptIndexException(string message, Exception ex) Parameters Type Name Description System.String message System.Exception ex Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DirectoryReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DirectoryReader.html",
    "title": "Class DirectoryReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DirectoryReader DirectoryReader is an implementation of CompositeReader that can read indexes in a Directory . DirectoryReader instances are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < AtomicReader > DirectoryReader FilterDirectoryReader Implements System.IDisposable Inherited Members BaseCompositeReader<AtomicReader>.GetTermVectors(Int32) BaseCompositeReader<AtomicReader>.NumDocs BaseCompositeReader<AtomicReader>.MaxDoc BaseCompositeReader<AtomicReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<AtomicReader>.DocFreq(Term) BaseCompositeReader<AtomicReader>.TotalTermFreq(Term) BaseCompositeReader<AtomicReader>.GetSumDocFreq(String) BaseCompositeReader<AtomicReader>.GetDocCount(String) BaseCompositeReader<AtomicReader>.GetSumTotalTermFreq(String) BaseCompositeReader<AtomicReader>.ReaderIndex(Int32) BaseCompositeReader<AtomicReader>.ReaderBase(Int32) BaseCompositeReader<AtomicReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DirectoryReader : BaseCompositeReader<AtomicReader>, IDisposable Constructors | Improve this Doc View Source DirectoryReader(Directory, AtomicReader[]) Expert: Constructs a DirectoryReader on the given segmentReaders . Declaration protected DirectoryReader(Directory directory, AtomicReader[] segmentReaders) Parameters Type Name Description Directory directory AtomicReader [] segmentReaders the wrapped atomic index segment readers. This array is returned by GetSequentialSubReaders() and used to resolve the correct subreader for docID-based methods. Please note: this array is not cloned and not protected for modification outside of this reader. Subclasses of DirectoryReader should take care to not allow modification of this internal array, e.g. DoOpenIfChanged() . Fields | Improve this Doc View Source DEFAULT_TERMS_INDEX_DIVISOR Default termInfosIndexDivisor. Declaration public static readonly int DEFAULT_TERMS_INDEX_DIVISOR Field Value Type Description System.Int32 | Improve this Doc View Source m_directory The index directory. Declaration protected readonly Directory m_directory Field Value Type Description Directory Properties | Improve this Doc View Source Directory Returns the directory this index resides in. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source IndexCommit Expert: return the IndexCommit that this reader has opened. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit | Improve this Doc View Source Version Version number when this IndexReader was opened. This method returns the version recorded in the commit that the reader opened. This version is advanced every time a change is made with IndexWriter . Declaration public abstract long Version { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source DoOpenIfChanged() Implement this method to support OpenIfChanged(DirectoryReader) . If this reader does not support reopen, return null , so client code is happy. This should be consistent with IsCurrent() (should always return true ) if reopen is not supported. Declaration protected abstract DirectoryReader DoOpenIfChanged() Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DoOpenIfChanged(IndexCommit) Implement this method to support OpenIfChanged(DirectoryReader, IndexCommit) . If this reader does not support reopen from a specific IndexCommit , throw System.NotSupportedException . Declaration protected abstract DirectoryReader DoOpenIfChanged(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DoOpenIfChanged(IndexWriter, Boolean) Implement this method to support OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . If this reader does not support reopen from IndexWriter , throw System.NotSupportedException . Declaration protected abstract DirectoryReader DoOpenIfChanged(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer System.Boolean applyAllDeletes Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source IndexExists(Directory) Returns true if an index likely exists at the specified directory. Note that if a corrupt index exists, or if an index in the process of committing Declaration public static bool IndexExists(Directory directory) Parameters Type Name Description Directory directory the directory to check for an index Returns Type Description System.Boolean true if an index exists; false otherwise | Improve this Doc View Source IsCurrent() Check whether any new changes have occurred to the index since this reader was opened. If this reader was created by calling an overload of Open(Directory) , then this method checks if any further commits (see Commit() ) have occurred in the directory. If instead this reader is a near real-time reader (ie, obtained by a call to Open(IndexWriter, Boolean) , or by calling an overload of OpenIfChanged(DirectoryReader) on a near real-time reader), then this method checks if either a new commit has occurred, or any new uncommitted changes have taken place via the writer. Note that even if the writer has only performed merging, this method will still return false . In any event, if this returns false , you should call an overload of OpenIfChanged(DirectoryReader) to get a new reader that sees the changes. Declaration public abstract bool IsCurrent() Returns Type Description System.Boolean Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source ListCommits(Directory) Returns all commit points that exist in the Directory . Normally, because the default is KeepOnlyLastCommitDeletionPolicy , there would be only one commit point. But if you're using a custom IndexDeletionPolicy then there could be many commits. Once you have a given commit, you can open a reader on it by calling Open(IndexCommit) There must be at least one commit in the Directory , else this method throws IndexNotFoundException . Note that if a commit is in progress while this method is running, that commit may or may not be returned. Declaration public static IList<IndexCommit> ListCommits(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.Collections.Generic.IList < IndexCommit > a sorted list of IndexCommit s, from oldest to latest. | Improve this Doc View Source Open(IndexCommit) Expert: returns an IndexReader reading the index in the given IndexCommit . Declaration public static DirectoryReader Open(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit point to open Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexCommit, Int32) Expert: returns an IndexReader reading the index in the given IndexCommit and termInfosIndexDivisor . Declaration public static DirectoryReader Open(IndexCommit commit, int termInfosIndexDivisor) Parameters Type Name Description IndexCommit commit the commit point to open System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as setting TermIndexInterval (on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N, then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexWriter, Boolean) Open a near real time IndexReader from the IndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static DirectoryReader Open(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the returned reader. If false , the deletes are not applied but remain buffered (in IndexWriter) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . Returns Type Description DirectoryReader The new IndexReader Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also OpenIfChanged(DirectoryReader, IndexWriter, Boolean) | Improve this Doc View Source Open(Directory) Returns a IndexReader reading the index in the given Directory Declaration public static DirectoryReader Open(Directory directory) Parameters Type Name Description Directory directory the index directory Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(Directory, Int32) Expert: Returns a IndexReader reading the index in the given Directory with the given termInfosIndexDivisor. Declaration public static DirectoryReader Open(Directory directory, int termInfosIndexDivisor) Parameters Type Name Description Directory directory the index directory System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as setting TermIndexInterval (on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N, then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source OpenIfChanged(DirectoryReader) If the index has changed since the provided reader was opened, open and return a new reader; else, return null . The new reader, if not null , will be the same type of reader as the previous one, ie a near-real-time (NRT) reader will open a new NRT reader, a MultiReader will open a new MultiReader , etc. This method is typically far less costly than opening a fully new DirectoryReader as it shares resources (for example sub-readers) with the provided DirectoryReader , when possible. The provided reader is not disposed (you are responsible for doing so); if a new reader is returned you also must eventually dispose it. Be sure to never dispose a reader while other threads are still using it; see SearcherManager to simplify managing this. Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader) Parameters Type Name Description DirectoryReader oldReader Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance which you must eventually dispose Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source OpenIfChanged(DirectoryReader, IndexCommit) If the IndexCommit differs from what the provided reader is searching, open and return a new reader; else, return null . Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader, IndexCommit commit) Parameters Type Name Description DirectoryReader oldReader IndexCommit commit Returns Type Description DirectoryReader See Also OpenIfChanged(DirectoryReader) | Improve this Doc View Source OpenIfChanged(DirectoryReader, IndexWriter, Boolean) Expert: If there changes (committed or not) in the IndexWriter versus what the provided reader is searching, then open and return a new IndexReader searching both committed and uncommitted changes from the writer; else, return null (though, the current implementation never returns null ). This provides \"near real-time\" searching, in that changes made during an IndexWriter session can be quickly made available for searching without closing the writer nor calling Commit() . It's near real-time because there is no hard guarantee on how quickly you can get a new reader after making changes with IndexWriter . You'll have to experiment in your situation to determine if it's fast enough. As this is a new and experimental feature, please report back on your findings so we can learn, improve and iterate. The very first time this method is called, this writer instance will make every effort to pool the readers that it opens for doing merges, applying deletes, etc. This means additional resources (RAM, file descriptors, CPU time) will be consumed. For lower latency on reopening a reader, you should call MergedSegmentWarmer (on IndexWriterConfig ) to pre-warm a newly merged segment before it's committed to the index. This is important for minimizing index-to-search delay after a large merge. If an AddIndexes* call is running in another thread, then this reader will only search those segments from the foreign index that have been successfully copied over, so far. NOTE : Once the writer is disposed, any outstanding readers may continue to be used. However, if you attempt to reopen any of those readers, you'll hit an System.ObjectDisposedException . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader, IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description DirectoryReader oldReader IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the returned reader. If false , the deletes are not applied but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . Returns Type Description DirectoryReader DirectoryReader that covers entire index plus all changes made so far by this IndexWriter instance, or null if there are no new changes Exceptions Type Condition System.IO.IOException if there is a low-level IO error Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsEnum.html",
    "title": "Class DocsAndPositionsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocsAndPositionsEnum Also iterates through positions. Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MappingMultiDocsAndPositionsEnum FilterAtomicReader.FilterDocsAndPositionsEnum MultiDocsAndPositionsEnum Inherited Members DocsEnum.Freq DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() 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.Index Assembly : Lucene.Net.dll Syntax public abstract class DocsAndPositionsEnum : DocsEnum Constructors | Improve this Doc View Source DocsAndPositionsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocsAndPositionsEnum() Properties | Improve this Doc View Source EndOffset Returns end offset for the current position, or -1 if offsets were not indexed. Declaration public abstract int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Returns start offset for the current position, or -1 if offsets were not indexed. Declaration public abstract int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetPayload() Returns the payload at this position, or null if no payload was indexed. You should not modify anything (neither members of the returned BytesRef nor bytes in the byte[] ). Declaration public abstract BytesRef GetPayload() Returns Type Description BytesRef | Improve this Doc View Source NextPosition() Returns the next position. You should only call this up to Freq times else the behavior is not defined. If positions were not indexed this will return -1; this only happens if offsets were indexed and you passed needsOffset=true when pulling the enum. Declaration public abstract int NextPosition() Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsFlags.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsFlags.html",
    "title": "Enum DocsAndPositionsFlags | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum DocsAndPositionsFlags Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax [Flags] public enum DocsAndPositionsFlags Fields Name Description NONE Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require that no offsets and payloads will be returned. OFFSETS Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require offsets in the returned enum. PAYLOADS Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require payloads in the returned enum."
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsEnum.html",
    "title": "Class DocsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocsEnum Iterates through the documents and term freqs. NOTE: you must first call NextDoc() before using any of the per-doc methods. Inheritance System.Object DocIdSetIterator DocsEnum MappingMultiDocsEnum DocsAndPositionsEnum FilterAtomicReader.FilterDocsEnum MultiDocsEnum Scorer Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() 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.Index Assembly : Lucene.Net.dll Syntax public abstract class DocsEnum : DocIdSetIterator Constructors | Improve this Doc View Source DocsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocsEnum() Properties | Improve this Doc View Source Attributes Returns the related attributes. Declaration public virtual AttributeSource Attributes { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Freq Returns term frequency in the current document, or 1 if the field was indexed with DOCS_ONLY . Do not call this before NextDoc() is first called, nor after NextDoc() returns NO_MORE_DOCS . NOTE: if the DocsEnum was obtain with NONE , the result of this method is undefined. Declaration public abstract int Freq { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsFlags.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsFlags.html",
    "title": "Enum DocsFlags | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum DocsFlags Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax [Flags] public enum DocsFlags Fields Name Description FREQS Flag to pass to Docs(IBits, DocsEnum, DocsFlags) if you require term frequencies in the returned enum. NONE Flag to pass to Docs(IBits, DocsEnum, DocsFlags) if you don't require term frequencies in the returned enum."
  },
  "api/Lucene.Net/Lucene.Net.Index.DocTermOrds.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocTermOrds.html",
    "title": "Class DocTermOrds | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocTermOrds This class enables fast access to multiple term ords for a specified field across all docIDs. Like IFieldCache , it uninverts the index and holds a packed data structure in RAM to enable fast access. Unlike IFieldCache , it can handle multi-valued fields, and, it does not hold the term bytes in RAM. Rather, you must obtain a TermsEnum from the GetOrdTermsEnum(AtomicReader) method, and then seek-by-ord to get the term's bytes. While normally term ords are type System.Int64 , in this API they are System.Int32 as the internal representation here cannot address more than MAX_INT32 unique terms. Also, typically this class is used on fields with relatively few unique terms vs the number of documents. In addition, there is an internal limit (16 MB) on how many bytes each chunk of documents may consume. If you trip this limit you'll hit an System.InvalidOperationException . Deleted documents are skipped during uninversion, and if you look them up you'll get 0 ords. The returned per-document ords do not retain their original order in the document. Instead they are returned in sorted (by ord, ie term's BytesRef comparer) order. They are also de-dup'd (ie if doc has same term more than once in this field, you'll only get that ord back once). This class tests whether the provided reader is able to retrieve terms by ord (ie, it's single segment, and it uses an ord-capable terms index). If not, this class will create its own term index internally, allowing to create a wrapped TermsEnum that can handle ord. The GetOrdTermsEnum(AtomicReader) method then provides this wrapped enum, if necessary. The RAM consumption of this class can be high! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocTermOrds 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.Index Assembly : Lucene.Net.dll Syntax public class DocTermOrds Remarks Final form of the un-inverted field: Each document points to a list of term numbers that are contained in that document. Term numbers are in sorted order, and are encoded as variable-length deltas from the previous term number. Real term numbers start at 2 since 0 and 1 are reserved. A term number of 0 signals the end of the termNumber list. There is a single int[maxDoc()] which either contains a pointer into a byte[] for the termNumber lists, or directly contains the termNumber list if it fits in the 4 bytes of an integer. If the first byte in the integer is 1, the next 3 bytes are a pointer into a byte[] where the termNumber list starts. There are actually 256 byte arrays, to compensate for the fact that the pointers into the byte arrays are only 3 bytes long. The correct byte array for a document is a function of it's id. To save space and speed up faceting, any term that matches enough documents will not be un-inverted... it will be skipped while building the un-inverted field structure, and will use a set intersection method during faceting. To further save memory, the terms (the actual string values) are not all stored in memory, but a TermIndex is used to convert term numbers to term values only for the terms needed after faceting has completed. Only every 128th term value is stored, along with it's corresponding term number, and this is used as an index to find the closest term and iterate until the desired number is hit (very much like Lucene's own internal term index). Constructors | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String) Inverts all terms Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef) Inverts only terms starting w/ prefix Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef, Int32) Inverts only terms starting w/ prefix, and only terms whose docFreq (not taking deletions into account) is <= maxTermDocFreq Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix, int maxTermDocFreq) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix System.Int32 maxTermDocFreq | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef, Int32, Int32) Inverts only terms starting w/ prefix, and only terms whose docFreq (not taking deletions into account) is <= maxTermDocFreq , with a custom indexing interval (default is every 128nd term). Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix, int maxTermDocFreq, int indexIntervalBits) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix System.Int32 maxTermDocFreq System.Int32 indexIntervalBits | Improve this Doc View Source DocTermOrds(String, Int32, Int32) Subclass inits w/ this, but be sure you then call uninvert, only once Declaration protected DocTermOrds(string field, int maxTermDocFreq, int indexIntervalBits) Parameters Type Name Description System.String field System.Int32 maxTermDocFreq System.Int32 indexIntervalBits Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL_BITS Every 128th term is indexed, by default. Declaration public static readonly int DEFAULT_INDEX_INTERVAL_BITS Field Value Type Description System.Int32 | Improve this Doc View Source m_docsEnum Used while uninverting. Declaration protected DocsEnum m_docsEnum Field Value Type Description DocsEnum | Improve this Doc View Source m_field Field we are uninverting. Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_index Holds the per-document ords or a pointer to the ords. Declaration protected int[] m_index Field Value Type Description System.Int32 [] | Improve this Doc View Source m_indexedTermsArray Holds the indexed (by default every 128th) terms. Declaration protected BytesRef[] m_indexedTermsArray Field Value Type Description BytesRef [] | Improve this Doc View Source m_maxTermDocFreq Don't uninvert terms that exceed this count. Declaration protected readonly int m_maxTermDocFreq Field Value Type Description System.Int32 | Improve this Doc View Source m_numTermsInField Number of terms in the field. Declaration protected int m_numTermsInField Field Value Type Description System.Int32 | Improve this Doc View Source m_ordBase Ordinal of the first term in the field, or 0 if the PostingsFormat does not implement Ord . Declaration protected int m_ordBase Field Value Type Description System.Int32 | Improve this Doc View Source m_phase1_time Time for phase1 of the uninvert process. Declaration protected int m_phase1_time Field Value Type Description System.Int32 | Improve this Doc View Source m_prefix If non-null, only terms matching this prefix were indexed. Declaration protected BytesRef m_prefix Field Value Type Description BytesRef | Improve this Doc View Source m_sizeOfIndexedStrings Total bytes (sum of term lengths) for all indexed terms. Declaration protected long m_sizeOfIndexedStrings Field Value Type Description System.Int64 | Improve this Doc View Source m_termInstances Total number of references to term numbers. Declaration protected long m_termInstances Field Value Type Description System.Int64 | Improve this Doc View Source m_tnums Holds term ords for documents. Declaration [CLSCompliant(false)] protected sbyte[][] m_tnums Field Value Type Description System.SByte [][] | Improve this Doc View Source m_total_time Total time to uninvert the field. Declaration protected int m_total_time Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsEmpty Returns true if no terms were indexed. Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NumTerms Returns the number of terms in this field Declaration public virtual int NumTerms { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetIterator(AtomicReader) Returns a SortedSetDocValues view of this instance Declaration public virtual SortedSetDocValues GetIterator(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description SortedSetDocValues | Improve this Doc View Source GetOrdTermsEnum(AtomicReader) Returns a TermsEnum that implements Ord . If the provided reader supports Ord , we just return its TermsEnum ; if it does not, we build a \"private\" terms index internally (WARNING: consumes RAM) and use that index to implement Ord . This also enables Ord on top of a composite reader. The returned TermsEnum is unpositioned. This returns null if there are no terms. NOTE : you must pass the same reader that was used when creating this class Declaration public virtual TermsEnum GetOrdTermsEnum(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description TermsEnum | Improve this Doc View Source LookupTerm(TermsEnum, Int32) Returns the term ( BytesRef ) corresponding to the provided ordinal. Declaration public virtual BytesRef LookupTerm(TermsEnum termsEnum, int ord) Parameters Type Name Description TermsEnum termsEnum System.Int32 ord Returns Type Description BytesRef | Improve this Doc View Source RamUsedInBytes() Returns total bytes used. Declaration public virtual long RamUsedInBytes() Returns Type Description System.Int64 | Improve this Doc View Source SetActualDocFreq(Int32, Int32) Invoked during Uninvert(AtomicReader, IBits, BytesRef) to record the document frequency for each uninverted term. Declaration protected virtual void SetActualDocFreq(int termNum, int df) Parameters Type Name Description System.Int32 termNum System.Int32 df | Improve this Doc View Source Uninvert(AtomicReader, IBits, BytesRef) Call this only once (if you subclass!) Declaration protected virtual void Uninvert(AtomicReader reader, IBits liveDocs, BytesRef termPrefix) Parameters Type Name Description AtomicReader reader IBits liveDocs BytesRef termPrefix | Improve this Doc View Source VisitTerm(TermsEnum, Int32) Subclass can override this Declaration protected virtual void VisitTerm(TermsEnum te, int termNum) Parameters Type Name Description TermsEnum te System.Int32 termNum"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValues.html",
    "title": "Class DocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValues This class contains utility methods and constants for DocValues Inheritance System.Object DocValues 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.Index Assembly : Lucene.Net.dll Syntax public sealed class DocValues Fields | Improve this Doc View Source EMPTY_BINARY An empty BinaryDocValues which returns EMPTY_BYTES for every document Declaration public static readonly BinaryDocValues EMPTY_BINARY Field Value Type Description BinaryDocValues | Improve this Doc View Source EMPTY_NUMERIC An empty NumericDocValues which returns zero for every document Declaration public static readonly NumericDocValues EMPTY_NUMERIC Field Value Type Description NumericDocValues | Improve this Doc View Source EMPTY_SORTED An empty SortedDocValues which returns EMPTY_BYTES for every document Declaration public static readonly SortedDocValues EMPTY_SORTED Field Value Type Description SortedDocValues | Improve this Doc View Source EMPTY_SORTED_SET An empty SortedDocValues which returns NO_MORE_ORDS for every document Declaration public static readonly SortedSetDocValues EMPTY_SORTED_SET Field Value Type Description SortedSetDocValues Methods | Improve this Doc View Source DocsWithValue(SortedDocValues, Int32) Returns a IBits representing all documents from dv that have a value. Declaration public static IBits DocsWithValue(SortedDocValues dv, int maxDoc) Parameters Type Name Description SortedDocValues dv System.Int32 maxDoc Returns Type Description IBits | Improve this Doc View Source DocsWithValue(SortedSetDocValues, Int32) Returns a IBits representing all documents from dv that have a value. Declaration public static IBits DocsWithValue(SortedSetDocValues dv, int maxDoc) Parameters Type Name Description SortedSetDocValues dv System.Int32 maxDoc Returns Type Description IBits | Improve this Doc View Source Singleton(SortedDocValues) Returns a multi-valued view over the provided SortedDocValues Declaration public static SortedSetDocValues Singleton(SortedDocValues dv) Parameters Type Name Description SortedDocValues dv Returns Type Description SortedSetDocValues | Improve this Doc View Source UnwrapSingleton(SortedSetDocValues) Returns a single-valued view of the SortedSetDocValues , if it was previously wrapped with Singleton(SortedDocValues) , or null . Declaration public static SortedDocValues UnwrapSingleton(SortedSetDocValues dv) Parameters Type Name Description SortedSetDocValues dv Returns Type Description SortedDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesFieldUpdatesType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesFieldUpdatesType.html",
    "title": "Enum DocValuesFieldUpdatesType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum DocValuesFieldUpdatesType Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocValuesFieldUpdatesType Fields Name Description BINARY NUMERIC"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesType.html",
    "title": "Enum DocValuesType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum DocValuesType DocValues types. Note that DocValues is strongly typed, so a field cannot have different types across different documents. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocValuesType Fields Name Description BINARY A per-document byte[] . Values may be larger than 32766 bytes, but different codecs may enforce their own limits. NONE No doc values type will be used. NOTE: This is the same as setting to null in Lucene NUMERIC A per-document numeric type SORTED A pre-sorted byte[] . Fields with this type only store distinct byte values and store an additional offset pointer per document to dereference the shared byte[]. The stored byte[] is presorted and allows access via document id, ordinal and by-value. Values must be <= 32766 bytes. SORTED_SET A pre-sorted ISet<byte[]>. Fields with this type only store distinct byte values and store additional offset pointers per document to dereference the shared byte[] s. The stored byte[] is presorted and allows access via document id, ordinal and by-value. Values must be <= 32766 bytes."
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.BinaryDocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.BinaryDocValuesUpdate.html",
    "title": "Class DocValuesUpdate.BinaryDocValuesUpdate | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValuesUpdate.BinaryDocValuesUpdate An in-place update to a binary DocValues field Inheritance System.Object DocValuesUpdate DocValuesUpdate.BinaryDocValuesUpdate Inherited Members DocValuesUpdate.ToString() 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.Index Assembly : Lucene.Net.dll Syntax public sealed class BinaryDocValuesUpdate : DocValuesUpdate"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.html",
    "title": "Class DocValuesUpdate | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValuesUpdate An in-place update to a DocValues field. Inheritance System.Object DocValuesUpdate DocValuesUpdate.BinaryDocValuesUpdate DocValuesUpdate.NumericDocValuesUpdate 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocValuesUpdate Constructors | Improve this Doc View Source DocValuesUpdate(DocValuesFieldUpdatesType, Term, String, Object) Constructor. Declaration protected DocValuesUpdate(DocValuesFieldUpdatesType type, Term term, string field, object value) Parameters Type Name Description DocValuesFieldUpdatesType type the DocValuesFieldUpdatesType Term term the Term which determines the documents that will be updated System.String field the NumericDocValuesField to update System.Object value the updated value Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.NumericDocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.NumericDocValuesUpdate.html",
    "title": "Class DocValuesUpdate.NumericDocValuesUpdate | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocValuesUpdate.NumericDocValuesUpdate An in-place update to a numeric DocValues field Inheritance System.Object DocValuesUpdate DocValuesUpdate.NumericDocValuesUpdate Inherited Members DocValuesUpdate.ToString() 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.Index Assembly : Lucene.Net.dll Syntax public sealed class NumericDocValuesUpdate : DocValuesUpdate Constructors | Improve this Doc View Source NumericDocValuesUpdate(Term, String, Nullable<Int64>) Declaration public NumericDocValuesUpdate(Term term, string field, long? value) Parameters Type Name Description Term term System.String field System.Nullable < System.Int64 > value"
  },
  "api/Lucene.Net/Lucene.Net.Index.Extensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Extensions.html",
    "title": "Namespace Lucene.Net.Index.Extensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Extensions Classes IndexWriterConfigExtensions Extension methods that can be used to provide similar IndexWriterConfig syntax as Java Lucene. (config.SetCheckIntegrityAtMerge(100).SetMaxBufferedDocs(1000);)"
  },
  "api/Lucene.Net/Lucene.Net.Index.Extensions.IndexWriterConfigExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Extensions.IndexWriterConfigExtensions.html",
    "title": "Class IndexWriterConfigExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexWriterConfigExtensions Extension methods that can be used to provide similar IndexWriterConfig syntax as Java Lucene. (config.SetCheckIntegrityAtMerge(100).SetMaxBufferedDocs(1000);) Inheritance System.Object IndexWriterConfigExtensions 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.Index.Extensions Assembly : Lucene.Net.dll Syntax public static class IndexWriterConfigExtensions Methods | Improve this Doc View Source SetCheckIntegrityAtMerge(IndexWriterConfig, Boolean) Builder method for CheckIntegrityAtMerge . Declaration public static IndexWriterConfig SetCheckIntegrityAtMerge(this IndexWriterConfig config, bool checkIntegrityAtMerge) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean checkIntegrityAtMerge Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean) Builder method for CheckIntegrityAtMerge . Declaration public static LiveIndexWriterConfig SetCheckIntegrityAtMerge(this LiveIndexWriterConfig config, bool checkIntegrityAtMerge) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Boolean checkIntegrityAtMerge Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetCodec(IndexWriterConfig, Codec) Builder method for Codec . Declaration public static IndexWriterConfig SetCodec(this IndexWriterConfig config, Codec codec) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance Codec codec Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetDefaultWriteLockTimeout(IndexWriterConfig, Int64) Builder method for DefaultWriteLockTimeout . Declaration public static void SetDefaultWriteLockTimeout(this IndexWriterConfig config, long writeLockTimeout) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int64 writeLockTimeout | Improve this Doc View Source SetIndexCommit(IndexWriterConfig, IndexCommit) Builder method for IndexCommit . Declaration public static IndexWriterConfig SetIndexCommit(this IndexWriterConfig config, IndexCommit commit) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexCommit commit Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetIndexDeletionPolicy(IndexWriterConfig, IndexDeletionPolicy) Builder method for IndexDeletionPolicy . Declaration public static IndexWriterConfig SetIndexDeletionPolicy(this IndexWriterConfig config, IndexDeletionPolicy deletionPolicy) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexDeletionPolicy deletionPolicy Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDeleteTerms(IndexWriterConfig, Int32) Builder method for MaxBufferedDeleteTerms . Declaration public static IndexWriterConfig SetMaxBufferedDeleteTerms(this IndexWriterConfig config, int maxBufferedDeleteTerms) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxBufferedDeleteTerms Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) Builder method for MaxBufferedDeleteTerms . Declaration public static LiveIndexWriterConfig SetMaxBufferedDeleteTerms(this LiveIndexWriterConfig config, int maxBufferedDeleteTerms) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 maxBufferedDeleteTerms Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDocs(IndexWriterConfig, Int32) Builder method for MaxBufferedDocs . Declaration public static IndexWriterConfig SetMaxBufferedDocs(this IndexWriterConfig config, int maxBufferedDocs) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxBufferedDocs Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) Builder method for MaxBufferedDocs . Declaration public static LiveIndexWriterConfig SetMaxBufferedDocs(this LiveIndexWriterConfig config, int maxBufferedDocs) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 maxBufferedDocs Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMaxThreadStates(IndexWriterConfig, Int32) Builder method for MaxThreadStates . Declaration public static IndexWriterConfig SetMaxThreadStates(this IndexWriterConfig config, int maxThreadStates) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxThreadStates Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergedSegmentWarmer(IndexWriterConfig, IndexWriter.IndexReaderWarmer) Builder method for MergedSegmentWarmer . Declaration public static IndexWriterConfig SetMergedSegmentWarmer(this IndexWriterConfig config, IndexWriter.IndexReaderWarmer mergeSegmentWarmer) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexWriter.IndexReaderWarmer mergeSegmentWarmer Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) Builder method for MergedSegmentWarmer . Declaration public static LiveIndexWriterConfig SetMergedSegmentWarmer(this LiveIndexWriterConfig config, IndexWriter.IndexReaderWarmer mergeSegmentWarmer) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance IndexWriter.IndexReaderWarmer mergeSegmentWarmer Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMergePolicy(IndexWriterConfig, MergePolicy) Builder method for MergePolicy . Declaration public static IndexWriterConfig SetMergePolicy(this IndexWriterConfig config, MergePolicy mergePolicy) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance MergePolicy mergePolicy Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergeScheduler(IndexWriterConfig, IMergeScheduler) Builder method for MergeScheduler . Declaration public static IndexWriterConfig SetMergeScheduler(this IndexWriterConfig config, IMergeScheduler mergeScheduler) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IMergeScheduler mergeScheduler Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetOpenMode(IndexWriterConfig, OpenMode) Builder method for OpenMode . Declaration public static IndexWriterConfig SetOpenMode(this IndexWriterConfig config, OpenMode openMode) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance OpenMode openMode Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetRAMBufferSizeMB(IndexWriterConfig, Double) Builder method for RAMBufferSizeMB . Declaration public static IndexWriterConfig SetRAMBufferSizeMB(this IndexWriterConfig config, double ramBufferSizeMB) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Double ramBufferSizeMB Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) Builder method for RAMBufferSizeMB . Declaration public static LiveIndexWriterConfig SetRAMBufferSizeMB(this LiveIndexWriterConfig config, double ramBufferSizeMB) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Double ramBufferSizeMB Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetRAMPerThreadHardLimitMB(IndexWriterConfig, Int32) Builder method for RAMPerThreadHardLimitMB . Declaration public static IndexWriterConfig SetRAMPerThreadHardLimitMB(this IndexWriterConfig config, int perThreadHardLimitMB) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 perThreadHardLimitMB Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderPooling(IndexWriterConfig, Boolean) Builder method for UseReaderPooling . Declaration public static IndexWriterConfig SetReaderPooling(this IndexWriterConfig config, bool readerPooling) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean readerPooling Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderTermsIndexDivisor(IndexWriterConfig, Int32) Builder method for ReaderTermsIndexDivisor . Declaration public static IndexWriterConfig SetReaderTermsIndexDivisor(this IndexWriterConfig config, int divisor) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 divisor Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) Builder method for ReaderTermsIndexDivisor . Declaration public static LiveIndexWriterConfig SetReaderTermsIndexDivisor(this LiveIndexWriterConfig config, int divisor) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 divisor Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetSimilarity(IndexWriterConfig, Similarity) Builder method for Similarity . Declaration public static IndexWriterConfig SetSimilarity(this IndexWriterConfig config, Similarity similarity) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance Similarity similarity Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetTermIndexInterval(IndexWriterConfig, Int32) Builder method for TermIndexInterval . Declaration public static IndexWriterConfig SetTermIndexInterval(this IndexWriterConfig config, int interval) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 interval Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetTermIndexInterval(LiveIndexWriterConfig, Int32) Builder method for TermIndexInterval . Declaration public static LiveIndexWriterConfig SetTermIndexInterval(this LiveIndexWriterConfig config, int interval) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 interval Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetUseCompoundFile(IndexWriterConfig, Boolean) Builder method for UseCompoundFile . Declaration public static IndexWriterConfig SetUseCompoundFile(this IndexWriterConfig config, bool useCompoundFile) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean useCompoundFile Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetUseCompoundFile(LiveIndexWriterConfig, Boolean) Builder method for UseCompoundFile . Declaration public static LiveIndexWriterConfig SetUseCompoundFile(this LiveIndexWriterConfig config, bool useCompoundFile) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Boolean useCompoundFile Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetWriteLockTimeout(IndexWriterConfig, Int64) Builder method for WriteLockTimeout . Declaration public static IndexWriterConfig SetWriteLockTimeout(this IndexWriterConfig config, long writeLockTimeout) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int64 writeLockTimeout Returns Type Description IndexWriterConfig this IndexWriterConfig instance"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInfo.html",
    "title": "Class FieldInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldInfo Access to the Field Info file that describes document fields and whether or not they are indexed. Each segment has a separate Field Info file. Objects of this class are thread-safe for multiple readers, but only one thread can be adding documents at a time, with no other reader or writer threads accessing this object. Inheritance System.Object FieldInfo 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.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldInfo Constructors | Improve this Doc View Source FieldInfo(String, Boolean, Int32, Boolean, Boolean, Boolean, IndexOptions, DocValuesType, DocValuesType, IDictionary<String, String>) Sole Constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public FieldInfo(string name, bool indexed, int number, bool storeTermVector, bool omitNorms, bool storePayloads, IndexOptions indexOptions, DocValuesType docValues, DocValuesType normsType, IDictionary<string, string> attributes) Parameters Type Name Description System.String name System.Boolean indexed System.Int32 number System.Boolean storeTermVector System.Boolean omitNorms System.Boolean storePayloads IndexOptions indexOptions DocValuesType docValues DocValuesType normsType System.Collections.Generic.IDictionary < System.String , System.String > attributes Properties | Improve this Doc View Source Attributes Returns internal codec attributes map. May be null if no mappings exist. Declaration public IDictionary<string, string> Attributes { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source DocValuesGen Gets or Sets the docValues generation of this field, or -1 if no docValues. Declaration public long DocValuesGen { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source DocValuesType Declaration public DocValuesType DocValuesType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source HasDocValues Returns true if this field has any docValues. Declaration public bool HasDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasNorms Returns true if this field actually has any norms. Declaration public bool HasNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if any payloads exist for this field. Declaration public bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasVectors Returns true if any term vectors exist for this field. Declaration public bool HasVectors { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexOptions Returns IndexOptions for the field, or null if the field is not indexed Declaration public IndexOptions IndexOptions { get; } Property Value Type Description IndexOptions | Improve this Doc View Source IsIndexed Returns true if this field is indexed. Declaration public bool IsIndexed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Field's name Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NormType Returns DocValuesType of the norm. This may be NONE if the field has no norms. Declaration public DocValuesType NormType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source Number Internal field number Declaration public int Number { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OmitsNorms Returns true if norms are explicitly omitted for this field Declaration public bool OmitsNorms { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetAttribute(String) Get a codec attribute value, or null if it does not exist Declaration public string GetAttribute(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source PutAttribute(String, String) Puts a codec attribute value. this is a key-value mapping for the field that the codec can use to store additional metadata, and will be available to the codec when reading the segment via GetAttribute(String) If a value already exists for the field, it will be replaced with the new value. Declaration public string PutAttribute(string key, string value) Parameters Type Name Description System.String key System.String value Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInfos.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInfos.html",
    "title": "Class FieldInfos | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldInfos Collection of FieldInfo s (accessible by number or by name). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfos Implements System.Collections.Generic.IEnumerable < FieldInfo > 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.Index Assembly : Lucene.Net.dll Syntax public class FieldInfos : IEnumerable<FieldInfo>, IEnumerable Constructors | Improve this Doc View Source FieldInfos(FieldInfo[]) Constructs a new FieldInfos from an array of FieldInfo objects Declaration public FieldInfos(FieldInfo[] infos) Parameters Type Name Description FieldInfo [] infos Properties | Improve this Doc View Source Count Returns the number of fields. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasDocValues Returns true if any fields have DocValues Declaration public virtual bool HasDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasFreq Returns true if any fields have freqs Declaration public virtual bool HasFreq { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasNorms Returns true if any fields have norms Declaration public virtual bool HasNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasOffsets Returns true if any fields have offsets Declaration public virtual bool HasOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if any fields have payloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasProx Returns true if any fields have positions Declaration public virtual bool HasProx { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasVectors Returns true if any fields have vectors Declaration public virtual bool HasVectors { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source FieldInfo(Int32) Return the FieldInfo object referenced by the fieldNumber . Declaration public virtual FieldInfo FieldInfo(int fieldNumber) Parameters Type Name Description System.Int32 fieldNumber field's number. Returns Type Description FieldInfo the FieldInfo object or null when the given fieldNumber doesn't exist. Exceptions Type Condition System.ArgumentException if fieldNumber is negative | Improve this Doc View Source FieldInfo(String) Return the FieldInfo object referenced by the fieldName Declaration public virtual FieldInfo FieldInfo(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description FieldInfo the FieldInfo object or null when the given fieldName doesn't exist. | Improve this Doc View Source GetEnumerator() Returns an iterator over all the fieldinfo objects present, ordered by ascending field number Declaration public virtual IEnumerator<FieldInfo> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < FieldInfo > Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInvertState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInvertState.html",
    "title": "Class FieldInvertState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldInvertState This class tracks the number and position / offset parameters of terms being added to the index. The information collected in this class is also used to calculate the normalization factor for a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInvertState 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.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldInvertState Constructors | Improve this Doc View Source FieldInvertState(String) Creates FieldInvertState for the specified field name. Declaration public FieldInvertState(string name) Parameters Type Name Description System.String name | Improve this Doc View Source FieldInvertState(String, Int32, Int32, Int32, Int32, Single) Creates FieldInvertState for the specified field name and values for all fields. Declaration public FieldInvertState(string name, int position, int length, int numOverlap, int offset, float boost) Parameters Type Name Description System.String name System.Int32 position System.Int32 length System.Int32 numOverlap System.Int32 offset System.Single boost Properties | Improve this Doc View Source AttributeSource Gets the AttributeSource from the TokenStream that provided the indexed tokens for this field. Declaration public AttributeSource AttributeSource { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Boost Gets or Sets boost value. This is the cumulative product of document boost and field boost for all field instances sharing the same field name. Declaration public float Boost { get; set; } Property Value Type Description System.Single the boost | Improve this Doc View Source Length Gets or Sets total number of terms in this field. Declaration public int Length { get; set; } Property Value Type Description System.Int32 the length | Improve this Doc View Source MaxTermFrequency Get the maximum term-frequency encountered for any term in the field. A field containing \"the quick brown fox jumps over the lazy dog\" would have a value of 2, because \"the\" appears twice. Declaration public int MaxTermFrequency { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Gets the field's name Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumOverlap Gets or Sets the number of terms with positionIncrement == 0 . Declaration public int NumOverlap { get; set; } Property Value Type Description System.Int32 the numOverlap | Improve this Doc View Source Offset Gets end offset of the last processed term. Declaration public int Offset { get; } Property Value Type Description System.Int32 the offset | Improve this Doc View Source Position Gets the last processed term position. Declaration public int Position { get; } Property Value Type Description System.Int32 the position | Improve this Doc View Source UniqueTermCount Gets the number of unique terms encountered in this field. Declaration public int UniqueTermCount { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.Fields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Fields.html",
    "title": "Class Fields | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Fields Flex API for access to fields and terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FilterAtomicReader.FilterFields MultiFields Implements System.Collections.Generic.IEnumerable < System.String > 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.Index Assembly : Lucene.Net.dll Syntax public abstract class Fields : IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source Fields() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected Fields() Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length Fields array. Declaration public static readonly Fields[] EMPTY_ARRAY Field Value Type Description Fields [] Properties | Improve this Doc View Source Count Gets the number of fields or -1 if the number of distinct field names is unknown. If >= 0, GetEnumerator() will return as many field names. NOTE: This was size() in Lucene. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UniqueTermCount Returns the number of terms for all fields, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration [Obsolete(\"Iterate fields and add their Count instead. This method is only provided as a transition mechanism to access this statistic for 3.x indexes, which do not have this statistic per-field.\")] public virtual long UniqueTermCount { get; } Property Value Type Description System.Int64 See Also Count Methods | Improve this Doc View Source GetEnumerator() Returns an enumerator that will step through all field names. This will not return null . Declaration public abstract IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > | Improve this Doc View Source GetTerms(String) Get the Terms for this field. This will return null if the field does not exist. Declaration public abstract Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsAndPositionsEnum.html",
    "title": "Class FilterAtomicReader.FilterDocsAndPositionsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterAtomicReader.FilterDocsAndPositionsEnum Base class for filtering DocsAndPositionsEnum implementations. Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum FilterAtomicReader.FilterDocsAndPositionsEnum Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Index Assembly : Lucene.Net.dll Syntax public class FilterDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source FilterDocsAndPositionsEnum(DocsAndPositionsEnum) Create a new FilterAtomicReader.FilterDocsAndPositionsEnum Declaration public FilterDocsAndPositionsEnum(DocsAndPositionsEnum input) Parameters Type Name Description DocsAndPositionsEnum input the underlying DocsAndPositionsEnum instance. Fields | Improve this Doc View Source m_input The underlying DocsAndPositionsEnum instance. Declaration protected readonly DocsAndPositionsEnum m_input Field Value Type Description DocsAndPositionsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides DocsEnum.Attributes | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition()"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsEnum.html",
    "title": "Class FilterAtomicReader.FilterDocsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterAtomicReader.FilterDocsEnum Base class for filtering DocsEnum implementations. Inheritance System.Object DocIdSetIterator DocsEnum FilterAtomicReader.FilterDocsEnum Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Index Assembly : Lucene.Net.dll Syntax public class FilterDocsEnum : DocsEnum Constructors | Improve this Doc View Source FilterDocsEnum(DocsEnum) Create a new FilterAtomicReader.FilterDocsEnum Declaration public FilterDocsEnum(DocsEnum input) Parameters Type Name Description DocsEnum input the underlying DocsEnum instance. Fields | Improve this Doc View Source m_input The underlying DocsEnum instance. Declaration protected DocsEnum m_input Field Value Type Description DocsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides DocsEnum.Attributes | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterFields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterFields.html",
    "title": "Class FilterAtomicReader.FilterFields | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterAtomicReader.FilterFields Base class for filtering Fields implementations. Inheritance System.Object Fields FilterAtomicReader.FilterFields Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable Inherited Members Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Index Assembly : Lucene.Net.dll Syntax public class FilterFields : Fields, IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source FilterFields(Fields) Creates a new FilterAtomicReader.FilterFields . Declaration public FilterFields(Fields input) Parameters Type Name Description Fields input the underlying Fields instance. Fields | Improve this Doc View Source m_input The underlying Fields instance. Declaration protected readonly Fields m_input Field Value Type Description Fields Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTerms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTerms.html",
    "title": "Class FilterAtomicReader.FilterTerms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterAtomicReader.FilterTerms Base class for filtering Terms implementations. NOTE : If the order of terms and documents is not changed, and if these terms are going to be intersected with automata, you could consider overriding Intersect(CompiledAutomaton, BytesRef) for better performance. Inheritance System.Object Terms FilterAtomicReader.FilterTerms Inherited Members Terms.Intersect(CompiledAutomaton, BytesRef) Terms.EMPTY_ARRAY 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.Index Assembly : Lucene.Net.dll Syntax public class FilterTerms : Terms Constructors | Improve this Doc View Source FilterTerms(Terms) Creates a new FilterAtomicReader.FilterTerms Declaration public FilterTerms(Terms input) Parameters Type Name Description Terms input the underlying Terms instance. Fields | Improve this Doc View Source m_input The underlying Terms instance. Declaration protected readonly Terms m_input Field Value Type Description Terms Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTermsEnum.html",
    "title": "Class FilterAtomicReader.FilterTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterAtomicReader.FilterTermsEnum Base class for filtering TermsEnum implementations. Inheritance System.Object TermsEnum FilterAtomicReader.FilterTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.SeekExact(BytesRef) TermsEnum.SeekExact(BytesRef, TermState) TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.GetTermState() TermsEnum.EMPTY 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.Index Assembly : Lucene.Net.dll Syntax public class FilterTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FilterTermsEnum(TermsEnum) Creates a new FilterAtomicReader.FilterTermsEnum Declaration public FilterTermsEnum(TermsEnum input) Parameters Type Name Description TermsEnum input the underlying TermsEnum instance. Fields | Improve this Doc View Source m_input The underlying TermsEnum instance. Declaration protected readonly TermsEnum m_input Field Value Type Description TermsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides TermsEnum.Attributes | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.html",
    "title": "Class FilterAtomicReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterAtomicReader A FilterAtomicReader contains another AtomicReader , which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality. The class FilterAtomicReader itself simply implements all abstract methods of IndexReader with versions that pass all requests to the contained index reader. Subclasses of FilterAtomicReader may further override some of these methods and may also provide additional methods and fields. NOTE : If you override LiveDocs , you will likely need to override NumDocs as well and vice-versa. NOTE : If this FilterAtomicReader does not change the content the contained reader, you could consider overriding CoreCacheKey so that IFieldCache and CachingWrapperFilter share the same entries for this atomic reader and the wrapped one. CombinedCoreAndDeletesKey could be overridden as well if the LiveDocs are not changed either. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterAtomicReader : AtomicReader, IDisposable Constructors | Improve this Doc View Source FilterAtomicReader(AtomicReader) Construct a FilterAtomicReader based on the specified base reader. Note that base reader is closed if this FilterAtomicReader is closed. Declaration public FilterAtomicReader(AtomicReader input) Parameters Type Name Description AtomicReader input specified base reader. Fields | Improve this Doc View Source m_input The underlying AtomicReader . Declaration protected readonly AtomicReader m_input Field Value Type Description AtomicReader Properties | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Unwrap(AtomicReader) Get the wrapped instance by reader as long as this reader is an intance of FilterAtomicReader . Declaration public static AtomicReader Unwrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description AtomicReader Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.html",
    "title": "Class FilterDirectoryReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterDirectoryReader A FilterDirectoryReader wraps another DirectoryReader , allowing implementations to transform or extend it. Subclasses should implement DoWrapDirectoryReader(DirectoryReader) to return an instance of the subclass. If the subclass wants to wrap the DirectoryReader 's subreaders, it should also implement a FilterDirectoryReader.SubReaderWrapper subclass, and pass an instance to its base constructor. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < AtomicReader > DirectoryReader FilterDirectoryReader Implements System.IDisposable Inherited Members DirectoryReader.DEFAULT_TERMS_INDEX_DIVISOR DirectoryReader.m_directory DirectoryReader.Open(Directory) DirectoryReader.Open(Directory, Int32) DirectoryReader.Open(IndexWriter, Boolean) DirectoryReader.Open(IndexCommit) DirectoryReader.Open(IndexCommit, Int32) DirectoryReader.OpenIfChanged(DirectoryReader) DirectoryReader.OpenIfChanged(DirectoryReader, IndexCommit) DirectoryReader.OpenIfChanged(DirectoryReader, IndexWriter, Boolean) DirectoryReader.ListCommits(Directory) DirectoryReader.IndexExists(Directory) DirectoryReader.Directory BaseCompositeReader<AtomicReader>.GetTermVectors(Int32) BaseCompositeReader<AtomicReader>.NumDocs BaseCompositeReader<AtomicReader>.MaxDoc BaseCompositeReader<AtomicReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<AtomicReader>.DocFreq(Term) BaseCompositeReader<AtomicReader>.TotalTermFreq(Term) BaseCompositeReader<AtomicReader>.GetSumDocFreq(String) BaseCompositeReader<AtomicReader>.GetDocCount(String) BaseCompositeReader<AtomicReader>.GetSumTotalTermFreq(String) BaseCompositeReader<AtomicReader>.ReaderIndex(Int32) BaseCompositeReader<AtomicReader>.ReaderBase(Int32) BaseCompositeReader<AtomicReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class FilterDirectoryReader : DirectoryReader, IDisposable Constructors | Improve this Doc View Source FilterDirectoryReader(DirectoryReader) Create a new FilterDirectoryReader that filters a passed in DirectoryReader . Declaration public FilterDirectoryReader(DirectoryReader input) Parameters Type Name Description DirectoryReader input the DirectoryReader to filter | Improve this Doc View Source FilterDirectoryReader(DirectoryReader, FilterDirectoryReader.SubReaderWrapper) Create a new FilterDirectoryReader that filters a passed in DirectoryReader , using the supplied FilterDirectoryReader.SubReaderWrapper to wrap its subreader. Declaration public FilterDirectoryReader(DirectoryReader input, FilterDirectoryReader.SubReaderWrapper wrapper) Parameters Type Name Description DirectoryReader input the DirectoryReader to filter FilterDirectoryReader.SubReaderWrapper wrapper the FilterDirectoryReader.SubReaderWrapper to use to wrap subreaders Fields | Improve this Doc View Source m_input The filtered DirectoryReader Declaration protected readonly DirectoryReader m_input Field Value Type Description DirectoryReader Properties | Improve this Doc View Source IndexCommit Declaration public override IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit Overrides DirectoryReader.IndexCommit | Improve this Doc View Source Version Declaration public override long Version { get; } Property Value Type Description System.Int64 Overrides DirectoryReader.Version Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source DoOpenIfChanged() Declaration protected override sealed DirectoryReader DoOpenIfChanged() Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged() | Improve this Doc View Source DoOpenIfChanged(IndexCommit) Declaration protected override sealed DirectoryReader DoOpenIfChanged(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged(IndexCommit) | Improve this Doc View Source DoOpenIfChanged(IndexWriter, Boolean) Declaration protected override sealed DirectoryReader DoOpenIfChanged(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer System.Boolean applyAllDeletes Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged(IndexWriter, Boolean) | Improve this Doc View Source DoWrapDirectoryReader(DirectoryReader) Called by the DoOpenIfChanged() methods to return a new wrapped DirectoryReader . Implementations should just return an instance of themselves, wrapping the passed in DirectoryReader . Declaration protected abstract DirectoryReader DoWrapDirectoryReader(DirectoryReader input) Parameters Type Name Description DirectoryReader input the DirectoryReader to wrap Returns Type Description DirectoryReader the wrapped DirectoryReader | Improve this Doc View Source IsCurrent() Declaration public override bool IsCurrent() Returns Type Description System.Boolean Overrides DirectoryReader.IsCurrent() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.StandardReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.StandardReaderWrapper.html",
    "title": "Class FilterDirectoryReader.StandardReaderWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterDirectoryReader.StandardReaderWrapper A no-op FilterDirectoryReader.SubReaderWrapper that simply returns the parent DirectoryReader 's original subreaders. Inheritance System.Object FilterDirectoryReader.SubReaderWrapper FilterDirectoryReader.StandardReaderWrapper 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.Index Assembly : Lucene.Net.dll Syntax public class StandardReaderWrapper : FilterDirectoryReader.SubReaderWrapper Constructors | Improve this Doc View Source StandardReaderWrapper() Constructor Declaration public StandardReaderWrapper() Methods | Improve this Doc View Source Wrap(AtomicReader) Declaration public override AtomicReader Wrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description AtomicReader Overrides FilterDirectoryReader.SubReaderWrapper.Wrap(AtomicReader)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.SubReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.SubReaderWrapper.html",
    "title": "Class FilterDirectoryReader.SubReaderWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterDirectoryReader.SubReaderWrapper Factory class passed to FilterDirectoryReader constructor that allows subclasses to wrap the filtered DirectoryReader 's subreaders. You can use this to, e.g., wrap the subreaders with specialized FilterAtomicReader implementations. Inheritance System.Object FilterDirectoryReader.SubReaderWrapper FilterDirectoryReader.StandardReaderWrapper 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.Index Assembly : Lucene.Net.dll Syntax public abstract class SubReaderWrapper Constructors | Improve this Doc View Source SubReaderWrapper() Constructor Declaration public SubReaderWrapper() Methods | Improve this Doc View Source Wrap(AtomicReader) Wrap one of the parent DirectoryReader 's subreaders Declaration public abstract AtomicReader Wrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader the subreader to wrap Returns Type Description AtomicReader a wrapped/filtered AtomicReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.AcceptStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.AcceptStatus.html",
    "title": "Enum FilteredTermsEnum.AcceptStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum FilteredTermsEnum.AcceptStatus Return value, if term should be accepted or the iteration should END . The *_SEEK values denote, that after handling the current term the enum should call NextSeekTerm(BytesRef) and step forward. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax protected enum AcceptStatus Fields Name Description END Reject the term and stop enumerating. NO Reject the term and position the enum at the next term. NO_AND_SEEK Reject the term and advance ( NextSeekTerm(BytesRef) ) to the next term. YES Accept the term and position the enum at the next term. YES_AND_SEEK Accept the term and advance ( NextSeekTerm(BytesRef) ) to the next term. See Also Accept ( BytesRef )"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.html",
    "title": "Class FilteredTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteredTermsEnum Abstract class for enumerating a subset of all terms. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Please note: Consumers of this enumeration cannot call Seek() , it is forward only; it throws System.NotSupportedException when a seeking method is called. Inheritance System.Object TermsEnum FilteredTermsEnum SingleTermsEnum PrefixTermsEnum TermRangeTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY 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.Index Assembly : Lucene.Net.dll Syntax public abstract class FilteredTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FilteredTermsEnum(TermsEnum) Creates a filtered TermsEnum on a terms enum. Declaration public FilteredTermsEnum(TermsEnum tenum) Parameters Type Name Description TermsEnum tenum the terms enumeration to filter. | Improve this Doc View Source FilteredTermsEnum(TermsEnum, Boolean) Creates a filtered TermsEnum on a terms enum. Declaration public FilteredTermsEnum(TermsEnum tenum, bool startWithSeek) Parameters Type Name Description TermsEnum tenum the terms enumeration to filter. System.Boolean startWithSeek start with seek Properties | Improve this Doc View Source Attributes Returns the related attributes, the returned AttributeSource is shared with the delegate TermsEnum . Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides TermsEnum.Attributes | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Accept(BytesRef) Return if term is accepted, not accepted or the iteration should ended (and possibly seek). Declaration protected abstract FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits bits, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits bits DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits bits, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits bits DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source GetTermState() Returns the filtered enums term state Declaration public override TermState GetTermState() Returns Type Description TermState Overrides TermsEnum.GetTermState() | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source NextSeekTerm(BytesRef) On the first call to Next() or if Accept(BytesRef) returns YES_AND_SEEK or NO_AND_SEEK , this method will be called to eventually seek the underlying TermsEnum to a new position. On the first call, currentTerm will be null , later calls will provide the term the underlying enum is positioned at. This method returns per default only one time the initial seek term and then null , so no repositioning is ever done. Override this method, if you want a more sophisticated TermsEnum , that repositions the iterator during enumeration. If this method always returns null the enum is empty. Please note: this method should always provide a greater term than the last enumerated term, else the behavior of this enum violates the contract for TermsEnum s. Declaration protected virtual BytesRef NextSeekTerm(BytesRef currentTerm) Parameters Type Name Description BytesRef currentTerm Returns Type Description BytesRef | Improve this Doc View Source SeekCeil(BytesRef) this enum does not support seeking! Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SeekExact(BytesRef) this enum does not support seeking! Declaration public override bool SeekExact(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SeekExact(BytesRef, TermState) this enum does not support seeking! Declaration public override void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term TermState state Overrides TermsEnum.SeekExact(BytesRef, TermState) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SeekExact(Int64) this enum does not support seeking! Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SetInitialSeekTerm(BytesRef) Use this method to set the initial BytesRef to seek before iterating. This is a convenience method for subclasses that do not override NextSeekTerm(BytesRef) . If the initial seek term is null (default), the enum is empty. You can only use this method, if you keep the default implementation of NextSeekTerm(BytesRef) . Declaration protected void SetInitialSeekTerm(BytesRef term) Parameters Type Name Description BytesRef term Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.html",
    "title": "Namespace Lucene.Net.Index | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Index <!-- 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. --> Misc index tools and index support. Classes AtomicReader AtomicReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. IndexReader s implemented by this subclass do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. AtomicReaderContext IndexReaderContext for AtomicReader instances. BaseCompositeReader<R> Base class for implementing CompositeReader s based on an array of sub-readers. The implementing class has to add code for correctly refcounting and closing the sub-readers. User code will most likely use MultiReader to build a composite reader on a set of sub-readers (like several DirectoryReader s). For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. This is a Lucene.NET INTERNAL API, use at your own risk BinaryDocValues A per-document byte[] BufferedUpdates Holds buffered deletes and updates, by docID, term or query for a single segment. this is used to hold buffered pending deletes and updates against the to-be-flushed segment. Once the deletes and updates are pushed (on flush in Lucene.Net.Index.DocumentsWriter ), they are converted to a FrozenDeletes instance. NOTE: instances of this class are accessed either via a private instance on Lucene.Net.Index.DocumentsWriterPerThread , or via sync'd code by Lucene.Net.Index.DocumentsWriterDeleteQueue ByteSliceReader IndexInput that knows how to read the byte slices written by Posting and PostingVector. We read the bytes in each slice until we hit the end of that slice at which point we read the forwarding address of the next slice and then jump to it. CheckAbort Class for recording units of work when merging segments. CheckIndex Basic tool and API to check the health of an index and write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Please make a complete backup of your index before using this to fix your index! This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status Returned from DoCheckIndex() detailing the health and status of the index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status.DocValuesStatus Status from testing DocValues CheckIndex.Status.FieldNormStatus Status from testing field norms. CheckIndex.Status.SegmentInfoStatus Holds the status of each segment in the index. See SegmentInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status.StoredFieldStatus Status from testing stored fields. CheckIndex.Status.TermIndexStatus Status from testing term index. CheckIndex.Status.TermVectorStatus Status from testing stored fields. CompositeReader Instances of this reader type can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the AtomicReaderContext for all sub-readers via Leaves . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader implements the CompositeReader interface, it is not possible to directly get postings. Concrete subclasses of IndexReader are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. CompositeReaderContext IndexReaderContext for CompositeReader instance. CompositeReaderContext.Builder ConcurrentMergeScheduler A MergeScheduler that runs each merge using a separate thread. Specify the max number of threads that may run at once, and the maximum number of simultaneous merges with SetMaxMergesAndThreads(Int32, Int32) . If the number of merges exceeds the max number of threads then the largest merges are paused until one of the smaller merges completes. If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. ConcurrentMergeScheduler.MergeThread Runs a merge thread, which may run one or more merges in sequence. CorruptIndexException This exception is thrown when Lucene detects an inconsistency in the index. DirectoryReader DirectoryReader is an implementation of CompositeReader that can read indexes in a Directory . DirectoryReader instances are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. DocsAndPositionsEnum Also iterates through positions. DocsEnum Iterates through the documents and term freqs. NOTE: you must first call NextDoc() before using any of the per-doc methods. DocTermOrds This class enables fast access to multiple term ords for a specified field across all docIDs. Like IFieldCache , it uninverts the index and holds a packed data structure in RAM to enable fast access. Unlike IFieldCache , it can handle multi-valued fields, and, it does not hold the term bytes in RAM. Rather, you must obtain a TermsEnum from the GetOrdTermsEnum(AtomicReader) method, and then seek-by-ord to get the term's bytes. While normally term ords are type System.Int64 , in this API they are System.Int32 as the internal representation here cannot address more than MAX_INT32 unique terms. Also, typically this class is used on fields with relatively few unique terms vs the number of documents. In addition, there is an internal limit (16 MB) on how many bytes each chunk of documents may consume. If you trip this limit you'll hit an System.InvalidOperationException . Deleted documents are skipped during uninversion, and if you look them up you'll get 0 ords. The returned per-document ords do not retain their original order in the document. Instead they are returned in sorted (by ord, ie term's BytesRef comparer) order. They are also de-dup'd (ie if doc has same term more than once in this field, you'll only get that ord back once). This class tests whether the provided reader is able to retrieve terms by ord (ie, it's single segment, and it uses an ord-capable terms index). If not, this class will create its own term index internally, allowing to create a wrapped TermsEnum that can handle ord. The GetOrdTermsEnum(AtomicReader) method then provides this wrapped enum, if necessary. The RAM consumption of this class can be high! This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValues This class contains utility methods and constants for DocValues DocValuesUpdate An in-place update to a DocValues field. DocValuesUpdate.BinaryDocValuesUpdate An in-place update to a binary DocValues field DocValuesUpdate.NumericDocValuesUpdate An in-place update to a numeric DocValues field FieldInfo Access to the Field Info file that describes document fields and whether or not they are indexed. Each segment has a separate Field Info file. Objects of this class are thread-safe for multiple readers, but only one thread can be adding documents at a time, with no other reader or writer threads accessing this object. FieldInfos Collection of FieldInfo s (accessible by number or by name). This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInvertState This class tracks the number and position / offset parameters of terms being added to the index. The information collected in this class is also used to calculate the normalization factor for a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields Flex API for access to fields and terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterAtomicReader A FilterAtomicReader contains another AtomicReader , which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality. The class FilterAtomicReader itself simply implements all abstract methods of IndexReader with versions that pass all requests to the contained index reader. Subclasses of FilterAtomicReader may further override some of these methods and may also provide additional methods and fields. NOTE : If you override LiveDocs , you will likely need to override NumDocs as well and vice-versa. NOTE : If this FilterAtomicReader does not change the content the contained reader, you could consider overriding CoreCacheKey so that IFieldCache and CachingWrapperFilter share the same entries for this atomic reader and the wrapped one. CombinedCoreAndDeletesKey could be overridden as well if the LiveDocs are not changed either. FilterAtomicReader.FilterDocsAndPositionsEnum Base class for filtering DocsAndPositionsEnum implementations. FilterAtomicReader.FilterDocsEnum Base class for filtering DocsEnum implementations. FilterAtomicReader.FilterFields Base class for filtering Fields implementations. FilterAtomicReader.FilterTerms Base class for filtering Terms implementations. NOTE : If the order of terms and documents is not changed, and if these terms are going to be intersected with automata, you could consider overriding Intersect(CompiledAutomaton, BytesRef) for better performance. FilterAtomicReader.FilterTermsEnum Base class for filtering TermsEnum implementations. FilterDirectoryReader A FilterDirectoryReader wraps another DirectoryReader , allowing implementations to transform or extend it. Subclasses should implement DoWrapDirectoryReader(DirectoryReader) to return an instance of the subclass. If the subclass wants to wrap the DirectoryReader 's subreaders, it should also implement a FilterDirectoryReader.SubReaderWrapper subclass, and pass an instance to its base constructor. FilterDirectoryReader.StandardReaderWrapper A no-op FilterDirectoryReader.SubReaderWrapper that simply returns the parent DirectoryReader 's original subreaders. FilterDirectoryReader.SubReaderWrapper Factory class passed to FilterDirectoryReader constructor that allows subclasses to wrap the filtered DirectoryReader 's subreaders. You can use this to, e.g., wrap the subreaders with specialized FilterAtomicReader implementations. FilteredTermsEnum Abstract class for enumerating a subset of all terms. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Please note: Consumers of this enumeration cannot call Seek() , it is forward only; it throws System.NotSupportedException when a seeking method is called. IndexCommit Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader . Changes to the content of an index are made visible only after the writer who made that change commits by writing a new segments file ( segments_N ). This point in time, when the action of writing of a new segments file to the directory is completed, is an index commit. Each index commit point has a unique segments file associated with it. The segments file associated with a later index commit point would have a larger N. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IndexDeletionPolicy Expert: policy for deletion of stale IndexCommit s. Implement this interface, and pass it to one of the IndexWriter or IndexReader constructors, to customize when older point-in-time commits ( IndexCommit ) are deleted from the index directory. The default deletion policy is KeepOnlyLastCommitDeletionPolicy , which always removes old commits as soon as a new commit is done (this matches the behavior before 2.2). One expected use case for this (and the reason why it was first created) is to work around problems with an index directory accessed via filesystems like NFS because NFS does not provide the \"delete on last close\" semantics that Lucene's \"point in time\" search normally relies on. By implementing a custom deletion policy, such as \"a commit is only removed once it has been stale for more than X minutes\", you can give your readers time to refresh to the new commit before IndexWriter removes the old commits. Note that doing so will increase the storage requirements of the index. See LUCENE-710 for details. Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any other IndexWriter or Directory instance. IndexFileNames This class contains useful constants representing filenames and extensions used by lucene, as well as convenience methods for querying whether a file name matches an extension ( MatchesExtension(String, String) ), as well as generating file names from a segment name, generation and extension ( FileNameFromGeneration(String, String, Int64) , SegmentFileName(String, String, String) ). NOTE : extensions used by codecs are not listed here. You must interact with the Codec directly. This is a Lucene.NET INTERNAL API, use at your own risk IndexFormatTooNewException This exception is thrown when Lucene detects an index that is newer than this Lucene version. IndexFormatTooOldException This exception is thrown when Lucene detects an index that is too old for this Lucene version IndexNotFoundException Signals that no index was found in the System.IO.Directory . Possibly because the directory is empty, however can also indicate an index corruption. IndexReader IndexReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. There are two different types of IndexReader s: AtomicReader : These indexes do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. CompositeReader : Instances (like DirectoryReader ) of this reader can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the sub-readers via GetSequentialSubReaders() . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader inherits the CompositeReader abstract class, it is not possible to directly get postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. IndexReaderContext A struct like class that represents a hierarchical relationship between IndexReader instances. IndexUpgrader This is an easy-to-use tool that upgrades all segments of an index from previous Lucene versions to the current segment file format. It can be used from command line: java -cp lucene-core.jar Lucene.Net.Index.IndexUpgrader [-delete-prior-commits] [-verbose] indexDir Alternatively this class can be instantiated and Upgrade() invoked. It uses UpgradeIndexMergePolicy and triggers the upgrade via an ForceMerge(Int32) request to IndexWriter . This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify -delete-prior-commits to override this, allowing the tool to delete all but the last commit. From .NET code this can be enabled by passing true to IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) . Warning: this tool may reorder documents if the index was partially upgraded before execution (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a full ForceMerge instead. The MergePolicy set by IndexWriterConfig may also reorder documents. IndexWriter An IndexWriter creates and maintains an index. IndexWriter.IndexReaderWarmer If Open(IndexWriter, Boolean) has been called (ie, this writer is in near real-time mode), then after a merge completes, this class can be invoked to warm the reader on the newly merged segment, before the merge commits. This is not required for near real-time search, but will reduce search latency on opening a new near real-time reader after a merge completes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NOTE : Warm(AtomicReader) is called before any deletes have been carried over to the merged segment. IndexWriterConfig Holds all the configuration that is used to create an IndexWriter . Once IndexWriter has been created with this object, changes to this object will not affect the IndexWriter instance. For that, use LiveIndexWriterConfig that is returned from Config . LUCENENET NOTE: Unlike Lucene, we use property setters instead of setter methods. In C#, this allows you to initialize the IndexWriterConfig using the language features of C#, for example: IndexWriterConfig conf = new IndexWriterConfig(analyzer) { Codec = Lucene46Codec(), OpenMode = OpenMode.CREATE }; However, if you prefer to match the syntax of Lucene using chained setter methods, there are extension methods in the Lucene.Net.Support namespace. Example usage: using Lucene.Net.Support; .. IndexWriterConfig conf = new IndexWriterConfig(analyzer) .SetCodec(new Lucene46Codec()) .SetOpenMode(OpenMode.CREATE); @since 3.1 KeepOnlyLastCommitDeletionPolicy This IndexDeletionPolicy implementation that keeps only the most recent commit and immediately removes all prior commits after a new commit is done. This is the default deletion policy. LiveIndexWriterConfig Holds all the configuration used by IndexWriter with few setters for settings that can be changed on an IndexWriter instance \"live\". @since 4.0 LogByteSizeMergePolicy This is a LogMergePolicy that measures size of a segment as the total byte size of the segment's files. LogDocMergePolicy This is a LogMergePolicy that measures size of a segment as the number of documents (not taking deletions into account). LogMergePolicy This class implements a MergePolicy that tries to merge segments into levels of exponentially increasing size, where each level has fewer segments than the value of the merge factor. Whenever extra segments (beyond the merge factor upper bound) are encountered, all segments within the level are merged. You can get or set the merge factor using MergeFactor . This class is abstract and requires a subclass to define the Size(SegmentCommitInfo) method which specifies how a segment's size is determined. LogDocMergePolicy is one subclass that measures size by document count in the segment. LogByteSizeMergePolicy is another subclass that measures size as the total byte size of the file(s) for the segment. MergePolicy Expert: a MergePolicy determines the sequence of primitive merge operations. Whenever the segments in an index have been altered by IndexWriter , either the addition of a newly flushed segment, addition of many segments from AddIndexes* calls, or a previous merge that may now need to cascade, IndexWriter invokes FindMerges(MergeTrigger, SegmentInfos) to give the MergePolicy a chance to pick merges that are now required. This method returns a MergePolicy.MergeSpecification instance describing the set of merges that should be done, or null if no merges are necessary. When ForceMerge(Int32) is called, it calls FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) and the MergePolicy should then return the necessary merges. Note that the policy can return more than one merge at a time. In this case, if the writer is using SerialMergeScheduler , the merges will be run sequentially but if it is using ConcurrentMergeScheduler they will be run concurrently. The default MergePolicy is TieredMergePolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergePolicy.DocMap A map of doc IDs. MergePolicy.MergeAbortedException Thrown when a merge was explicity aborted because Dispose(Boolean) was called with false . Normally this exception is privately caught and suppresed by IndexWriter . MergePolicy.MergeException Exception thrown if there are any problems while executing a merge. MergePolicy.MergeSpecification A MergePolicy.MergeSpecification instance provides the information necessary to perform multiple merges. It simply contains a list of MergePolicy.OneMerge instances. MergePolicy.OneMerge OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment. The merge spec includes the subset of segments to be merged as well as whether the new segment should use the compound file format. MergeScheduler Expert: IndexWriter uses an instance implementing this interface to execute the merges selected by a MergePolicy . The default MergeScheduler is ConcurrentMergeScheduler . Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any IndexWriter instance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeState Holds common state used during segment merging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeState.DocMap Remaps docids around deletes during merge MultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiDocsAndPositionsEnum.EnumWithSlice Holds a DocsAndPositionsEnum along with the corresponding ReaderSlice . MultiDocsEnum Exposes DocsEnum , merged from DocsEnum API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiDocsEnum.EnumWithSlice Holds a DocsEnum along with the corresponding ReaderSlice . MultiDocValues A wrapper for CompositeReader providing access to DocValues . NOTE : for multi readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. NOTE : this is very costly. This is a Lucene.NET EXPERIMENTAL API, use at your own risk This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.MultiSortedDocValues Implements SortedDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.MultiSortedSetDocValues Implements MultiDocValues.MultiSortedSetDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.OrdinalMap maps per-segment ordinals to/from global ordinal space MultiFields Exposes flex API, merged from flex API of sub-segments. This is useful when you're interacting with an IndexReader implementation that consists of sequential sub-readers (eg DirectoryReader or MultiReader ). NOTE : for composite readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiReader A CompositeReader which reads multiple indexes, appending their content. It can be used to create a view on several sub-readers (like DirectoryReader ) and execute searches on it. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. MultiTerms Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiTermsEnum Exposes TermsEnum API, merged from TermsEnum API of sub-segments. This does a merge sort, by term text, of the sub-readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiTermsEnum.TermsEnumIndex MultiTermsEnum.TermsEnumWithSlice NoDeletionPolicy An IndexDeletionPolicy which keeps all index commits around, never deleting them. This class is a singleton and can be accessed by referencing INSTANCE . NoMergePolicy A MergePolicy which never returns merges to execute (hence it's name). It is also a singleton and can be accessed through NO_COMPOUND_FILES if you want to indicate the index does not use compound files, or through COMPOUND_FILES otherwise. Use it if you want to prevent an IndexWriter from ever executing merges, without going through the hassle of tweaking a merge policy's settings to achieve that, such as changing its merge factor. NoMergeScheduler A MergeScheduler which never executes any merges. It is also a singleton and can be accessed through INSTANCE . Use it if you want to prevent an IndexWriter from ever executing merges, regardless of the MergePolicy used. Note that you can achieve the same thing by using NoMergePolicy , however with NoMergeScheduler you also ensure that no unnecessary code of any MergeScheduler implementation is ever executed. Hence it is recommended to use both if you want to disable merges from ever happening. NumericDocValues A per-document numeric value. OrdTermState An ordinal based TermState This is a Lucene.NET EXPERIMENTAL API, use at your own risk ParallelAtomicReader An AtomicReader which reads multiple, parallel indexes. Each index added must have the same number of documents, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . ParallelCompositeReader A CompositeReader which reads multiple, parallel indexes. Each index added must have the same number of documents, and exactly the same hierarchical subreader structure, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . A good strategy to create suitable indexes with IndexWriter is to use LogDocMergePolicy , as this one does not reorder documents during merging (like TieredMergePolicy ) and triggers merges by number of documents per segment. If you use different MergePolicy s it might happen that the segment structure of your index is no longer predictable. PersistentSnapshotDeletionPolicy A SnapshotDeletionPolicy which adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in a Directory and are committed as soon as Snapshot() or Release(IndexCommit) is called. NOTE: Sharing PersistentSnapshotDeletionPolicy s that write to the same directory across IndexWriter s will corrupt snapshots. You should make sure every IndexWriter has its own PersistentSnapshotDeletionPolicy and that they all write to a different Directory . It is OK to use the same Directory that holds the index. This class adds a Release(Int64) method to release commits from a previous snapshot's Generation . This is a Lucene.NET EXPERIMENTAL API, use at your own risk RandomAccessOrds Extension of SortedSetDocValues that supports random access to the ordinals of a document. Operations via this API are independent of the iterator api ( NextOrd() ) and do not impact its state. Codecs can optionally extend this API if they support constant-time access to ordinals for the document. ReaderManager Utility class to safely share DirectoryReader instances across multiple threads, while periodically reopening. This class ensures each reader is disposed only once all threads have finished using it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ReaderSlice Subreader slice from a parent composite reader. This is a Lucene.NET INTERNAL API, use at your own risk ReaderUtil Common util methods for dealing with IndexReader s and IndexReaderContext s. This is a Lucene.NET INTERNAL API, use at your own risk SegmentCommitInfo Embeds a [read-only] SegmentInfo and adds per-commit fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfo Information about a segment such as it's name, directory, and files related to the segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfos A collection of segmentInfo objects with methods for operating on those segments in relation to the file system. The active segments in the index are stored in the segment info file, segments_N . There may be one or more segments_N files in the index; however, the one with the largest generation is the active one (when older segments_N files are present it's because they temporarily cannot be deleted, or, a writer is in the process of committing, or a custom IndexDeletionPolicy is in use). This file lists each segment by name and has details about the codec and generation of deletes. There is also a file segments.gen . this file contains the current generation (the _N in segments_N ) of the index. This is used only as a fallback in case the current generation cannot be accurately determined by directory listing alone (as is the case for some NFS clients with time-based directory cache expiration). This file simply contains an WriteInt32(Int32) version header ( FORMAT_SEGMENTS_GEN_CURRENT ), followed by the generation recorded as WriteInt64(Int64) , written twice. Files: segments.gen : GenHeader, Generation, Generation, Footer segments_N : Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles> SegCount , CommitUserData, Footer Data types: Header --> WriteHeader(DataOutput, String, Int32) GenHeader, NameCounter, SegCount, DeletionCount --> WriteInt32(Int32) Generation, Version, DelGen, Checksum, FieldInfosGen --> WriteInt64(Int64) SegName, SegCodec --> WriteString(String) CommitUserData --> WriteStringStringMap(IDictionary<String, String>) UpdatesFiles --> WriteStringSet(ISet<String>) Footer --> WriteFooter(IndexOutput) Field Descriptions: Version counts how often the index has been changed by adding or deleting documents. NameCounter is used to generate names for new segment files. SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment's index. DelGen is the generation count of the deletes file. If this is -1, there are no deletes. Anything above zero means there are deletes stored by LiveDocsFormat . DeletionCount records the number of deleted documents in this segment. SegCodec is the Name of the Codec that encoded this segment. CommitUserData stores an optional user-supplied opaque that was passed to SetCommitData(IDictionary<String, String>) . FieldInfosGen is the generation count of the fieldInfos file. If this is -1, there are no updates to the fieldInfos in that segment. Anything above zero means there are updates to fieldInfos stored by FieldInfosFormat . UpdatesFiles stores the list of files that were updated in that segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfos.FindSegmentsFile Utility class for executing code that needs to do something with the current segments file. This is necessary with lock-less commits because from the time you locate the current segments file name, until you actually open it, read its contents, or check modified time, etc., it could have been deleted due to a writer commit finishing. SegmentReader IndexReader implementation over a single segment. Instances pointing to the same segment (but with different deletes, etc) may share the same core data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentReadState Holder class for common parameters used during read. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentWriteState Holder class for common parameters used during write. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SerialMergeScheduler A MergeScheduler that simply does each merge sequentially, using the current thread. SimpleMergedSegmentWarmer A very simple merged segment warmer that just ensures data structures are initialized. SingleTermsEnum Subclass of FilteredTermsEnum for enumerating a single term. For example, this can be used by MultiTermQuery s that need only visit one term, but want to preserve MultiTermQuery semantics such as MultiTermRewriteMethod . SlowCompositeReaderWrapper This class forces a composite reader (eg a MultiReader or DirectoryReader ) to emulate an atomic reader. This requires implementing the postings APIs on-the-fly, using the static methods in MultiFields , MultiDocValues , by stepping through the sub-readers to merge fields/terms, appending docs, etc. NOTE : This class almost always results in a performance hit. If this is important to your use case, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. SnapshotDeletionPolicy An IndexDeletionPolicy that wraps any other IndexDeletionPolicy and adds the ability to hold and later release snapshots of an index. While a snapshot is held, the IndexWriter will not remove any files associated with it even if the index is otherwise being actively, arbitrarily changed. Because we wrap another arbitrary IndexDeletionPolicy , this gives you the freedom to continue using whatever IndexDeletionPolicy you would normally want to use with your index. This class maintains all snapshots in-memory, and so the information is not persisted and not protected against system failures. If persistence is important, you can use PersistentSnapshotDeletionPolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedDocValues A per-document byte[] with presorted values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. SortedSetDocValues A per-document set of presorted byte[] values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. StoredFieldVisitor Expert: Provides a low-level means of accessing the stored field values in an index. See Document(Int32, StoredFieldVisitor) . NOTE : a StoredFieldVisitor implementation should not try to load or visit other stored documents in the same reader because the implementation of stored fields for most codecs is not reeentrant and you will see strange exceptions as a result. See DocumentStoredFieldVisitor , which is a StoredFieldVisitor that builds the Document containing all stored fields. This is used by Document(Int32) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaskMergeScheduler A MergeScheduler that runs each merge using System.Threading.Tasks.Task s on the default System.Threading.Tasks.TaskScheduler . If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. LUCENENET specific Term A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc. TermContext Maintains a IndexReader TermState view over IndexReader instances containing a single term. The TermContext doesn't track if the given TermState objects are valid, neither if the TermState instances refer to the same terms in the associated readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Terms Access to the terms in a specific field. See Fields . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsEnum Iterator to seek ( SeekCeil(BytesRef) , SeekExact(BytesRef) ) or step through ( Next() terms to obtain frequency information ( DocFreq ), DocsEnum or DocsAndPositionsEnum for the current term ( Docs(IBits, DocsEnum) ). Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than the one before it. The TermsEnum is unpositioned when you first obtain it and you must first successfully call Next() or one of the Seek methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermState Encapsulates all required internal state to position the associated TermsEnum without re-seeking. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TieredMergePolicy Merges segments of approximately equal size, subject to an allowed number of segments per tier. This is similar to LogByteSizeMergePolicy , except this merge policy is able to merge non-adjacent segment, and separates how many segments are merged at once ( MaxMergeAtOnce ) from how many segments are allowed per tier ( SegmentsPerTier ). This merge policy also does not over-merge (i.e. cascade merges). For normal merging, this policy first computes a \"budget\" of how many segments are allowed to be in the index. If the index is over-budget, then the policy sorts segments by decreasing size (pro-rating by percent deletes), and then finds the least-cost merge. Merge cost is measured by a combination of the \"skew\" of the merge (size of largest segment divided by smallest segment), total merge size and percent deletes reclaimed, so that merges with lower skew, smaller size and those reclaiming more deletes, are favored. If a merge will produce a segment that's larger than MaxMergedSegmentMB , then the policy will merge fewer segments (down to 1 at once, if that one has deletions) to keep the segment size under budget. NOTE : This policy freely merges non-adjacent segments; if this is a problem, use LogMergePolicy . NOTE : This policy always merges by byte size of the segments, always pro-rates by percent deletes, and does not apply any maximum segment size during forceMerge (unlike LogByteSizeMergePolicy ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk TieredMergePolicy.MergeScore Holds score and explanation for a single candidate merge. TrackingIndexWriter Class that tracks changes to a delegated IndexWriter , used by ControlledRealTimeReopenThread<T> to ensure specific changes are visible. Create this class (passing your IndexWriter ), and then pass this class to ControlledRealTimeReopenThread<T> . Be sure to make all changes via the TrackingIndexWriter , otherwise ControlledRealTimeReopenThread<T> won't know about the changes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TwoPhaseCommitTool A utility for executing 2-phase commit on several objects. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TwoPhaseCommitTool.CommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to Commit() . TwoPhaseCommitTool.PrepareCommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to PrepareCommit() . UpgradeIndexMergePolicy This MergePolicy is used for upgrading all existing segments of an index when calling ForceMerge(Int32) . All other methods delegate to the base MergePolicy given to the constructor. This allows for an as-cheap-as possible upgrade of an older index by only upgrading segments that are created by previous Lucene versions. ForceMerge does no longer really merge; it is just used to \"ForceMerge\" older segment versions away. In general one would use IndexUpgrader , but for a fully customizeable upgrade, you can use this like any other MergePolicy and call ForceMerge(Int32) : IndexWriterConfig iwc = new IndexWriterConfig(LuceneVersion.LUCENE_XX, new KeywordAnalyzer()); iwc.MergePolicy = new UpgradeIndexMergePolicy(iwc.MergePolicy); using (IndexWriter w = new IndexWriter(dir, iwc)) { w.ForceMerge(1); } Warning: this merge policy may reorder documents if the index was partially upgraded before calling ForceMerge(Int32) (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a ForceMerge(1) instead. Please note, the delegate MergePolicy may also reorder documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IConcurrentMergeScheduler IIndexableField Represents a single field for indexing. IndexWriter consumes IEnumerable<IndexableField> as a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IIndexableFieldType Describes the properties of a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IMergeScheduler IndexReader.IReaderClosedListener A custom listener that's invoked when the IndexReader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IndexWriter.IEvent Interface for internal atomic events. See Lucene.Net.Index.DocumentsWriter for details. Events are executed concurrently and no order is guaranteed. Each event should only rely on the serializeability within it's process method. All actions that must happen before or after a certain action must be encoded inside the Process(IndexWriter, Boolean, Boolean) method. ITwoPhaseCommit An interface for implementations that support 2-phase commit. You can use TwoPhaseCommitTool to execute a 2-phase commit algorithm over several ITwoPhaseCommit s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentReader.ICoreDisposedListener Called when the shared core for this SegmentReader is disposed. This listener is called only once all SegmentReader s sharing the same core are disposed. At this point it is safe for apps to evict this reader from any caches keyed on CoreCacheKey . This is the same interface that IFieldCache uses, internally, to evict entries. NOTE: This was CoreClosedListener in Lucene. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums DocsAndPositionsFlags DocsFlags DocValuesFieldUpdatesType DocValuesType DocValues types. Note that DocValues is strongly typed, so a field cannot have different types across different documents. FilteredTermsEnum.AcceptStatus Return value, if term should be accepted or the iteration should END . The *_SEEK values denote, that after handling the current term the enum should call NextSeekTerm(BytesRef) and step forward. IndexOptions Controls how much information is stored in the postings lists. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeTrigger MergeTrigger is passed to FindMerges(MergeTrigger, SegmentInfos) to indicate the event that triggered the merge. OpenMode Specifies the open mode for IndexWriter . StoredFieldVisitor.Status Enumeration of possible return values for NeedsField(FieldInfo) . TermsEnum.SeekStatus Represents returned result from SeekCeil(BytesRef) ."
  },
  "api/Lucene.Net/Lucene.Net.Index.IConcurrentMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IConcurrentMergeScheduler.html",
    "title": "Interface IConcurrentMergeScheduler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IConcurrentMergeScheduler Inherited Members IMergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) IMergeScheduler.Clone() System.IDisposable.Dispose() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IConcurrentMergeScheduler : IMergeScheduler, IDisposable Properties | Improve this Doc View Source MaxMergeCount Declaration int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Declaration int MaxThreadCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeThreadPriority Declaration int MergeThreadPriority { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ClearSuppressExceptions() Declaration void ClearSuppressExceptions() | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Declaration void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount System.Int32 maxThreadCount | Improve this Doc View Source SetMergeThreadPriority(Int32) Declaration void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Declaration void SetSuppressExceptions() | Improve this Doc View Source Sync() Declaration void Sync()"
  },
  "api/Lucene.Net/Lucene.Net.Index.IIndexableField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IIndexableField.html",
    "title": "Interface IIndexableField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IIndexableField Represents a single field for indexing. IndexWriter consumes IEnumerable<IndexableField> as a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IIndexableField Properties | Improve this Doc View Source Boost Returns the field's index-time boost. Only fields can have an index-time boost, if you want to simulate a \"document boost\", then you must pre-multiply it across all the relevant fields yourself. The boost is used to compute the norm factor for the field. By default, in the ComputeNorm(FieldInvertState) method, the boost value is multiplied by the length normalization factor and then rounded by EncodeNormValue(Single) before it is stored in the index. One should attempt to ensure that this product does not overflow the range of that encoding. It is illegal to return a boost other than 1.0f for a field that is not indexed ( IsIndexed is false) or omits normalization values ( OmitNorms returns true). Declaration float Boost { get; } Property Value Type Description System.Single See Also ComputeNorm ( FieldInvertState ) EncodeNormValue(Single) | Improve this Doc View Source IndexableFieldType IIndexableFieldType describing the properties of this field. Declaration IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name Field name Declaration string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as System.Byte or null if the type is non-numeric. Declaration byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as System.Double or null if the type is non-numeric. Declaration double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as System.Int16 or null if the type is non-numeric. Declaration short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as System.Int32 or null if the type is non-numeric. Declaration int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as System.Int64 or null if the type is non-numeric. Declaration long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Non-null if this field has a numeric value. Declaration [Obsolete(\"In .NET, use of this method will cause boxing/unboxing. Instead, use the NumericType property to check the underlying type and call the appropriate GetXXXValue() method to retrieve the value.\")] object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() Non-null if this field has a System.IO.TextReader value Declaration TextReader GetReaderValue() Returns Type Description System.IO.TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as System.Single or null if the type is non-numeric. Declaration float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() Non-null if this field has a string value. Declaration string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Creates the TokenStream used for indexing this field. If appropriate, implementations should use the given Analyzer to create the TokenStream s. Declaration TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Analyzer that should be used to create the TokenStream s from Returns Type Description TokenStream TokenStream value for indexing the document. Should always return a non-null value if the field is to be indexed Exceptions Type Condition System.IO.IOException Can be thrown while creating the TokenStream Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IIndexableFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IIndexableFieldType.html",
    "title": "Interface IIndexableFieldType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IIndexableFieldType Describes the properties of a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IIndexableFieldType Properties | Improve this Doc View Source DocValueType DocValues DocValuesType : if not NONE then the field's value will be indexed into docValues. Declaration DocValuesType DocValueType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source IndexOptions IndexOptions , describing what should be recorded into the inverted index Declaration IndexOptions IndexOptions { get; } Property Value Type Description IndexOptions | Improve this Doc View Source IsIndexed true if this field should be indexed (inverted) Declaration bool IsIndexed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsStored true if the field's value should be stored Declaration bool IsStored { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsTokenized true if this field's value should be analyzed by the Analyzer . This has no effect if IsIndexed returns false . Declaration bool IsTokenized { get; } Property Value Type Description System.Boolean | Improve this Doc View Source OmitNorms true if normalization values should be omitted for the field. This saves memory, but at the expense of scoring quality (length normalization will be disabled), and if you omit norms, you cannot use index-time boosts. Declaration bool OmitNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorOffsets true if this field's token character offsets should also be stored into term vectors. This option is illegal if term vectors are not enabled for the field ( StoreTermVectors is false ) Declaration bool StoreTermVectorOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPayloads true if this field's token payloads should also be stored into the term vectors. This option is illegal if term vector positions are not enabled for the field ( StoreTermVectors is false ). Declaration bool StoreTermVectorPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPositions true if this field's token positions should also be stored into the term vectors. This option is illegal if term vectors are not enabled for the field ( StoreTermVectors is false ). Declaration bool StoreTermVectorPositions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectors true if this field's indexed form should be also stored into term vectors. this builds a miniature inverted-index for this field which can be accessed in a document-oriented way from GetTermVector(Int32, String) . This option is illegal if IsIndexed returns false . Declaration bool StoreTermVectors { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Index.IMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IMergeScheduler.html",
    "title": "Interface IMergeScheduler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IMergeScheduler Inherited Members System.IDisposable.Dispose() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IMergeScheduler : IDisposable Methods | Improve this Doc View Source Clone() Declaration object Clone() Returns Type Description System.Object | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexCommit.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexCommit.html",
    "title": "Class IndexCommit | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexCommit Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader . Changes to the content of an index are made visible only after the writer who made that change commits by writing a new segments file ( segments_N ). This point in time, when the action of writing of a new segments file to the directory is completed, is an index commit. Each index commit point has a unique segments file associated with it. The segments file associated with a later index commit point would have a larger N. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexCommit Implements System.IComparable < IndexCommit > 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.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexCommit : IComparable<IndexCommit> Constructors | Improve this Doc View Source IndexCommit() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected IndexCommit() Properties | Improve this Doc View Source Directory Returns the Directory for the index. Declaration public abstract Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FileNames Returns all index files referenced by this commit point. Declaration public abstract ICollection<string> FileNames { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Generation Returns the generation (the _N in segments_N) for this IndexCommit Declaration public abstract long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsDeleted Returns true if this commit should be deleted; this is only used by IndexWriter after invoking the IndexDeletionPolicy . Declaration public abstract bool IsDeleted { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SegmentCount Returns number of segments referenced by this commit. Declaration public abstract int SegmentCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SegmentsFileName Get the segments file ( segments_N ) associated with this commit point. Declaration public abstract string SegmentsFileName { get; } Property Value Type Description System.String | Improve this Doc View Source UserData Returns userData, previously passed to SetCommitData(IDictionary<String, String>) } for this commit. The dictionary is System.String -> System.String . Declaration public abstract IDictionary<string, string> UserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > Methods | Improve this Doc View Source CompareTo(IndexCommit) Declaration public virtual int CompareTo(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Int32 | Improve this Doc View Source Delete() Delete this commit point. This only applies when using the commit point in the context of IndexWriter 's IndexDeletionPolicy . Upon calling this, the writer is notified that this commit point should be deleted. Decision that a commit-point should be deleted is taken by the IndexDeletionPolicy in effect and therefore this should only be called by its OnInit<T>(IList<T>) or OnCommit<T>(IList<T>) methods. Declaration public abstract void Delete() | Improve this Doc View Source Equals(Object) Two IndexCommits are equal if both their Directory and versions are equal. 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() Implements System.IComparable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexDeletionPolicy.html",
    "title": "Class IndexDeletionPolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexDeletionPolicy Expert: policy for deletion of stale IndexCommit s. Implement this interface, and pass it to one of the IndexWriter or IndexReader constructors, to customize when older point-in-time commits ( IndexCommit ) are deleted from the index directory. The default deletion policy is KeepOnlyLastCommitDeletionPolicy , which always removes old commits as soon as a new commit is done (this matches the behavior before 2.2). One expected use case for this (and the reason why it was first created) is to work around problems with an index directory accessed via filesystems like NFS because NFS does not provide the \"delete on last close\" semantics that Lucene's \"point in time\" search normally relies on. By implementing a custom deletion policy, such as \"a commit is only removed once it has been stale for more than X minutes\", you can give your readers time to refresh to the new commit before IndexWriter removes the old commits. Note that doing so will increase the storage requirements of the index. See LUCENE-710 for details. Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any other IndexWriter or Directory instance. Inheritance System.Object IndexDeletionPolicy KeepOnlyLastCommitDeletionPolicy NoDeletionPolicy SnapshotDeletionPolicy 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.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexDeletionPolicy Constructors | Improve this Doc View Source IndexDeletionPolicy() Sole constructor, typically called by sub-classes constructors. Declaration protected IndexDeletionPolicy() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source OnCommit<T>(IList<T>) this is called each time the writer completed a commit. this gives the policy a chance to remove old commit points with each commit. The policy may now choose to delete old commit points by calling method Delete() of IndexCommit . This method is only called when Commit() } or Dispose() is called, or possibly not at all if the Rollback() } method is called. Note: the last CommitPoint is the most recent one, i.e. the \"front index state\". Be careful not to delete it, unless you know for sure what you are doing, and unless you can afford to lose the index content while doing that. Declaration public abstract void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits List of IndexCommit s, sorted by age (the 0th one is the oldest commit). Type Parameters Name Description T | Improve this Doc View Source OnInit<T>(IList<T>) this is called once when a writer is first instantiated to give the policy a chance to remove old commit points. The writer locates all index commits present in the index directory and calls this method. The policy may choose to delete some of the commit points, doing so by calling method Delete() . Note: the last CommitPoint is the most recent one, i.e. the \"front index state\". Be careful not to delete it, unless you know for sure what you are doing, and unless you can afford to lose the index content while doing that. Declaration public abstract void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits List of current point-in-time commits ( IndexCommit ), sorted by age (the 0th one is the oldest commit). Note that for a new index this method is invoked with an empty list. Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFileNames.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFileNames.html",
    "title": "Class IndexFileNames | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexFileNames This class contains useful constants representing filenames and extensions used by lucene, as well as convenience methods for querying whether a file name matches an extension ( MatchesExtension(String, String) ), as well as generating file names from a segment name, generation and extension ( FileNameFromGeneration(String, String, Int64) , SegmentFileName(String, String, String) ). NOTE : extensions used by codecs are not listed here. You must interact with the Codec directly. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IndexFileNames 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.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexFileNames Fields | Improve this Doc View Source CODEC_FILE_PATTERN All files created by codecs much match this pattern (checked in SegmentInfo ). Declaration public static readonly Regex CODEC_FILE_PATTERN Field Value Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source COMPOUND_FILE_ENTRIES_EXTENSION Extension of compound file entries Declaration public static readonly string COMPOUND_FILE_ENTRIES_EXTENSION Field Value Type Description System.String | Improve this Doc View Source COMPOUND_FILE_EXTENSION Extension of compound file Declaration public static readonly string COMPOUND_FILE_EXTENSION Field Value Type Description System.String | Improve this Doc View Source GEN_EXTENSION Extension of gen file Declaration public static readonly string GEN_EXTENSION Field Value Type Description System.String | Improve this Doc View Source INDEX_EXTENSIONS This array contains all filename extensions used by Lucene's index files, with one exception, namely the extension made up from .s + a number. Also note that Lucene's segments_N files do not have any filename extension. Declaration public static readonly string[] INDEX_EXTENSIONS Field Value Type Description System.String [] | Improve this Doc View Source SEGMENTS Name of the index segment file Declaration public static readonly string SEGMENTS Field Value Type Description System.String | Improve this Doc View Source SEGMENTS_GEN Name of the generation reference file name Declaration public static readonly string SEGMENTS_GEN Field Value Type Description System.String Methods | Improve this Doc View Source FileNameFromGeneration(String, String, Int64) Computes the full file name from base, extension and generation. If the generation is -1, the file name is null . If it's 0, the file name is <base>.<ext>. If it's > 0, the file name is <base>_<gen>.<ext>. NOTE: .<ext> is added to the name only if ext is not an empty string. Declaration public static string FileNameFromGeneration(string base, string ext, long gen) Parameters Type Name Description System.String base main part of the file name System.String ext extension of the filename System.Int64 gen generation Returns Type Description System.String | Improve this Doc View Source GetExtension(String) Return the extension (anything after the first '.'), or null if there is no '.' in the file name. Declaration public static string GetExtension(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String | Improve this Doc View Source MatchesExtension(String, String) Returns true if the given filename ends with the given extension. One should provide a pure extension, without '.'. Declaration public static bool MatchesExtension(string filename, string ext) Parameters Type Name Description System.String filename System.String ext Returns Type Description System.Boolean | Improve this Doc View Source ParseSegmentName(String) Parses the segment name out of the given file name. Declaration public static string ParseSegmentName(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String the segment name only, or filename if it does not contain a '.' and '_'. | Improve this Doc View Source SegmentFileName(String, String, String) Returns a file name that includes the given segment name, your own custom name and extension. The format of the filename is: <segmentName>(_<name>)(.<ext>). NOTE: .<ext> is added to the result file name only if ext is not empty. NOTE: _<segmentSuffix> is added to the result file name only if it's not the empty string NOTE: all custom files should be named using this method, or otherwise some structures may fail to handle them properly (such as if they are added to compound files). Declaration public static string SegmentFileName(string segmentName, string segmentSuffix, string ext) Parameters Type Name Description System.String segmentName System.String segmentSuffix System.String ext Returns Type Description System.String | Improve this Doc View Source StripExtension(String) Removes the extension (anything after the first '.'), otherwise returns the original filename. Declaration public static string StripExtension(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String | Improve this Doc View Source StripSegmentName(String) Strips the segment name out of the given file name. If you used SegmentFileName(String, String, String) or FileNameFromGeneration(String, String, Int64) to create your files, then this method simply removes whatever comes before the first '.', or the second '_' (excluding both). Declaration public static string StripSegmentName(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String the filename with the segment name removed, or the given filename if it does not contain a '.' and '_'."
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooNewException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooNewException.html",
    "title": "Class IndexFormatTooNewException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexFormatTooNewException This exception is thrown when Lucene detects an index that is newer than this Lucene version. Inheritance System.Object System.Exception System.SystemException System.IO.IOException CorruptIndexException IndexFormatTooNewException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexFormatTooNewException : CorruptIndexException, ISerializable Constructors | Improve this Doc View Source IndexFormatTooNewException(DataInput, Int32, Int32, Int32) Creates an IndexFormatTooNewException This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooNewException(DataInput input, int version, int minVersion, int maxVersion) Parameters Type Name Description DataInput input the open file that's too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooNewException(String, Int32, Int32, Int32) Creates an IndexFormatTooNewException This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooNewException(string resourceDesc, int version, int minVersion, int maxVersion) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooOldException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooOldException.html",
    "title": "Class IndexFormatTooOldException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexFormatTooOldException This exception is thrown when Lucene detects an index that is too old for this Lucene version Inheritance System.Object System.Exception System.SystemException System.IO.IOException CorruptIndexException IndexFormatTooOldException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexFormatTooOldException : CorruptIndexException, ISerializable Constructors | Improve this Doc View Source IndexFormatTooOldException(DataInput, Int32, Int32, Int32) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(DataInput input, int version, int minVersion, int maxVersion) Parameters Type Name Description DataInput input the open file that's too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooOldException(DataInput, String) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(DataInput input, string version) Parameters Type Name Description DataInput input the open file that's too old System.String version the version of the file that was too old | Improve this Doc View Source IndexFormatTooOldException(String, Int32, Int32, Int32) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(string resourceDesc, int version, int minVersion, int maxVersion) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooOldException(String, String) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(string resourceDesc, string version) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.String version the version of the file that was too old Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexNotFoundException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexNotFoundException.html",
    "title": "Class IndexNotFoundException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexNotFoundException Signals that no index was found in the System.IO.Directory . Possibly because the directory is empty, however can also indicate an index corruption. Inheritance System.Object System.Exception System.SystemException System.IO.IOException System.IO.FileNotFoundException IndexNotFoundException Implements System.Runtime.Serialization.ISerializable Inherited Members System.IO.FileNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.IO.FileNotFoundException.ToString() System.IO.FileNotFoundException.FileName System.IO.FileNotFoundException.FusionLog System.IO.FileNotFoundException.Message System.Exception.GetBaseException() System.Exception.GetType() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexNotFoundException : FileNotFoundException, ISerializable Constructors | Improve this Doc View Source IndexNotFoundException(String) Creates IndexNotFoundException with the description message. Declaration public IndexNotFoundException(string message) Parameters Type Name Description System.String message Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexOptions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexOptions.html",
    "title": "Enum IndexOptions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum IndexOptions Controls how much information is stored in the postings lists. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum IndexOptions Fields Name Description DOCS_AND_FREQS Only documents and term frequencies are indexed: positions are omitted. this enables normal scoring, except Phrase and other positional queries will throw an exception. DOCS_AND_FREQS_AND_POSITIONS Indexes documents, frequencies and positions. this is a typical default for full-text search: full scoring is enabled and positional queries are supported. DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS Indexes documents, frequencies, positions and offsets. Character offsets are encoded alongside the positions. DOCS_ONLY Only documents are indexed: term frequencies and positions are omitted. Phrase and other positional queries on the field will throw an exception, and scoring will behave as if any term in the document appears only once. NONE No index options will be used. NOTE: This is the same as setting to null in Lucene"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReader.html",
    "title": "Class IndexReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexReader IndexReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. There are two different types of IndexReader s: AtomicReader : These indexes do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. CompositeReader : Instances (like DirectoryReader ) of this reader can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the sub-readers via GetSequentialSubReaders() . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader inherits the CompositeReader abstract class, it is not possible to directly get postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader AtomicReader CompositeReader Implements System.IDisposable 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.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReader : IDisposable Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Expert: Returns a key for this IndexReader that also includes deletions, so IFieldCache / CachingWrapperFilter can find it again. This key must not have Equals()/GetHashCode() methods, so \"equals\" means \"identical\". Declaration public virtual object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Context Expert: Returns the root IndexReaderContext for this IndexReader 's sub-reader tree. Iff this reader is composed of sub readers, i.e. this reader being a composite reader, this method returns a CompositeReaderContext holding the reader's direct children as well as a view of the reader tree's atomic leaf contexts. All sub- IndexReaderContext instances referenced from this readers top-level context are private to this reader and are not shared with another context tree. For example, IndexSearcher uses this API to drive searching by one atomic leaf reader at a time. If this reader is not composed of child readers, this method returns an AtomicReaderContext . Note: Any of the sub- CompositeReaderContext instances referenced from this top-level context do not support Leaves . Only the top-level context maintains the convenience leaf-view for performance reasons. Declaration public abstract IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext | Improve this Doc View Source CoreCacheKey Expert: Returns a key for this IndexReader , so IFieldCache / CachingWrapperFilter can find it again. This key must not have Equals()/GetHashCode() methods, so \"equals\" means \"identical\". Declaration public virtual object CoreCacheKey { get; } Property Value Type Description System.Object | Improve this Doc View Source HasDeletions Returns true if any documents have been deleted. Implementers should consider overriding this property if MaxDoc or NumDocs are not constant-time operations. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Leaves Returns the reader's leaves, or itself if this reader is atomic. This is a convenience method calling this.Context.Leaves . Declaration public IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > See Also Leaves | Improve this Doc View Source MaxDoc Returns one greater than the largest possible document number. this may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. Declaration public abstract int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDeletedDocs Returns the number of deleted documents. Declaration public int NumDeletedDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Returns the number of documents in this index. Declaration public abstract int NumDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source RefCount Expert: returns the current refCount for this reader Declaration public int RefCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddReaderClosedListener(IndexReader.IReaderClosedListener) Expert: adds a IndexReader.IReaderClosedListener . The provided listener will be invoked when this reader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void AddReaderClosedListener(IndexReader.IReaderClosedListener listener) Parameters Type Name Description IndexReader.IReaderClosedListener listener | Improve this Doc View Source DecRef() Expert: decreases the RefCount of this IndexReader instance. If the RefCount drops to 0, then this reader is disposed. If an exception is hit, the RefCount is unchanged. Declaration public void DecRef() Exceptions Type Condition System.IO.IOException in case an System.IO.IOException occurs in DoClose() See Also IncRef() | Improve this Doc View Source Dispose() Closes files associated with this index. Also saves any new deletions to disk. No other methods should be called after this has been called. Declaration public void Dispose() Exceptions Type Condition System.IO.IOException If there is a low-level IO error | Improve this Doc View Source Dispose(Boolean) Closes files associated with this index. This method implements the disposable pattern. It may be overridden to dispose any managed or unmanaged resources, but be sure to call base.Dispose(disposing) to close files associated with the underlying IndexReader . Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing true indicates to dispose all managed and unmanaged resources, false indicates dispose unmanaged resources only | Improve this Doc View Source DocFreq(Term) Returns the number of documents containing the term . This method returns 0 if the term or field does not exist. This method does not take into account deleted documents that have not yet been merged away. Declaration public abstract int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 See Also DocFreq | Improve this Doc View Source DoClose() Implements close. Declaration protected abstract void DoClose() | Improve this Doc View Source Document(Int32) Returns the stored fields of the n th Document in this index. This is just sugar for using DocumentStoredFieldVisitor . NOTE: for performance reasons, this method does not check if the requested document is deleted, and therefore asking for a deleted document may yield unspecified results. Usually this is not required, however you can test if the doc is deleted by checking the IBits returned from GetLiveDocs(IndexReader) . NOTE: only the content of a field is returned, if that field was stored during indexing. Metadata like boost, omitNorm, IndexOptions, tokenized, etc., are not preserved. Declaration public Document Document(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Document Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Expert: visits the fields of a stored document, for custom processing/loading of each field. If you simply want to load all fields, use Document(Int32) . If you want to load a subset, use DocumentStoredFieldVisitor . Declaration public abstract void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor | Improve this Doc View Source Document(Int32, ISet<String>) Like Document(Int32) but only loads the specified fields. Note that this is simply sugar for DocumentStoredFieldVisitor(ISet<String>) . Declaration public Document Document(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID System.Collections.Generic.ISet < System.String > fieldsToLoad Returns Type Description Document | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if this IndexReader or any of its child readers is disposed, otherwise returns. Declaration protected void EnsureOpen() | Improve this Doc View Source Equals(Object) Determines whether two object instances are equal. For caching purposes, IndexReader subclasses are not allowed to implement Equals/GetHashCode, so methods are declared sealed. To lookup instances from caches use CoreCacheKey and CombinedCoreAndDeletesKey . Declaration public override sealed 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 GetDocCount(String) Returns the number of documents that have at least one term for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 See Also DocCount | Improve this Doc View Source GetHashCode() Serves as the default hash function. For caching purposes, IndexReader subclasses are not allowed to implement Equals/GetHashCode, so methods are declared sealed. To lookup instances from caches use CoreCacheKey and CombinedCoreAndDeletesKey . Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSumDocFreq(String) Returns the sum of DocFreq for all terms in this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 See Also SumDocFreq | Improve this Doc View Source GetSumTotalTermFreq(String) Returns the sum of TotalTermFreq for all terms in this field, or -1 if this measure isn't stored by the codec (or if this fields omits term freq and positions). Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 See Also SumTotalTermFreq | Improve this Doc View Source GetTermVector(Int32, String) Retrieve term vector for this document and field, or null if term vectors were not indexed. The returned Fields instance acts like a single-document inverted index (the docID will be 0). Declaration public Terms GetTermVector(int docID, string field) Parameters Type Name Description System.Int32 docID System.String field Returns Type Description Terms | Improve this Doc View Source GetTermVectors(Int32) Retrieve term vectors for this document, or null if term vectors were not indexed. The returned Fields instance acts like a single-document inverted index (the docID will be 0). Declaration public abstract Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields | Improve this Doc View Source IncRef() Expert: increments the RefCount of this IndexReader instance. RefCount s are used to determine when a reader can be disposed 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. Note that Dispose(Boolean) simply calls DecRef() , which means that the IndexReader will not really be disposed until DecRef() has been called for all outstanding references. Declaration public void IncRef() See Also DecRef() TryIncRef() | Improve this Doc View Source Open(IndexCommit) Expert: returns an IndexReader reading the index in the given IndexCommit . Declaration [Obsolete(\"Use DirectoryReader.Open(IndexCommit)\")] public static DirectoryReader Open(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit point to open Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexCommit, Int32) Expert: returns an IndexReader reading the index in the given IndexCommit and termInfosIndexDivisor . Declaration [Obsolete(\"Use DirectoryReader.Open(IndexCommit, int)/>\")] public static DirectoryReader Open(IndexCommit commit, int termInfosIndexDivisor) Parameters Type Name Description IndexCommit commit the commit point to open System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as TermIndexInterval (which can be set in IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N , then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexWriter, Boolean) Open a near real time IndexReader from the IndexWriter . Declaration [Obsolete(\"Use DirectoryReader.Open(IndexWriter, bool)\")] public static DirectoryReader Open(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true, all buffered deletes will be applied (made visible) in the returned reader. If false, the deletes are not applied but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false. Returns Type Description DirectoryReader The new IndexReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error See Also OpenIfChanged ( DirectoryReader , IndexWriter , System.Boolean ) | Improve this Doc View Source Open(Directory) Returns a IndexReader reading the index in the given Directory Declaration [Obsolete(\"Use DirectoryReader.Open(Directory)\")] public static DirectoryReader Open(Directory directory) Parameters Type Name Description Directory directory the index directory Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(Directory, Int32) Expert: Returns a IndexReader reading the index in the given Directory with the given termInfosIndexDivisor . Declaration [Obsolete(\"Use DirectoryReader.Open(Directory, int)\")] public static DirectoryReader Open(Directory directory, int termInfosIndexDivisor) Parameters Type Name Description Directory directory the index directory System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as TermIndexInterval (which can be set on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N , then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source RegisterParentReader(IndexReader) Expert: this method is called by IndexReader s which wrap other readers (e.g. CompositeReader or FilterAtomicReader ) to register the parent at the child (this reader) on construction of the parent. When this reader is disposed, it will mark all registered parents as disposed, too. The references to parent readers are weak only, so they can be GCed once they are no longer in use. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void RegisterParentReader(IndexReader reader) Parameters Type Name Description IndexReader reader | Improve this Doc View Source RemoveReaderClosedListener(IndexReader.IReaderClosedListener) Expert: remove a previously added IndexReader.IReaderClosedListener . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void RemoveReaderClosedListener(IndexReader.IReaderClosedListener listener) Parameters Type Name Description IndexReader.IReaderClosedListener listener | Improve this Doc View Source TotalTermFreq(Term) Returns the total number of occurrences of term across all documents (the sum of the Freq for each doc that has this term). This will be -1 if the codec doesn't support this measure. Note that, like other term measures, this measure does not take deleted documents into account. Declaration public abstract long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 | Improve this Doc View Source TryIncRef() Expert: increments the RefCount of this IndexReader instance only if the IndexReader has not been disposed yet and returns true iff the RefCount was successfully incremented, otherwise false . If this method returns false the reader is either already disposed or is currently being disposed. Either way this reader instance shouldn't be used by an application unless true is returned. RefCount s are used to determine when a reader can be disposed 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. Note that Dispose(Boolean) simply calls DecRef() , which means that the IndexReader will not really be disposed until DecRef() has been called for all outstanding references. Declaration public bool TryIncRef() Returns Type Description System.Boolean See Also DecRef() IncRef() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReader.IReaderClosedListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReader.IReaderClosedListener.html",
    "title": "Interface IndexReader.IReaderClosedListener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IndexReader.IReaderClosedListener A custom listener that's invoked when the IndexReader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IReaderClosedListener Methods | Improve this Doc View Source OnClose(IndexReader) Invoked when the IndexReader is closed. Declaration void OnClose(IndexReader reader) Parameters Type Name Description IndexReader reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReaderContext.html",
    "title": "Class IndexReaderContext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexReaderContext A struct like class that represents a hierarchical relationship between IndexReader instances. Inheritance System.Object IndexReaderContext AtomicReaderContext CompositeReaderContext 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.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReaderContext Properties | Improve this Doc View Source Children Returns the context's children iff this context is a composite context otherwise null . Declaration public abstract IList<IndexReaderContext> Children { get; } Property Value Type Description System.Collections.Generic.IList < IndexReaderContext > | Improve this Doc View Source DocBaseInParent the doc base for this reader in the parent, 0 if parent is null Declaration public int DocBaseInParent { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsTopLevel true if this context struct represents the top level reader within the hierarchical context Declaration public bool IsTopLevel { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Leaves Returns the context's leaves if this context is a top-level context. For convenience, if this is an AtomicReaderContext this returns itself as the only leaf. Note: this is convenience method since leaves can always be obtained by walking the context tree using Children . Declaration public abstract IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > Exceptions Type Condition System.InvalidOperationException if this is not a top-level context. See Also Children | Improve this Doc View Source OrdInParent the ord for this reader in the parent, 0 if parent is null Declaration public int OrdInParent { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Parent The reader context for this reader's immediate parent, or null if none Declaration public CompositeReaderContext Parent { get; } Property Value Type Description CompositeReaderContext | Improve this Doc View Source Reader Returns the IndexReader , this context represents. Declaration public abstract IndexReader Reader { get; } Property Value Type Description IndexReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexUpgrader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexUpgrader.html",
    "title": "Class IndexUpgrader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexUpgrader This is an easy-to-use tool that upgrades all segments of an index from previous Lucene versions to the current segment file format. It can be used from command line: java -cp lucene-core.jar Lucene.Net.Index.IndexUpgrader [-delete-prior-commits] [-verbose] indexDir Alternatively this class can be instantiated and Upgrade() invoked. It uses UpgradeIndexMergePolicy and triggers the upgrade via an ForceMerge(Int32) request to IndexWriter . This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify -delete-prior-commits to override this, allowing the tool to delete all but the last commit. From .NET code this can be enabled by passing true to IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) . Warning: this tool may reorder documents if the index was partially upgraded before execution (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a full ForceMerge instead. The MergePolicy set by IndexWriterConfig may also reorder documents. Inheritance System.Object IndexUpgrader 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.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexUpgrader Constructors | Improve this Doc View Source IndexUpgrader(Directory, IndexWriterConfig, Boolean) Creates index upgrader on the given directory, using an IndexWriter using the given config. You have the possibility to upgrade indexes with multiple commit points by removing all older ones. Declaration public IndexUpgrader(Directory dir, IndexWriterConfig iwc, bool deletePriorCommits) Parameters Type Name Description Directory dir IndexWriterConfig iwc System.Boolean deletePriorCommits | Improve this Doc View Source IndexUpgrader(Directory, LuceneVersion) Creates index upgrader on the given directory, using an IndexWriter using the given matchVersion . The tool refuses to upgrade indexes with multiple commit points. Declaration public IndexUpgrader(Directory dir, LuceneVersion matchVersion) Parameters Type Name Description Directory dir LuceneVersion matchVersion | Improve this Doc View Source IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) Creates index upgrader on the given directory, using an IndexWriter using the given matchVersion . You have the possibility to upgrade indexes with multiple commit points by removing all older ones. If infoStream is not null , all logging output will be sent to this stream. Declaration public IndexUpgrader(Directory dir, LuceneVersion matchVersion, TextWriter infoStream, bool deletePriorCommits) Parameters Type Name Description Directory dir LuceneVersion matchVersion System.IO.TextWriter infoStream System.Boolean deletePriorCommits Methods | Improve this Doc View Source Main(String[]) Main method to run IndexUpgrader from the command-line. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source ParseArgs(String[]) Declaration public static IndexUpgrader ParseArgs(string[] args) Parameters Type Name Description System.String [] args Returns Type Description IndexUpgrader | Improve this Doc View Source Upgrade() Perform the upgrade. Declaration public void Upgrade()"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.html",
    "title": "Class IndexWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexWriter An IndexWriter creates and maintains an index. Inheritance System.Object IndexWriter Implements System.IDisposable 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.Index Assembly : Lucene.Net.dll Syntax public class IndexWriter : IDisposable, ITwoPhaseCommit Remarks The OpenMode option on OpenMode determines whether a new index is created, or whether an existing index is opened. Note that you can open an index with CREATE even while readers are using the index. The old readers will continue to search the \"point in time\" snapshot they had opened, and won't see the newly created index until they re-open. If CREATE_OR_APPEND is used IndexWriter will create a new index if there is not already an index at the provided path and otherwise open the existing index. In either case, documents are added with AddDocument(IEnumerable<IIndexableField>) and removed with DeleteDocuments(Term) or DeleteDocuments(Query) . A document can be updated with UpdateDocument(Term, IEnumerable<IIndexableField>) (which just deletes and then adds the entire document). When finished adding, deleting and updating documents, Dispose() should be called. These changes are buffered in memory and periodically flushed to the Directory (during the above method calls). A flush is triggered when there are enough added documents since the last flush. Flushing is triggered either by RAM usage of the documents (see RAMBufferSizeMB ) or the number of added documents (see MaxBufferedDocs ). The default is to flush when RAM usage hits DEFAULT_RAM_BUFFER_SIZE_MB MB. For best indexing speed you should flush by RAM usage with a large RAM buffer. Additionally, if IndexWriter reaches the configured number of buffered deletes (see MaxBufferedDeleteTerms ) the deleted terms and queries are flushed and applied to existing segments. In contrast to the other flush options RAMBufferSizeMB and MaxBufferedDocs , deleted terms won't trigger a segment flush. Note that flushing just moves the internal buffered state in IndexWriter into the index, but these changes are not visible to IndexReader until either Commit() or Dispose() is called. A flush may also trigger one or more segment merges which by default run with a background thread so as not to block the addDocument calls (see below for changing the Lucene.Net.Index.IndexWriter.mergeScheduler ). Opening an IndexWriter creates a lock file for the directory in use. Trying to open another IndexWriter on the same directory will lead to a LockObtainFailedException . The LockObtainFailedException is also thrown if an IndexReader on the same directory is used to delete documents from the index. Expert: IndexWriter allows an optional IndexDeletionPolicy implementation to be specified. You can use this to control when prior commits are deleted from the index. The default policy is KeepOnlyLastCommitDeletionPolicy which removes all prior commits as soon as a new commit is done (this matches behavior before 2.2). Creating your own policy can allow you to explicitly keep previous \"point in time\" commits alive in the index for some time, to allow readers to refresh to the new commit without having the old commit deleted out from under them. This is necessary on filesystems like NFS that do not support \"delete on last close\" semantics, which Lucene's \"point in time\" search normally relies on. Expert: IndexWriter allows you to separately change the Lucene.Net.Index.IndexWriter.mergePolicy and the Lucene.Net.Index.IndexWriter.mergeScheduler . The Lucene.Net.Index.IndexWriter.mergePolicy is invoked whenever there are changes to the segments in the index. Its role is to select which merges to do, if any, and return a MergePolicy.MergeSpecification describing the merges. The default is LogByteSizeMergePolicy . Then, the MergeScheduler is invoked with the requested merges and it decides when and how to run the merges. The default is ConcurrentMergeScheduler . NOTE : if you hit an System.OutOfMemoryException then IndexWriter will quietly record this fact and block all future segment commits. This is a defensive measure in case any internal state (buffered documents and deletions) were corrupted. Any subsequent calls to Commit() will throw an System.InvalidOperationException . The only course of action is to call Dispose() , which internally will call Rollback() , to undo any changes to the index since the last commit. You can also just call Rollback() directly. NOTE : IndexWriter instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexWriter instance as this may cause deadlock; use your own (non-Lucene) objects instead. NOTE : If you call System.Threading.Thread.Interrupt on a thread that's within IndexWriter , IndexWriter will try to catch this (eg, if it's in a Wait() or System.Threading.Thread.Sleep(System.Int32) ), and will then throw the unchecked exception System.Threading.ThreadInterruptedException and clear the interrupt status on the thread. Constructors | Improve this Doc View Source IndexWriter(Directory, IndexWriterConfig) Constructs a new IndexWriter per the settings given in conf . If you want to make \"live\" changes to this writer instance, use Config . NOTE: after ths writer is created, the given configuration instance cannot be passed to another writer. If you intend to do so, you should Clone() it beforehand. Declaration public IndexWriter(Directory d, IndexWriterConfig conf) Parameters Type Name Description Directory d the index directory. The index is either created or appended according OpenMode . IndexWriterConfig conf the configuration settings according to which IndexWriter should be initialized. Exceptions Type Condition System.IO.IOException if the directory cannot be read/written to, or if it does not exist and OpenMode is APPEND or if there is any other low-level IO error Fields | Improve this Doc View Source MAX_TERM_LENGTH Absolute hard maximum length for a term, in bytes once encoded as UTF8. If a term arrives from the analyzer longer than this length, an System.ArgumentException is thrown and a message is printed to Lucene.Net.Index.IndexWriter.infoStream , if set (see SetInfoStream(InfoStream) ). Declaration public static readonly int MAX_TERM_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source SOURCE Key for the source of a segment in the Diagnostics . Declaration public static readonly string SOURCE Field Value Type Description System.String | Improve this Doc View Source SOURCE_ADDINDEXES_READERS Source of a segment which results from a call to AddIndexes(IndexReader[]) . Declaration public static readonly string SOURCE_ADDINDEXES_READERS Field Value Type Description System.String | Improve this Doc View Source SOURCE_FLUSH Source of a segment which results from a flush. Declaration public static readonly string SOURCE_FLUSH Field Value Type Description System.String | Improve this Doc View Source SOURCE_MERGE Source of a segment which results from a merge of other segments. Declaration public static readonly string SOURCE_MERGE Field Value Type Description System.String | Improve this Doc View Source WRITE_LOCK_NAME Name of the write lock in the index. Declaration public static readonly string WRITE_LOCK_NAME Field Value Type Description System.String Properties | Improve this Doc View Source Analyzer Gets the analyzer used by this index. Declaration public virtual Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source CommitData Returns the commit user data map that was last committed, or the one that was set on SetCommitData(IDictionary<String, String>) . Declaration public IDictionary<string, string> CommitData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Config Returns a LiveIndexWriterConfig , which can be used to query the IndexWriter current settings, as well as modify \"live\" ones. Declaration public virtual LiveIndexWriterConfig Config { get; } Property Value Type Description LiveIndexWriterConfig | Improve this Doc View Source Directory Gets the Directory used by this index. Declaration public virtual Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source IsClosed Declaration public virtual bool IsClosed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source KeepFullyDeletedSegments Only for testing. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual bool KeepFullyDeletedSegments { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxDoc Gets total number of docs in this index, including docs not yet flushed (still in the RAM buffer), not counting deletions. Declaration public virtual int MaxDoc { get; } Property Value Type Description System.Int32 See Also NumDocs | Improve this Doc View Source MergingSegments Expert: to be used by a MergePolicy to avoid selecting merges for segments already being merged. The returned collection is not cloned, and thus is only safe to access if you hold IndexWriter 's lock (which you do when IndexWriter invokes the MergePolicy ). Do not alter the returned collection! Declaration public virtual ICollection<SegmentCommitInfo> MergingSegments { get; } Property Value Type Description System.Collections.Generic.ICollection < SegmentCommitInfo > | Improve this Doc View Source NumDocs Gets total number of docs in this index, including docs not yet flushed (still in the RAM buffer), and including deletions. NOTE: buffered deletions are not counted. If you really need these to be counted you should call Commit() first. Declaration public virtual int NumDocs { get; } Property Value Type Description System.Int32 See Also MaxDoc Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Adds a document to this index. Note that if an System.Exception is hit (for example disk full) then the index will be consistent, but this document may not have been added. Furthermore, it's possible the index will have one segment in non-compound format even when using compound files (when a merge has partially succeeded). This method periodically flushes pending documents to the Directory (see IndexWriter ), and also periodically triggers segment merges in the index according to the MergePolicy in use. Merges temporarily consume space in the directory. The amount of space required is up to 1X the size of all segments being merged, when no readers/searchers are open against the index, and up to 2X the size of all segments being merged when readers/searchers are open against the index (see ForceMerge(Int32) for details). The sequence of primitive merge operations performed is governed by the merge policy. Note that each term in the document can be no longer than MAX_TERM_LENGTH in bytes, otherwise an System.ArgumentException will be thrown. Note that it's possible to create an invalid Unicode string in java if a UTF16 surrogate pair is malformed. In this case, the invalid characters are silently replaced with the Unicode replacement character U+FFFD. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > doc Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Adds a document to this index, using the provided analyzer instead of the value of Analyzer . See AddDocument(IEnumerable<IIndexableField>) for details on index and IndexWriter state after an System.Exception , and flushing/merging temporary free space requirements. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc, Analyzer analyzer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > doc Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Atomically adds a block of documents with sequentially assigned document IDs, such that an external reader will see all or none of the documents. WARNING : the index does not currently record which documents were added as a block. Today this is fine, because merging will preserve a block. The order of documents within a segment will be preserved, even when child documents within a block are deleted. Most search features (like result grouping and block joining) require you to mark documents; when these documents are deleted these search features will not work as expected. Obviously adding documents to an existing block will require you the reindex the entire block. However it's possible that in the future Lucene may merge more aggressively re-order documents (for example, perhaps to obtain better index compression), in which case you may need to fully re-index your documents at that time. See AddDocument(IEnumerable<IIndexableField>) for details on index and IndexWriter state after an System.Exception , and flushing/merging temporary free space requirements. NOTE : tools that do offline splitting of an index (for example, IndexSplitter in Lucene.Net.Misc) or re-sorting of documents (for example, IndexSorter in contrib) are not aware of these atomically added documents and will likely break them up. Use such tools at your own risk! NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Atomically adds a block of documents, analyzed using the provided analyzer , with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer analyzer) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddIndexes(IndexReader[]) Merges the provided indexes into this index. The provided IndexReader s are not closed. See AddIndexes(IndexReader[]) for details on transactional semantics, temporary free space required in the Directory , and non-CFS segments on an System.Exception . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. NOTE: empty segments are dropped by this method and not added to this index. NOTE: this method merges all given IndexReader s in one merge. If you intend to merge a large number of readers, it may be better to call this method multiple times, each time with a small set of readers. In principle, if you use a merge policy with a mergeFactor or maxMergeAtOnce parameter, you should pass that many readers in one call. Also, if the given readers are DirectoryReader s, they can be opened with termIndexInterval=-1 to save RAM, since during merge the in-memory structure is not used. See Open(Directory, Int32) . NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddIndexes(Directory[]) Adds all segments from an array of indexes into this index. This may be used to parallelize batch indexing. A large document collection can be broken into sub-collections. Each sub-collection can be indexed in parallel, on a different thread, process or machine. The complete index can then be created by merging sub-collection indexes with this method. NOTE: this method acquires the write lock in each directory, to ensure that no IndexWriter is currently open or tries to open while this is running. This method is transactional in how System.Exception s are handled: it does not commit a new segments_N file until all indexes are added. this means if an System.Exception occurs (for example disk full), then either no indexes will have been added or they all will have been. Note that this requires temporary free space in the Directory up to 2X the sum of all input indexes (including the starting index). If readers/searchers are open against the starting index, then temporary free space required will be higher by the size of the starting index (see ForceMerge(Int32) for details). NOTE: this method only copies the segments of the incoming indexes and does not merge them. Therefore deleted documents are not removed and the new segments are not merged with the existing ones. This requires this index not be among those to be added. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error LockObtainFailedException if we were unable to acquire the write lock in at least one directory | Improve this Doc View Source Commit() Commits all pending changes (added & deleted documents, segment merges, added indexes, etc.) to the index, and syncs all referenced index files, such that a reader will see the changes and the index updates will survive an OS or machine crash or power loss. Note that this does not wait for any running background merges to finish. This may be a costly operation, so you should test the cost in your application and do it only when really necessary. Note that this operation calls Sync(ICollection<String>) on the index files. That call should not return until the file contents & metadata are on stable storage. For FSDirectory , this calls the OS's fsync. But, beware: some hardware devices may in fact cache writes even during fsync, and return before the bits are actually on stable storage, to give the appearance of faster performance. If you have such a device, and it does not have a battery backup (for example) then on power loss it may still lose data. Lucene cannot guarantee consistency on such devices. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public void Commit() | Improve this Doc View Source DeleteAll() Delete all documents in the index. This method will drop all buffered documents and will remove all segments from the index. This change will not be visible until a Commit() has been called. This method can be rolled back using Rollback() . NOTE: this method is much faster than using DeleteDocuments(new MatchAllDocsQuery()) . Yet, this method also has different semantics compared to DeleteDocuments(Query) / DeleteDocuments(Query[]) since internal data-structures are cleared as well as all segment information is forcefully dropped anti-viral semantics like omitting norms are reset or doc value types are cleared. Essentially a call to DeleteAll() is equivalent to creating a new IndexWriter with CREATE which a delete query only marks documents as deleted. NOTE: this method will forcefully abort all merges in progress. If other threads are running ForceMerge(Int32) , AddIndexes(IndexReader[]) or ForceMergeDeletes() methods, they may receive MergePolicy.MergeAbortedException s. Declaration public virtual void DeleteAll() | Improve this Doc View Source DeleteDocuments(Term) Deletes the document(s) containing term . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(Term term) Parameters Type Name Description Term term the term to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteDocuments(Term[]) Deletes the document(s) containing any of the terms. All given deletes are applied and flushed atomically at the same time. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(params Term[] terms) Parameters Type Name Description Term [] terms array of terms to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteDocuments(Query) Deletes the document(s) matching the provided query. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(Query query) Parameters Type Name Description Query query the query to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteDocuments(Query[]) Deletes the document(s) matching any of the provided queries. All given deletes are applied and flushed atomically at the same time. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(params Query[] queries) Parameters Type Name Description Query [] queries array of queries to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteUnusedFiles() Expert: remove any index files that are no longer used. IndexWriter normally deletes unused files itself, during indexing. However, on Windows, which disallows deletion of open files, if there is a reader open on the index then those files cannot be deleted. This is fine, because IndexWriter will periodically retry the deletion. However, IndexWriter doesn't try that often: only on open, close, flushing a new segment, and finishing a merge. If you don't do any of these actions with your IndexWriter , you'll see the unused files linger. If that's a problem, call this method to delete them (once you've closed the open readers that were preventing their deletion). In addition, you can call this method to delete unreferenced index commits. this might be useful if you are using an IndexDeletionPolicy which holds onto index commits until some criteria are met, but those commits are no longer needed. Otherwise, those commits will be deleted the next time Commit() is called. Declaration public virtual void DeleteUnusedFiles() | Improve this Doc View Source Dispose() Commits all changes to an index, waits for pending merges to complete, and closes all associated files. This is a \"slow graceful shutdown\" which may take a long time especially if a big merge is pending: If you only want to close resources use Rollback() . If you only want to commit pending changes and close resources see Dispose(Boolean) . Note that this may be a costly operation, so, try to re-use a single writer instead of closing and opening a new one. See Commit() for caveats about write caching done by some IO devices. If an System.Exception is hit during close, eg due to disk full or some other reason, then both the on-disk index and the internal state of the IndexWriter instance will be consistent. However, the close will not be complete even though part of it (flushing buffered documents) may have succeeded, so the write lock will still be held. If you can correct the underlying cause (eg free up some disk space) then you can call Dispose() again. Failing that, if you want to force the write lock to be released (dangerous, because you may then lose buffered docs in the IndexWriter instance) then you can do something like this: try { writer.Dispose(); } finally { if (IndexWriter.IsLocked(directory)) { IndexWriter.Unlock(directory); } } after which, you must be certain not to use the writer instance anymore. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer, again. See IndexWriter for details. Declaration public void Dispose() Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Dispose(Boolean) Closes the index with or without waiting for currently running merges to finish. This is only meaningful when using a MergeScheduler that runs merges in background threads. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer, again. See IndexWriter for details. NOTE : it is dangerous to always call Dispose(false) , especially when IndexWriter is not open for very long, because this can result in \"merge starvation\" whereby long merges will never have a chance to finish. This will cause too many segments in your index over time. Declaration public virtual void Dispose(bool waitForMerges) Parameters Type Name Description System.Boolean waitForMerges if true , this call will block until all merges complete; else, it will ask all running merges to abort, wait until those merges have finished (which should be at most a few seconds), and then return. | Improve this Doc View Source DoAfterFlush() A hook for extending classes to execute operations after pending added and deleted documents have been flushed to the Directory but before the change is committed (new segments_N file written). Declaration protected virtual void DoAfterFlush() | Improve this Doc View Source DoBeforeFlush() A hook for extending classes to execute operations before pending added and deleted documents are flushed to the Directory . Declaration protected virtual void DoBeforeFlush() | Improve this Doc View Source EnsureOpen() Used internally to throw an System.ObjectDisposedException if this IndexWriter has been disposed ( closed=true ) or is in the process of disposing ( closing=true ). Calls EnsureOpen(Boolean) . Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException if this IndexWriter is disposed | Improve this Doc View Source EnsureOpen(Boolean) Used internally to throw an System.ObjectDisposedException if this IndexWriter has been disposed or is in the process of diposing. Declaration protected void EnsureOpen(bool failIfDisposing) Parameters Type Name Description System.Boolean failIfDisposing if true , also fail when IndexWriter is in the process of disposing ( closing=true ) but not yet done disposing ( closed=false ) Exceptions Type Condition System.ObjectDisposedException if this IndexWriter is closed or in the process of closing | Improve this Doc View Source Flush(Boolean, Boolean) Flush all in-memory buffered updates (adds and deletes) to the Directory . Declaration public void Flush(bool triggerMerge, bool applyAllDeletes) Parameters Type Name Description System.Boolean triggerMerge if true , we may merge segments (if deletes or docs were flushed) if necessary System.Boolean applyAllDeletes whether pending deletes should also | Improve this Doc View Source ForceMerge(Int32) Forces merge policy to merge segments until there are <= maxNumSegments . The actual merges to be executed are determined by the MergePolicy . This is a horribly costly operation, especially when you pass a small maxNumSegments ; usually you should only call this if the index is static (will no longer be changed). Note that this requires up to 2X the index size free space in your Directory (3X if you're using compound file format). For example, if your index size is 10 MB then you need up to 20 MB free for this to complete (30 MB if you're using compound file format). Also, it's best to call Commit() afterwards, to allow IndexWriter to free up disk space. If some but not all readers re-open while merging is underway, this will cause > 2X temporary space to be consumed as those new readers will then hold open the temporary segments at that time. It is best not to re-open readers while merging is running. The actual temporary usage could be much less than these figures (it depends on many factors). In general, once this completes, the total size of the index will be less than the size of the starting index. It could be quite a bit smaller (if there were many pending deletes) or just slightly smaller. If an System.Exception is hit, for example due to disk full, the index will not be corrupted and no documents will be lost. However, it may have been partially merged (some segments were merged but not all), and it's possible that one of the segments in the index will be in non-compound format even when using compound file format. This will occur when the System.Exception is hit during conversion of the segment into compound format. This call will merge those segments present in the index when the call started. If other threads are still adding documents and flushing segments, those newly created segments will not be merged unless you call ForceMerge(Int32) again. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void ForceMerge(int maxNumSegments) Parameters Type Name Description System.Int32 maxNumSegments maximum number of segments left in the index after merging finishes Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also FindMerges ( MergeTrigger , SegmentInfos ) | Improve this Doc View Source ForceMerge(Int32, Boolean) Just like ForceMerge(Int32) , except you can specify whether the call should block until all merging completes. This is only meaningful with a Lucene.Net.Index.IndexWriter.mergeScheduler that is able to run merges in background threads. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void ForceMerge(int maxNumSegments, bool doWait) Parameters Type Name Description System.Int32 maxNumSegments System.Boolean doWait | Improve this Doc View Source ForceMergeDeletes() Forces merging of all segments that have deleted documents. The actual merges to be executed are determined by the MergePolicy . For example, the default TieredMergePolicy will only pick a segment if the percentage of deleted docs is over 10%. This is often a horribly costly operation; rarely is it warranted. To see how many deletions you have pending in your index, call NumDeletedDocs . NOTE : this method first flushes a new segment (if there are indexed documents), and applies all buffered deletes. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void ForceMergeDeletes() | Improve this Doc View Source ForceMergeDeletes(Boolean) Just like ForceMergeDeletes() , except you can specify whether the call should block until the operation completes. This is only meaningful with a MergeScheduler that is able to run merges in background threads. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void ForceMergeDeletes(bool doWait) Parameters Type Name Description System.Boolean doWait | Improve this Doc View Source GetReader(Boolean) Expert: returns a readonly reader, covering all committed as well as un-committed changes to the index. this provides \"near real-time\" searching, in that changes made during an IndexWriter session can be quickly made available for searching without closing the writer nor calling Commit() . Note that this is functionally equivalent to calling Flush() and then opening a new reader. But the turnaround time of this method should be faster since it avoids the potentially costly Commit() . You must close the IndexReader returned by this method once you are done using it. It's near real-time because there is no hard guarantee on how quickly you can get a new reader after making changes with IndexWriter . You'll have to experiment in your situation to determine if it's fast enough. As this is a new and experimental feature, please report back on your findings so we can learn, improve and iterate. The resulting reader supports DoOpenIfChanged() , but that call will simply forward back to this method (though this may change in the future). The very first time this method is called, this writer instance will make every effort to pool the readers that it opens for doing merges, applying deletes, etc. This means additional resources (RAM, file descriptors, CPU time) will be consumed. For lower latency on reopening a reader, you should set MergedSegmentWarmer to pre-warm a newly merged segment before it's committed to the index. This is important for minimizing index-to-search delay after a large merge. If an AddIndexes* call is running in another thread, then this reader will only search those segments from the foreign index that have been successfully copied over, so far. NOTE : Once the writer is disposed, any outstanding readers may continue to be used. However, if you attempt to reopen any of those readers, you'll hit an System.ObjectDisposedException . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual DirectoryReader GetReader(bool applyAllDeletes) Parameters Type Name Description System.Boolean applyAllDeletes Returns Type Description DirectoryReader IndexReader that covers entire index plus all changes made so far by this IndexWriter instance Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source HasDeletions() Returns true if this index has deletions (including buffered deletions). Note that this will return true if there are buffered Term/Query deletions, even if it turns out those buffered deletions don't match any documents. Also, if a merge kicked off as a result of flushing a Declaration public virtual bool HasDeletions() Returns Type Description System.Boolean | Improve this Doc View Source HasPendingMerges() Expert: returns true if there are merges waiting to be scheduled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool HasPendingMerges() Returns Type Description System.Boolean | Improve this Doc View Source HasUncommittedChanges() Returns true if there may be changes that have not been committed. There are cases where this may return true when there are no actual \"real\" changes to the index, for example if you've deleted by Term or Query but that Term or Query does not match any documents. Also, if a merge kicked off as a result of flushing a new segment during Commit() , or a concurrent merged finished, this method may return true right after you had just called Commit() . Declaration public bool HasUncommittedChanges() Returns Type Description System.Boolean | Improve this Doc View Source IsLocked(Directory) Returns true iff the index in the named directory is currently locked. Declaration public static bool IsLocked(Directory directory) Parameters Type Name Description Directory directory the directory to check for a lock Returns Type Description System.Boolean Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source MaybeMerge() Expert: asks the Lucene.Net.Index.IndexWriter.mergePolicy whether any merges are necessary now and if so, runs the requested merges and then iterate (test again if merges are needed) until no more merges are returned by the Lucene.Net.Index.IndexWriter.mergePolicy . Explicit calls to MaybeMerge() are usually not necessary. The most common case is when merge policy parameters have changed. this method will call the Lucene.Net.Index.IndexWriter.mergePolicy with EXPLICIT . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public void MaybeMerge() | Improve this Doc View Source Merge(MergePolicy.OneMerge) Merges the indicated segments, replacing them in the stack with a single segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void Merge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source MergeFinish(MergePolicy.OneMerge) Does fininishing for a merge, which is fast but holds the synchronized lock on IndexWriter instance. Declaration public void MergeFinish(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source NextMerge() Expert: the Lucene.Net.Index.IndexWriter.mergeScheduler calls this method to retrieve the next merge requested by the MergePolicy This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual MergePolicy.OneMerge NextMerge() Returns Type Description MergePolicy.OneMerge | Improve this Doc View Source NumDeletedDocs(SegmentCommitInfo) Obtain the number of deleted docs for a pooled reader. If the reader isn't being pooled, the segmentInfo's delCount is returned. Declaration public virtual int NumDeletedDocs(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int32 | Improve this Doc View Source NumRamDocs() Expert: Return the number of documents currently buffered in RAM. Declaration public int NumRamDocs() Returns Type Description System.Int32 | Improve this Doc View Source PrepareCommit() Expert: prepare for commit. This does the first phase of 2-phase commit. this method does all steps necessary to commit changes since this writer was opened: flushes pending added and deleted docs, syncs the index files, writes most of next segments_N file. After calling this you must call either Commit() to finish the commit, or Rollback() to revert the commit and undo all changes done since the writer was opened. You can also just call Commit() directly without PrepareCommit() first in which case that method will internally call PrepareCommit() . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public void PrepareCommit() | Improve this Doc View Source RamSizeInBytes() Expert: Return the total size of all index files currently cached in memory. Useful for size management with flushRamDocs() Declaration public long RamSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source Rollback() Close the IndexWriter without committing any changes that have occurred since the last commit (or since it was opened, if commit hasn't been called). this removes any temporary files that had been created, after which the state of the index will be the same as it was when Commit() was last called or when this writer was first opened. This also clears a previous call to PrepareCommit() . Declaration public virtual void Rollback() Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source SegString() Returns a string description of all segments, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString() Returns Type Description System.String | Improve this Doc View Source SegString(SegmentCommitInfo) Returns a string description of the specified segment, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.String | Improve this Doc View Source SegString(IEnumerable<SegmentCommitInfo>) Returns a string description of the specified segments, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString(IEnumerable<SegmentCommitInfo> infos) Parameters Type Name Description System.Collections.Generic.IEnumerable < SegmentCommitInfo > infos Returns Type Description System.String | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Sets the commit user data map. That method is considered a transaction by IndexWriter and will be committed ( Commit() even if no other changes were made to the writer instance. Note that you must call this method before PrepareCommit() , or otherwise it won't be included in the follow-on Commit() . NOTE: the dictionary is cloned internally, therefore altering the dictionary's contents after calling this method has no effect. Declaration public void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > commitUserData | Improve this Doc View Source TryDeleteDocument(IndexReader, Int32) Expert: attempts to delete by document ID, as long as the provided readerIn is a near-real-time reader (from Open(IndexWriter, Boolean) . If the provided readerIn is an NRT reader obtained from this writer, and its segment has not been merged away, then the delete succeeds and this method returns true ; else, it returns false the caller must then separately delete by Term or Query. NOTE : this method can only delete documents visible to the currently open NRT reader. If you need to delete documents indexed after opening the NRT reader you must use the other DeleteDocument() methods (e.g., DeleteDocuments(Term) ). Declaration public virtual bool TryDeleteDocument(IndexReader readerIn, int docID) Parameters Type Name Description IndexReader readerIn System.Int32 docID Returns Type Description System.Boolean | Improve this Doc View Source Unlock(Directory) Forcibly unlocks the index 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 index. Declaration public static void Unlock(Directory directory) Parameters Type Name Description Directory directory | Improve this Doc View Source UpdateBinaryDocValue(Term, String, BytesRef) Updates a document's BinaryDocValues for field to the given value . this method can be used to 'unset' a document's value by passing null as the new value . Also, you can only update fields that already exist in the index, not add new fields through this method. NOTE: this method currently replaces the existing value of all affected documents with the new value. NOTE: if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateBinaryDocValue(Term term, string field, BytesRef value) Parameters Type Name Description Term term the term to identify the document(s) to be updated System.String field field name of the BinaryDocValues field BytesRef value new value for the field Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Updates a document by first deleting the document(s) containing term and then adding the new document. The delete and then add are atomic as seen by a reader on the same index (flush may happen only after the add). NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term term the term to identify the document(s) to be deleted System.Collections.Generic.IEnumerable < IIndexableField > doc the document to be added Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) Updates a document by first deleting the document(s) containing term and then adding the new document. The delete and then add are atomic as seen by a reader on the same index (flush may happen only after the add). NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc, Analyzer analyzer) Parameters Type Name Description Term term the term to identify the document(s) to be deleted System.Collections.Generic.IEnumerable < IIndexableField > doc the document to be added Analyzer analyzer the analyzer to use when analyzing the document Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Atomically deletes documents matching the provided delTerm and adds a block of documents with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term delTerm System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Atomically deletes documents matching the provided delTerm and adds a block of documents, analyzed using the provided analyzer , with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer analyzer) Parameters Type Name Description Term delTerm System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) | Improve this Doc View Source UpdateNumericDocValue(Term, String, Nullable<Int64>) Updates a document's NumericDocValues for field to the given value . This method can be used to 'unset' a document's value by passing null as the new value . Also, you can only update fields that already exist in the index, not add new fields through this method. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateNumericDocValue(Term term, string field, long? value) Parameters Type Name Description Term term the term to identify the document(s) to be updated System.String field field name of the NumericDocValues field System.Nullable < System.Int64 > value new value for the field Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source WaitForMerges() Wait for any currently outstanding merges to finish. It is guaranteed that any merges started prior to calling this method will have completed once this method completes. Declaration public virtual void WaitForMerges() Implements System.IDisposable ITwoPhaseCommit"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IEvent.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IEvent.html",
    "title": "Interface IndexWriter.IEvent | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IndexWriter.IEvent Interface for internal atomic events. See Lucene.Net.Index.DocumentsWriter for details. Events are executed concurrently and no order is guaranteed. Each event should only rely on the serializeability within it's process method. All actions that must happen before or after a certain action must be encoded inside the Process(IndexWriter, Boolean, Boolean) method. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IEvent Methods | Improve this Doc View Source Process(IndexWriter, Boolean, Boolean) Processes the event. this method is called by the IndexWriter passed as the first argument. Declaration void Process(IndexWriter writer, bool triggerMerge, bool clearBuffers) Parameters Type Name Description IndexWriter writer the IndexWriter that executes the event. System.Boolean triggerMerge false iff this event should not trigger any segment merges System.Boolean clearBuffers true iff this event should clear all buffers associated with the event. Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IndexReaderWarmer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IndexReaderWarmer.html",
    "title": "Class IndexWriter.IndexReaderWarmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexWriter.IndexReaderWarmer If Open(IndexWriter, Boolean) has been called (ie, this writer is in near real-time mode), then after a merge completes, this class can be invoked to warm the reader on the newly merged segment, before the merge commits. This is not required for near real-time search, but will reduce search latency on opening a new near real-time reader after a merge completes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NOTE : Warm(AtomicReader) is called before any deletes have been carried over to the merged segment. Inheritance System.Object IndexWriter.IndexReaderWarmer SimpleMergedSegmentWarmer 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.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReaderWarmer Constructors | Improve this Doc View Source IndexReaderWarmer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected IndexReaderWarmer() Methods | Improve this Doc View Source Warm(AtomicReader) Invoked on the AtomicReader for the newly merged segment, before that segment is made visible to near-real-time readers. Declaration public abstract void Warm(AtomicReader reader) Parameters Type Name Description AtomicReader reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriterConfig.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriterConfig.html",
    "title": "Class IndexWriterConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexWriterConfig Holds all the configuration that is used to create an IndexWriter . Once IndexWriter has been created with this object, changes to this object will not affect the IndexWriter instance. For that, use LiveIndexWriterConfig that is returned from Config . LUCENENET NOTE: Unlike Lucene, we use property setters instead of setter methods. In C#, this allows you to initialize the IndexWriterConfig using the language features of C#, for example: IndexWriterConfig conf = new IndexWriterConfig(analyzer) { Codec = Lucene46Codec(), OpenMode = OpenMode.CREATE }; However, if you prefer to match the syntax of Lucene using chained setter methods, there are extension methods in the Lucene.Net.Support namespace. Example usage: using Lucene.Net.Support; .. IndexWriterConfig conf = new IndexWriterConfig(analyzer) .SetCodec(new Lucene46Codec()) .SetOpenMode(OpenMode.CREATE); @since 3.1 Inheritance System.Object LiveIndexWriterConfig IndexWriterConfig Inherited Members LiveIndexWriterConfig.Analyzer LiveIndexWriterConfig.TermIndexInterval LiveIndexWriterConfig.MaxBufferedDeleteTerms LiveIndexWriterConfig.RAMBufferSizeMB LiveIndexWriterConfig.MaxBufferedDocs LiveIndexWriterConfig.MergedSegmentWarmer LiveIndexWriterConfig.ReaderTermsIndexDivisor LiveIndexWriterConfig.InfoStream LiveIndexWriterConfig.UseCompoundFile LiveIndexWriterConfig.CheckIntegrityAtMerge 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.Index Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class IndexWriterConfig : LiveIndexWriterConfig Constructors | Improve this Doc View Source IndexWriterConfig(LuceneVersion, Analyzer) Creates a new config that with defaults that match the specified LuceneVersion as well as the default Analyzer . If matchVersion is >= LUCENE_32 , TieredMergePolicy is used for merging; else LogByteSizeMergePolicy . Note that TieredMergePolicy is free to select non-contiguous merges, which means docIDs may not remain monotonic over time. If this is a problem you should switch to LogByteSizeMergePolicy or LogDocMergePolicy . Declaration public IndexWriterConfig(LuceneVersion matchVersion, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Analyzer analyzer Fields | Improve this Doc View Source DEFAULT_CHECK_INTEGRITY_AT_MERGE Default value for calling CheckIntegrity() before merging segments (set to false ). You can set this to true for additional safety. Declaration public static readonly bool DEFAULT_CHECK_INTEGRITY_AT_MERGE Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_MAX_BUFFERED_DELETE_TERMS Disabled by default (because IndexWriter flushes by RAM usage by default). Declaration public static readonly int DEFAULT_MAX_BUFFERED_DELETE_TERMS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_BUFFERED_DOCS Disabled by default (because IndexWriter flushes by RAM usage by default). Declaration public static readonly int DEFAULT_MAX_BUFFERED_DOCS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_THREAD_STATES The maximum number of simultaneous threads that may be indexing documents at once in IndexWriter ; if more than this many threads arrive they will wait for others to finish. Default value is 8. Declaration public static readonly int DEFAULT_MAX_THREAD_STATES Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_RAM_BUFFER_SIZE_MB Default value is 16 MB (which means flush when buffered docs consume approximately 16 MB RAM). Declaration public static readonly double DEFAULT_RAM_BUFFER_SIZE_MB Field Value Type Description System.Double | Improve this Doc View Source DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB Default value is 1945. Change using RAMPerThreadHardLimitMB setter. Declaration public static readonly int DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_READER_POOLING Default setting for UseReaderPooling . Declaration public static readonly bool DEFAULT_READER_POOLING Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_READER_TERMS_INDEX_DIVISOR Default value is 1. Change using ReaderTermsIndexDivisor setter. Declaration public static readonly int DEFAULT_READER_TERMS_INDEX_DIVISOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TERM_INDEX_INTERVAL Default value is 32. Change using TermIndexInterval setter. Declaration public static readonly int DEFAULT_TERM_INDEX_INTERVAL Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_USE_COMPOUND_FILE_SYSTEM Default value for compound file system for newly written segments (set to true ). For batch indexing with very large ram buffers use false Declaration public static readonly bool DEFAULT_USE_COMPOUND_FILE_SYSTEM Field Value Type Description System.Boolean | Improve this Doc View Source DISABLE_AUTO_FLUSH Denotes a flush trigger is disabled. Declaration public static readonly int DISABLE_AUTO_FLUSH Field Value Type Description System.Int32 | Improve this Doc View Source WRITE_LOCK_TIMEOUT Default value for the write lock timeout (1,000 ms). Declaration public static long WRITE_LOCK_TIMEOUT Field Value Type Description System.Int64 Properties | Improve this Doc View Source Codec Gets or sets the Codec . Only takes effect when IndexWriter is first created. Declaration public Codec Codec { get; set; } Property Value Type Description Codec | Improve this Doc View Source DefaultWriteLockTimeout Gets or sets the default (for any instance) maximum time to wait for a write lock (in milliseconds). Declaration public static long DefaultWriteLockTimeout { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexCommit Expert: allows to open a certain commit point. The default is null which opens the latest commit point. Only takes effect when IndexWriter is first created. Declaration public IndexCommit IndexCommit { get; set; } Property Value Type Description IndexCommit | Improve this Doc View Source IndexDeletionPolicy Expert: allows an optional IndexDeletionPolicy implementation to be specified. You can use this to control when prior commits are deleted from the index. The default policy is KeepOnlyLastCommitDeletionPolicy which removes all prior commits as soon as a new commit is done (this matches behavior before 2.2). Creating your own policy can allow you to explicitly keep previous \"point in time\" commits alive in the index for some time, to allow readers to refresh to the new commit without having the old commit deleted out from under them. This is necessary on filesystems like NFS that do not support \"delete on last close\" semantics, which Lucene's \"point in time\" search normally relies on. NOTE: the deletion policy cannot be null . Only takes effect when IndexWriter is first created. Declaration public IndexDeletionPolicy IndexDeletionPolicy { get; set; } Property Value Type Description IndexDeletionPolicy | Improve this Doc View Source MaxThreadStates Gets or sets the max number of simultaneous threads that may be indexing documents at once in IndexWriter . Values < 1 are invalid and if passed maxThreadStates will be set to DEFAULT_MAX_THREAD_STATES . Only takes effect when IndexWriter is first created. Declaration public int MaxThreadStates { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergePolicy Expert: MergePolicy is invoked whenever there are changes to the segments in the index. Its role is to select which merges to do, if any, and return a MergePolicy.MergeSpecification describing the merges. It also selects merges to do for ForceMerge(Int32) . Only takes effect when IndexWriter is first created. Declaration public MergePolicy MergePolicy { get; set; } Property Value Type Description MergePolicy | Improve this Doc View Source MergeScheduler Expert: Gets or sets the merge scheduler used by this writer. The default is ConcurrentMergeScheduler . NOTE: the merge scheduler cannot be null . Only takes effect when IndexWriter is first created. Declaration public IMergeScheduler MergeScheduler { get; set; } Property Value Type Description IMergeScheduler | Improve this Doc View Source OpenMode Specifies OpenMode of the index. Only takes effect when IndexWriter is first created. Declaration public OpenMode OpenMode { get; set; } Property Value Type Description OpenMode | Improve this Doc View Source RAMPerThreadHardLimitMB Expert: Gets or sets the maximum memory consumption per thread triggering a forced flush if exceeded. A Lucene.Net.Index.DocumentsWriterPerThread is forcefully flushed once it exceeds this limit even if the RAMBufferSizeMB has not been exceeded. This is a safety limit to prevent a Lucene.Net.Index.DocumentsWriterPerThread from address space exhaustion due to its internal 32 bit signed integer based memory addressing. The given value must be less that 2GB (2048MB). Declaration public int RAMPerThreadHardLimitMB { get; set; } Property Value Type Description System.Int32 See Also DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB | Improve this Doc View Source Similarity Expert: set the Similarity implementation used by this IndexWriter . NOTE: the similarity cannot be null . Only takes effect when IndexWriter is first created. Declaration public Similarity Similarity { get; set; } Property Value Type Description Similarity | Improve this Doc View Source UseReaderPooling By default, IndexWriter does not pool the SegmentReader s it must open for deletions and merging, unless a near-real-time reader has been obtained by calling Open(IndexWriter, Boolean) . this setting lets you enable pooling without getting a near-real-time reader. NOTE: if you set this to false , IndexWriter will still pool readers once Open(IndexWriter, Boolean) is called. Only takes effect when IndexWriter is first created. Declaration public bool UseReaderPooling { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source WriteLockTimeout Gets or sets the maximum time to wait for a write lock (in milliseconds) for this instance. You can change the default value for all instances by calling the DefaultWriteLockTimeout setter. Only takes effect when IndexWriter is first created. Declaration public long WriteLockTimeout { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source SetInfoStream(InfoStream) Information about merges, deletes and a message when maxFieldLength is reached will be printed to this. Must not be null , but NO_OUTPUT may be used to supress output. Declaration public IndexWriterConfig SetInfoStream(InfoStream infoStream) Parameters Type Name Description InfoStream infoStream Returns Type Description IndexWriterConfig | Improve this Doc View Source SetInfoStream(TextWriter) Convenience method that uses TextWriterInfoStream to write to the passed in System.IO.TextWriter . Must not be null . Declaration public IndexWriterConfig SetInfoStream(TextWriter printStream) Parameters Type Name Description System.IO.TextWriter printStream Returns Type Description IndexWriterConfig | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides LiveIndexWriterConfig.ToString() Extension Methods IndexWriterConfigExtensions.SetTermIndexInterval(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetTermIndexInterval(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(IndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(IndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetDefaultWriteLockTimeout(IndexWriterConfig, Int64) IndexWriterConfigExtensions.SetOpenMode(IndexWriterConfig, OpenMode) IndexWriterConfigExtensions.SetIndexDeletionPolicy(IndexWriterConfig, IndexDeletionPolicy) IndexWriterConfigExtensions.SetIndexCommit(IndexWriterConfig, IndexCommit) IndexWriterConfigExtensions.SetSimilarity(IndexWriterConfig, Similarity) IndexWriterConfigExtensions.SetMergeScheduler(IndexWriterConfig, IMergeScheduler) IndexWriterConfigExtensions.SetWriteLockTimeout(IndexWriterConfig, Int64) IndexWriterConfigExtensions.SetMergePolicy(IndexWriterConfig, MergePolicy) IndexWriterConfigExtensions.SetCodec(IndexWriterConfig, Codec) IndexWriterConfigExtensions.SetMaxThreadStates(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetReaderPooling(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetRAMPerThreadHardLimitMB(IndexWriterConfig, Int32) See Also Config"
  },
  "api/Lucene.Net/Lucene.Net.Index.ITwoPhaseCommit.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ITwoPhaseCommit.html",
    "title": "Interface ITwoPhaseCommit | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITwoPhaseCommit An interface for implementations that support 2-phase commit. You can use TwoPhaseCommitTool to execute a 2-phase commit algorithm over several ITwoPhaseCommit s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface ITwoPhaseCommit Methods | Improve this Doc View Source Commit() The second phase of a 2-phase commit. Implementations should ideally do very little work in this method (following PrepareCommit() , and after it returns, the caller can assume that the changes were successfully committed to the underlying storage. Declaration void Commit() | Improve this Doc View Source PrepareCommit() The first stage of a 2-phase commit. Implementations should do as much work as possible in this method, but avoid actual committing changes. If the 2-phase commit fails, Rollback() is called to discard all changes since last successful commit. Declaration void PrepareCommit() | Improve this Doc View Source Rollback() Discards any changes that have occurred since the last commit. In a 2-phase commit algorithm, where one of the objects failed to Commit() or PrepareCommit() , this method is used to roll all other objects back to their previous state. Declaration void Rollback()"
  },
  "api/Lucene.Net/Lucene.Net.Index.KeepOnlyLastCommitDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.KeepOnlyLastCommitDeletionPolicy.html",
    "title": "Class KeepOnlyLastCommitDeletionPolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class KeepOnlyLastCommitDeletionPolicy This IndexDeletionPolicy implementation that keeps only the most recent commit and immediately removes all prior commits after a new commit is done. This is the default deletion policy. Inheritance System.Object IndexDeletionPolicy KeepOnlyLastCommitDeletionPolicy Inherited Members IndexDeletionPolicy.Clone() 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.Index Assembly : Lucene.Net.dll Syntax public sealed class KeepOnlyLastCommitDeletionPolicy : IndexDeletionPolicy Constructors | Improve this Doc View Source KeepOnlyLastCommitDeletionPolicy() Sole constructor. Declaration public KeepOnlyLastCommitDeletionPolicy() Methods | Improve this Doc View Source OnCommit<T>(IList<T>) Deletes all commits except the most recent one. Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Deletes all commits except the most recent one. Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(System.Collections.Generic.IList<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LiveIndexWriterConfig.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LiveIndexWriterConfig.html",
    "title": "Class LiveIndexWriterConfig | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LiveIndexWriterConfig Holds all the configuration used by IndexWriter with few setters for settings that can be changed on an IndexWriter instance \"live\". @since 4.0 Inheritance System.Object LiveIndexWriterConfig IndexWriterConfig 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax [Serializable] public class LiveIndexWriterConfig Properties | Improve this Doc View Source Analyzer Gets the default analyzer to use for indexing documents. Declaration public virtual Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source CheckIntegrityAtMerge Gets or sets if IndexWriter should call CheckIntegrity() on existing segments before merging them into a new one. Use true to enable this safety check, which can help reduce the risk of propagating index corruption from older segments into new ones, at the expense of slower merging. Declaration public virtual bool CheckIntegrityAtMerge { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Codec Returns the current Codec . Declaration public virtual Codec Codec { get; } Property Value Type Description Codec | Improve this Doc View Source IndexCommit Gets the IndexCommit as specified in IndexCommit setter or the default, null which specifies to open the latest index commit point. Declaration public virtual IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit | Improve this Doc View Source IndexDeletionPolicy Gets the IndexDeletionPolicy specified in IndexDeletionPolicy setter or the default KeepOnlyLastCommitDeletionPolicy Declaration public virtual IndexDeletionPolicy IndexDeletionPolicy { get; } Property Value Type Description IndexDeletionPolicy | Improve this Doc View Source InfoStream Returns InfoStream used for debugging. Declaration public virtual InfoStream InfoStream { get; } Property Value Type Description InfoStream See Also SetInfoStream(InfoStream) | Improve this Doc View Source MaxBufferedDeleteTerms Gets or sets a value that determines the maximum number of delete-by-term operations that will be buffered before both the buffered in-memory delete terms and queries are applied and flushed. Disabled by default (writer flushes by RAM usage). NOTE: this setting won't trigger a segment flush. Takes effect immediately, but only the next time a document is added, updated or deleted. Also, if you only delete-by-query, this setting has no effect, i.e. delete queries are buffered until the next segment is flushed. Declaration public virtual int MaxBufferedDeleteTerms { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if maxBufferedDeleteTerms is enabled but smaller than 1 See Also RAMBufferSizeMB | Improve this Doc View Source MaxBufferedDocs Gets or sets a value that determines the minimal number of documents required before the buffered in-memory documents are flushed as a new Segment. Large values generally give faster indexing. When this is set, the writer will flush every maxBufferedDocs added documents. Pass in DISABLE_AUTO_FLUSH to prevent triggering a flush due to number of buffered documents. Note that if flushing by RAM usage is also enabled, then the flush will be triggered by whichever comes first. Disabled by default (writer flushes by RAM usage). Takes effect immediately, but only the next time a document is added, updated or deleted. Declaration public virtual int MaxBufferedDocs { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if maxBufferedDocs is enabled but smaller than 2, or it disables maxBufferedDocs when ramBufferSizeMB is already disabled See Also RAMBufferSizeMB | Improve this Doc View Source MaxThreadStates Returns the max number of simultaneous threads that may be indexing documents at once in IndexWriter . Declaration public virtual int MaxThreadStates { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergedSegmentWarmer Gets or sets the merged segment warmer. See IndexWriter.IndexReaderWarmer . Takes effect on the next merge. Declaration public virtual IndexWriter.IndexReaderWarmer MergedSegmentWarmer { get; set; } Property Value Type Description IndexWriter.IndexReaderWarmer | Improve this Doc View Source MergePolicy Returns the current MergePolicy in use by this writer. Declaration public virtual MergePolicy MergePolicy { get; } Property Value Type Description MergePolicy See Also MergePolicy | Improve this Doc View Source MergeScheduler Returns the IMergeScheduler that was set by MergeScheduler setter. Declaration public virtual IMergeScheduler MergeScheduler { get; } Property Value Type Description IMergeScheduler | Improve this Doc View Source OpenMode Gets the OpenMode set by OpenMode setter. Declaration public virtual OpenMode OpenMode { get; } Property Value Type Description OpenMode | Improve this Doc View Source RAMBufferSizeMB Gets or sets a value that determines the amount of RAM that may be used for buffering added documents and deletions before they are flushed to the Directory . Generally for faster indexing performance it's best to flush by RAM usage instead of document count and use as large a RAM buffer as you can. When this is set, the writer will flush whenever buffered documents and deletions use this much RAM. Pass in DISABLE_AUTO_FLUSH to prevent triggering a flush due to RAM usage. Note that if flushing by document count is also enabled, then the flush will be triggered by whichever comes first. The maximum RAM limit is inherently determined by the runtime's available memory. Yet, an IndexWriter session can consume a significantly larger amount of memory than the given RAM limit since this limit is just an indicator when to flush memory resident documents to the Directory . Flushes are likely happen concurrently while other threads adding documents to the writer. For application stability the available memory in the runtime should be significantly larger than the RAM buffer used for indexing. NOTE : the account of RAM usage for pending deletions is only approximate. Specifically, if you delete by Query , Lucene currently has no way to measure the RAM usage of individual Queries so the accounting will under-estimate and you should compensate by either calling Commit() periodically yourself, or by setting MaxBufferedDeleteTerms to flush and apply buffered deletes by count instead of RAM usage (for each buffered delete Query a constant number of bytes is used to estimate RAM usage). Note that enabling MaxBufferedDeleteTerms will not trigger any segment flushes. NOTE : It's not guaranteed that all memory resident documents are flushed once this limit is exceeded. Depending on the configured Lucene.Net.Index.LiveIndexWriterConfig.FlushPolicy only a subset of the buffered documents are flushed and therefore only parts of the RAM buffer is released. The default value is DEFAULT_RAM_BUFFER_SIZE_MB . Takes effect immediately, but only the next time a document is added, updated or deleted. Declaration public virtual double RAMBufferSizeMB { get; set; } Property Value Type Description System.Double Exceptions Type Condition System.ArgumentException if ramBufferSizeMB is enabled but non-positive, or it disables ramBufferSizeMB when maxBufferedDocs is already disabled See Also RAMPerThreadHardLimitMB | Improve this Doc View Source RAMPerThreadHardLimitMB Returns the max amount of memory each Lucene.Net.Index.DocumentsWriterPerThread can consume until forcefully flushed. Declaration public virtual int RAMPerThreadHardLimitMB { get; } Property Value Type Description System.Int32 See Also RAMPerThreadHardLimitMB | Improve this Doc View Source ReaderTermsIndexDivisor Gets or sets the termsIndexDivisor passed to any readers that IndexWriter opens, for example when applying deletes or creating a near-real-time reader in Open(IndexWriter, Boolean) . If you pass -1, the terms index won't be loaded by the readers. This is only useful in advanced situations when you will only .Next() through all terms; attempts to seek will hit an exception. Takes effect immediately, but only applies to readers opened after this call NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Declaration public virtual int ReaderTermsIndexDivisor { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity Expert: returns the Similarity implementation used by this IndexWriter . Declaration public virtual Similarity Similarity { get; } Property Value Type Description Similarity | Improve this Doc View Source TermIndexInterval Expert: Gets or sets the interval between indexed terms. Large values cause less memory to be used by IndexReader , but slow random-access to terms. Small values cause more memory to be used by an IndexReader , and speed random-access to terms. This parameter determines the amount of computation required per query term, regardless of the number of documents that contain that term. In particular, it is the maximum number of other terms that must be scanned before a term is located and its frequency and position information may be processed. In a large index with user-entered query terms, query processing time is likely to be dominated not by term lookup but rather by the processing of frequency and positional data. In a small index or when many uncommon query terms are generated (e.g., by wildcard queries) term lookup may become a dominant cost. In particular, numUniqueTerms/interval terms are read into memory by an IndexReader , and, on average, interval/2 terms must be scanned for each random term access. Takes effect immediately, but only applies to newly flushed/merged segments. NOTE: this parameter does not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for term indexes that are implemented as a fixed gap between terms. For example, Lucene41PostingsFormat implements the term index instead based upon how terms share prefixes. To configure its parameters (the minimum and maximum size for a block), you would instead use Lucene41PostingsFormat(Int32, Int32) . which can also be configured on a per-field basis: public class MyLucene45Codec : Lucene45Codec { //customize Lucene41PostingsFormat, passing minBlockSize=50, maxBlockSize=100 private readonly PostingsFormat tweakedPostings = new Lucene41PostingsFormat(50, 100); public override PostingsFormat GetPostingsFormatForField(string field) { if (field.Equals(\"fieldWithTonsOfTerms\", StringComparison.Ordinal)) return tweakedPostings; else return base.GetPostingsFormatForField(field); } } ... iwc.Codec = new MyLucene45Codec(); Note that other implementations may have their own parameters, or no parameters at all. Declaration public virtual int TermIndexInterval { get; set; } Property Value Type Description System.Int32 See Also DEFAULT_TERM_INDEX_INTERVAL | Improve this Doc View Source UseCompoundFile Gets or sets if the IndexWriter should pack newly written segments in a compound file. Default is true . Use false for batch indexing with very large RAM buffer settings. Note: To control compound file usage during segment merges see NoCFSRatio and MaxCFSSegmentSizeMB . This setting only applies to newly created segments. Declaration public virtual bool UseCompoundFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source UseReaderPooling Returns true if IndexWriter should pool readers even if Open(IndexWriter, Boolean) has not been called. Declaration public virtual bool UseReaderPooling { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WriteLockTimeout Returns allowed timeout when acquiring the write lock. Declaration public virtual long WriteLockTimeout { get; } Property Value Type Description System.Int64 See Also WriteLockTimeout Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods IndexWriterConfigExtensions.SetTermIndexInterval(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogByteSizeMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogByteSizeMergePolicy.html",
    "title": "Class LogByteSizeMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LogByteSizeMergePolicy This is a LogMergePolicy that measures size of a segment as the total byte size of the segment's files. Inheritance System.Object MergePolicy LogMergePolicy LogByteSizeMergePolicy Implements System.IDisposable Inherited Members LogMergePolicy.LEVEL_LOG_SPAN LogMergePolicy.DEFAULT_MERGE_FACTOR LogMergePolicy.DEFAULT_MAX_MERGE_DOCS LogMergePolicy.DEFAULT_NO_CFS_RATIO LogMergePolicy.m_mergeFactor LogMergePolicy.m_minMergeSize LogMergePolicy.m_maxMergeSize LogMergePolicy.m_maxMergeSizeForForcedMerge LogMergePolicy.m_maxMergeDocs LogMergePolicy.m_calibrateSizeByDeletes LogMergePolicy.IsVerbose LogMergePolicy.Message(String) LogMergePolicy.MergeFactor LogMergePolicy.CalibrateSizeByDeletes LogMergePolicy.Dispose(Boolean) LogMergePolicy.SizeDocs(SegmentCommitInfo) LogMergePolicy.SizeBytes(SegmentCommitInfo) LogMergePolicy.IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedDeletesMerges(SegmentInfos) LogMergePolicy.FindMerges(MergeTrigger, SegmentInfos) LogMergePolicy.MaxMergeDocs LogMergePolicy.ToString() MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.dll Syntax public class LogByteSizeMergePolicy : LogMergePolicy, IDisposable Constructors | Improve this Doc View Source LogByteSizeMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public LogByteSizeMergePolicy() Fields | Improve this Doc View Source DEFAULT_MAX_MERGE_MB Default maximum segment size. A segment of this size or larger will never be merged. Declaration public static readonly double DEFAULT_MAX_MERGE_MB Field Value Type Description System.Double See Also MaxMergeMB | Improve this Doc View Source DEFAULT_MAX_MERGE_MB_FOR_FORCED_MERGE Default maximum segment size. A segment of this size or larger will never be merged during ForceMerge(Int32) . Declaration public static readonly double DEFAULT_MAX_MERGE_MB_FOR_FORCED_MERGE Field Value Type Description System.Double See Also MaxMergeMBForForcedMerge | Improve this Doc View Source DEFAULT_MIN_MERGE_MB Default minimum segment size. Declaration public static readonly double DEFAULT_MIN_MERGE_MB Field Value Type Description System.Double See Also MinMergeMB Properties | Improve this Doc View Source MaxMergeMB Determines the largest segment (measured by total byte size of the segment's files, in MB) that may be merged with other segments. Small values (e.g., less than 50 MB) are best for interactive indexing, as this limits the length of pauses while indexing to a few seconds. Larger values are best for batched indexing and speedier searches. Note that MaxMergeDocs is also used to check whether a segment is too large for merging (it's either or). Declaration public virtual double MaxMergeMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MaxMergeMBForForcedMerge Determines the largest segment (measured by total byte size of the segment's files, in MB) that may be merged with other segments during forceMerge. Setting it low will leave the index with more than 1 segment, even if ForceMerge(Int32) is called. Declaration public virtual double MaxMergeMBForForcedMerge { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MinMergeMB Sets the minimum size for the lowest level segments. Any segments below this size are considered to be on the same level (even if they vary drastically in size) and will be merged whenever there are mergeFactor of them. This effectively truncates the \"long tail\" of small segments that would otherwise be created into a single level. If you set this too large, it could greatly increase the merging cost during indexing (if you flush many small segments). Declaration public virtual double MinMergeMB { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogDocMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogDocMergePolicy.html",
    "title": "Class LogDocMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LogDocMergePolicy This is a LogMergePolicy that measures size of a segment as the number of documents (not taking deletions into account). Inheritance System.Object MergePolicy LogMergePolicy LogDocMergePolicy Implements System.IDisposable Inherited Members LogMergePolicy.LEVEL_LOG_SPAN LogMergePolicy.DEFAULT_MERGE_FACTOR LogMergePolicy.DEFAULT_MAX_MERGE_DOCS LogMergePolicy.DEFAULT_NO_CFS_RATIO LogMergePolicy.m_mergeFactor LogMergePolicy.m_minMergeSize LogMergePolicy.m_maxMergeSize LogMergePolicy.m_maxMergeSizeForForcedMerge LogMergePolicy.m_maxMergeDocs LogMergePolicy.m_calibrateSizeByDeletes LogMergePolicy.IsVerbose LogMergePolicy.Message(String) LogMergePolicy.MergeFactor LogMergePolicy.CalibrateSizeByDeletes LogMergePolicy.Dispose(Boolean) LogMergePolicy.SizeDocs(SegmentCommitInfo) LogMergePolicy.SizeBytes(SegmentCommitInfo) LogMergePolicy.IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedDeletesMerges(SegmentInfos) LogMergePolicy.FindMerges(MergeTrigger, SegmentInfos) LogMergePolicy.MaxMergeDocs LogMergePolicy.ToString() MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.dll Syntax public class LogDocMergePolicy : LogMergePolicy, IDisposable Constructors | Improve this Doc View Source LogDocMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public LogDocMergePolicy() Fields | Improve this Doc View Source DEFAULT_MIN_MERGE_DOCS Default minimum segment size. Declaration public static readonly int DEFAULT_MIN_MERGE_DOCS Field Value Type Description System.Int32 See Also MinMergeDocs Properties | Improve this Doc View Source MinMergeDocs Sets the minimum size for the lowest level segments. Any segments below this size are considered to be on the same level (even if they vary drastically in size) and will be merged whenever there are mergeFactor of them. This effectively truncates the \"long tail\" of small segments that would otherwise be created into a single level. If you set this too large, it could greatly increase the merging cost during indexing (if you flush many small segments). Declaration public virtual int MinMergeDocs { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogMergePolicy.html",
    "title": "Class LogMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LogMergePolicy This class implements a MergePolicy that tries to merge segments into levels of exponentially increasing size, where each level has fewer segments than the value of the merge factor. Whenever extra segments (beyond the merge factor upper bound) are encountered, all segments within the level are merged. You can get or set the merge factor using MergeFactor . This class is abstract and requires a subclass to define the Size(SegmentCommitInfo) method which specifies how a segment's size is determined. LogDocMergePolicy is one subclass that measures size by document count in the segment. LogByteSizeMergePolicy is another subclass that measures size as the total byte size of the file(s) for the segment. Inheritance System.Object MergePolicy LogMergePolicy LogByteSizeMergePolicy LogDocMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.dll Syntax public abstract class LogMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source LogMergePolicy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public LogMergePolicy() Fields | Improve this Doc View Source DEFAULT_MAX_MERGE_DOCS Default maximum segment size. A segment of this size or larger will never be merged. Declaration public static readonly int DEFAULT_MAX_MERGE_DOCS Field Value Type Description System.Int32 See Also MaxMergeDocs | Improve this Doc View Source DEFAULT_MERGE_FACTOR Default merge factor, which is how many segments are merged at a time Declaration public static readonly int DEFAULT_MERGE_FACTOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default noCFSRatio. If a merge's size is >= 10% of the index, then we disable compound file for it. Declaration public static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double See Also NoCFSRatio | Improve this Doc View Source LEVEL_LOG_SPAN Defines the allowed range of log(size) for each level. A level is computed by taking the max segment log size, minus LEVEL_LOG_SPAN, and finding all segments falling within that range. Declaration public static readonly double LEVEL_LOG_SPAN Field Value Type Description System.Double | Improve this Doc View Source m_calibrateSizeByDeletes If true, we pro-rate a segment's size by the percentage of non-deleted documents. Declaration protected bool m_calibrateSizeByDeletes Field Value Type Description System.Boolean | Improve this Doc View Source m_maxMergeDocs If a segment has more than this many documents then it will never be merged. Declaration protected int m_maxMergeDocs Field Value Type Description System.Int32 | Improve this Doc View Source m_maxMergeSize If the size of a segment exceeds this value then it will never be merged. Declaration protected long m_maxMergeSize Field Value Type Description System.Int64 | Improve this Doc View Source m_maxMergeSizeForForcedMerge If the size of a segment exceeds this value then it will never be merged during ForceMerge(Int32) . Declaration protected long m_maxMergeSizeForForcedMerge Field Value Type Description System.Int64 | Improve this Doc View Source m_mergeFactor How many segments to merge at a time. Declaration protected int m_mergeFactor Field Value Type Description System.Int32 | Improve this Doc View Source m_minMergeSize Any segments whose size is smaller than this value will be rounded up to this value. This ensures that tiny segments are aggressively merged. Declaration protected long m_minMergeSize Field Value Type Description System.Int64 Properties | Improve this Doc View Source CalibrateSizeByDeletes Gets or Sets whether the segment size should be calibrated by the number of deletes when choosing segments for merge. Declaration public virtual bool CalibrateSizeByDeletes { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsVerbose Returns true if LogMergePolicy is enabled in Lucene.Net.Index.IndexWriter.infoStream . Declaration protected virtual bool IsVerbose { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxMergeDocs Determines the largest segment (measured by document count) that may be merged with other segments. Small values (e.g., less than 10,000) are best for interactive indexing, as this limits the length of pauses while indexing to a few seconds. Larger values are best for batched indexing and speedier searches. The default value is System.Int32.MaxValue . The default merge policy ( LogByteSizeMergePolicy ) also allows you to set this limit by net size (in MB) of the segment, using MaxMergeMB . Declaration public virtual int MaxMergeDocs { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeFactor Gets or Sets the number of segments that are merged at once and also controls the total number of segments allowed to accumulate in the index. This determines how often segment indices are merged by AddDocument(IEnumerable<IIndexableField>) . With smaller values, less RAM is used while indexing, and searches are faster, but indexing speed is slower. With larger values, more RAM is used during indexing, and while searches is slower, indexing is faster. Thus larger values (> 10) are best for batch index creation, and smaller values (< 10) for indices that are interactively maintained. Declaration public virtual int MergeFactor { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Finds merges necessary to force-merge all deletes from the index. We simply merge adjacent segments that have deletes, up to mergeFactor at a time. Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Returns the merges necessary to merge the index down to a specified number of segments. this respects the m_maxMergeSizeForForcedMerge setting. By default, and assuming maxNumSegments=1 , only one segment will be left in the index, where that segment has no deletions pending nor separate norms, and it is in compound file format if the current useCompoundFile setting is true . This method returns multiple merges (mergeFactor at a time) so the MergeScheduler in use may make use of concurrency. Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos infos, int maxNumSegments, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxNumSegments System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Checks if any merges are now necessary and returns a MergePolicy.MergeSpecification if so. A merge is necessary when there are more than MergeFactor segments at a given level. When multiple levels have too many segments, this method will return multiple merges, allowing the MergeScheduler to use concurrency. Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos infos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Returns true if the number of segments eligible for merging is less than or equal to the specified maxNumSegments . Declaration protected virtual bool IsMerged(SegmentInfos infos, int maxNumSegments, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxNumSegments System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description System.Boolean | Improve this Doc View Source Message(String) Print a debug message to Lucene.Net.Index.IndexWriter.infoStream . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SizeBytes(SegmentCommitInfo) Return the byte size of the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents if CalibrateSizeByDeletes is set. Declaration protected virtual long SizeBytes(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source SizeDocs(SegmentCommitInfo) Return the number of documents in the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents if CalibrateSizeByDeletes is set. Declaration protected virtual long SizeDocs(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.DocMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.DocMap.html",
    "title": "Class MergePolicy.DocMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergePolicy.DocMap A map of doc IDs. Inheritance System.Object MergePolicy.DocMap 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.Index Assembly : Lucene.Net.dll Syntax public abstract class DocMap Constructors | Improve this Doc View Source DocMap() Sole constructor, typically invoked from sub-classes constructors. Declaration protected DocMap() Methods | Improve this Doc View Source Map(Int32) Return the new doc ID according to its old value. Declaration public abstract int Map(int old) Parameters Type Name Description System.Int32 old Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.html",
    "title": "Class MergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergePolicy Expert: a MergePolicy determines the sequence of primitive merge operations. Whenever the segments in an index have been altered by IndexWriter , either the addition of a newly flushed segment, addition of many segments from AddIndexes* calls, or a previous merge that may now need to cascade, IndexWriter invokes FindMerges(MergeTrigger, SegmentInfos) to give the MergePolicy a chance to pick merges that are now required. This method returns a MergePolicy.MergeSpecification instance describing the set of merges that should be done, or null if no merges are necessary. When ForceMerge(Int32) is called, it calls FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) and the MergePolicy should then return the necessary merges. Note that the policy can return more than one merge at a time. In this case, if the writer is using SerialMergeScheduler , the merges will be run sequentially but if it is using ConcurrentMergeScheduler they will be run concurrently. The default MergePolicy is TieredMergePolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy LogMergePolicy NoMergePolicy TieredMergePolicy UpgradeIndexMergePolicy 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.Index Assembly : Lucene.Net.dll Syntax public abstract class MergePolicy : IDisposable Constructors | Improve this Doc View Source MergePolicy() Creates a new merge policy instance. Note that if you intend to use it without passing it to IndexWriter , you should call SetIndexWriter(IndexWriter) . Declaration public MergePolicy() | Improve this Doc View Source MergePolicy(Double, Int64) Creates a new merge policy instance with default settings for m_noCFSRatio and m_maxCFSSegmentSize . This ctor should be used by subclasses using different defaults than the MergePolicy Declaration protected MergePolicy(double defaultNoCFSRatio, long defaultMaxCFSSegmentSize) Parameters Type Name Description System.Double defaultNoCFSRatio System.Int64 defaultMaxCFSSegmentSize Fields | Improve this Doc View Source DEFAULT_MAX_CFS_SEGMENT_SIZE Default max segment size in order to use compound file system. Set to System.Int64.MaxValue . Declaration protected static readonly long DEFAULT_MAX_CFS_SEGMENT_SIZE Field Value Type Description System.Int64 | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default ratio for compound file system usage. Set to 1.0 , always use compound file system. Declaration protected static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double | Improve this Doc View Source m_maxCFSSegmentSize If the size of the merged segment exceeds this value then it will not use compound file format. Declaration protected long m_maxCFSSegmentSize Field Value Type Description System.Int64 | Improve this Doc View Source m_noCFSRatio If the size of the merge segment exceeds this ratio of the total index size then it will remain in non-compound format Declaration protected double m_noCFSRatio Field Value Type Description System.Double | Improve this Doc View Source m_writer IndexWriter that contains this instance. Declaration protected SetOnce<IndexWriter> m_writer Field Value Type Description SetOnce < IndexWriter > Properties | Improve this Doc View Source MaxCFSSegmentSizeMB Gets or Sets the largest size allowed for a compound file segment. If a merged segment will be more than this value, leave the segment as non-compound file even if compound file is enabled. Set this to System.Double.PositiveInfinity (default) and NoCFSRatio to 1.0 to always use CFS regardless of merge size. Declaration public double MaxCFSSegmentSizeMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source NoCFSRatio Gets or Sets current m_noCFSRatio . If a merged segment will be more than this percentage of the total size of the index, leave the segment as non-compound file even if compound file is enabled. Set to 1.0 to always use CFS regardless of merge size. Declaration public double NoCFSRatio { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Release all resources for the policy. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Release all resources for the policy. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Determine what set of merge operations is necessary in order to expunge all deletes from the index. Declaration public abstract MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos the total set of segments in the index Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Determine what set of merge operations is necessary in order to merge to <= the specified segment count. IndexWriter calls this when its ForceMerge(Int32, Boolean) method is called. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method. Declaration public abstract MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos The total set of segments in the index System.Int32 maxSegmentCount Requested maximum number of segments in the index (currently this is always 1) System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Contains the specific SegmentInfo instances that must be merged away. This may be a subset of all SegmentInfos. If the value is true for a given SegmentInfo , that means this segment was an original segment present in the to-be-merged index; else, it was a segment produced by a cascaded merge. Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Determine what set of merge operations are now necessary on the index. IndexWriter calls this whenever there is a change to the segments. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method. Declaration public abstract MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger the event that triggered the merge SegmentInfos segmentInfos the total set of segments in the index Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source IsMerged(SegmentInfos, SegmentCommitInfo) Returns true if this single info is already fully merged (has no pending deletes, is in the same dir as the writer, and matches the current compound file setting Declaration protected bool IsMerged(SegmentInfos infos, SegmentCommitInfo info) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo info Returns Type Description System.Boolean | Improve this Doc View Source SetIndexWriter(IndexWriter) Sets the IndexWriter to use by this merge policy. This method is allowed to be called only once, and is usually set by IndexWriter . If it is called more than once, AlreadySetException is thrown. Declaration public virtual void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer See Also SetOnce <T> | Improve this Doc View Source Size(SegmentCommitInfo) Return the byte size of the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents is set. Declaration protected virtual long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Returns true if a new segment (regardless of its origin) should use the compound file format. The default implementation returns true iff the size of the given mergedInfo is less or equal to MaxCFSSegmentSizeMB and the size is less or equal to the TotalIndexSize * NoCFSRatio otherwise false . Declaration public virtual bool UseCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo mergedInfo Returns Type Description System.Boolean Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeAbortedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeAbortedException.html",
    "title": "Class MergePolicy.MergeAbortedException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergePolicy.MergeAbortedException Thrown when a merge was explicity aborted because Dispose(Boolean) was called with false . Normally this exception is privately caught and suppresed by IndexWriter . Inheritance System.Object System.Exception System.SystemException System.IO.IOException MergePolicy.MergeAbortedException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeAbortedException : IOException, ISerializable Constructors | Improve this Doc View Source MergeAbortedException() Create a MergePolicy.MergeAbortedException . Declaration public MergeAbortedException() | Improve this Doc View Source MergeAbortedException(String) Create a MergePolicy.MergeAbortedException with a specified message. Declaration public MergeAbortedException(string message) Parameters Type Name Description System.String message Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeException.html",
    "title": "Class MergePolicy.MergeException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergePolicy.MergeException Exception thrown if there are any problems while executing a merge. Inheritance System.Object System.Exception MergePolicy.MergeException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeException : Exception, ISerializable Constructors | Improve this Doc View Source MergeException(Exception, Directory) Create a MergePolicy.MergeException . Declaration public MergeException(Exception exc, Directory dir) Parameters Type Name Description System.Exception exc Directory dir | Improve this Doc View Source MergeException(String, Directory) Create a MergePolicy.MergeException . Declaration public MergeException(string message, Directory dir) Parameters Type Name Description System.String message Directory dir Properties | Improve this Doc View Source Directory Returns the Directory of the index that hit the exception. Declaration public virtual Directory Directory { get; } Property Value Type Description Directory Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeSpecification.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeSpecification.html",
    "title": "Class MergePolicy.MergeSpecification | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergePolicy.MergeSpecification A MergePolicy.MergeSpecification instance provides the information necessary to perform multiple merges. It simply contains a list of MergePolicy.OneMerge instances. Inheritance System.Object MergePolicy.MergeSpecification 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.Index Assembly : Lucene.Net.dll Syntax public class MergeSpecification Constructors | Improve this Doc View Source MergeSpecification() Sole constructor. Use Add(MergePolicy.OneMerge) to add merges. Declaration public MergeSpecification() Properties | Improve this Doc View Source Merges The subset of segments to be included in the primitive merge. Declaration public IList<MergePolicy.OneMerge> Merges { get; } Property Value Type Description System.Collections.Generic.IList < MergePolicy.OneMerge > Methods | Improve this Doc View Source Add(MergePolicy.OneMerge) Adds the provided MergePolicy.OneMerge to this specification. Declaration public virtual void Add(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source SegString(Directory) Returns a description of the merges in this specification. Declaration public virtual string SegString(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.OneMerge.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.OneMerge.html",
    "title": "Class MergePolicy.OneMerge | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergePolicy.OneMerge OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment. The merge spec includes the subset of segments to be merged as well as whether the new segment should use the compound file format. Inheritance System.Object MergePolicy.OneMerge 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.Index Assembly : Lucene.Net.dll Syntax public class OneMerge Constructors | Improve this Doc View Source OneMerge(IList<SegmentCommitInfo>) Sole constructor. Declaration public OneMerge(IList<SegmentCommitInfo> segments) Parameters Type Name Description System.Collections.Generic.IList < SegmentCommitInfo > segments List of SegmentCommitInfo s to be merged. Properties | Improve this Doc View Source EstimatedMergeBytes Estimated size in bytes of the merged segment. Declaration public long EstimatedMergeBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Info Expert: Sets the SegmentCommitInfo of this MergePolicy.OneMerge . Allows sub-classes to e.g. set diagnostics properties. Declaration public virtual SegmentCommitInfo Info { get; set; } Property Value Type Description SegmentCommitInfo | Improve this Doc View Source MaxNumSegments Declaration public int MaxNumSegments { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeInfo Return MergeInfo describing this merge. Declaration public virtual MergeInfo MergeInfo { get; } Property Value Type Description MergeInfo | Improve this Doc View Source Segments Segments to be merged. Declaration public IList<SegmentCommitInfo> Segments { get; } Property Value Type Description System.Collections.Generic.IList < SegmentCommitInfo > | Improve this Doc View Source TotalBytesSize Returns the total size in bytes of this merge. Note that this does not indicate the size of the merged segment, but the input total size. This is only set once the merge is initialized by IndexWriter . Declaration public virtual long TotalBytesSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalDocCount Number of documents in the merged segment. Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalNumDocs Returns the total number of documents that are included with this merge. Note that this does not indicate the number of documents after the merge. Declaration public virtual int TotalNumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckAborted(Directory) Called periodically by IndexWriter while merging to see if the merge is aborted. Declaration public virtual void CheckAborted(Directory dir) Parameters Type Name Description Directory dir | Improve this Doc View Source GetDocMap(MergeState) Expert: If GetMergeReaders() reorders document IDs, this method must be overridden to return a mapping from the natural doc ID (the doc ID that would result from a natural merge) to the actual doc ID. This mapping is used to apply deletions that happened during the merge to the new segment. Declaration public virtual MergePolicy.DocMap GetDocMap(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description MergePolicy.DocMap | Improve this Doc View Source GetMergeReaders() Expert: Get the list of readers to merge. Note that this list does not necessarily match the list of segments to merge and should only be used to feed SegmentMerger to initialize a merge. When a MergePolicy.OneMerge reorders doc IDs, it must override GetDocMap(MergeState) too so that deletes that happened during the merge can be applied to the newly merged segment. Declaration public virtual IList<AtomicReader> GetMergeReaders() Returns Type Description System.Collections.Generic.IList < AtomicReader > | Improve this Doc View Source SegString(Directory) Returns a readable description of the current merge state. Declaration public virtual string SegString(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeScheduler.html",
    "title": "Class MergeScheduler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergeScheduler Expert: IndexWriter uses an instance implementing this interface to execute the merges selected by a MergePolicy . The default MergeScheduler is ConcurrentMergeScheduler . Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any IndexWriter instance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergeScheduler ConcurrentMergeScheduler NoMergeScheduler SerialMergeScheduler TaskMergeScheduler Implements IMergeScheduler 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.Index Assembly : Lucene.Net.dll Syntax public abstract class MergeScheduler : IMergeScheduler, IDisposable Constructors | Improve this Doc View Source MergeScheduler() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected MergeScheduler() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Dispose this MergeScheduler. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Dispose this MergeScheduler. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Run the merges provided by NextMerge() . Declaration public abstract void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer the IndexWriter to obtain the merges from. MergeTrigger trigger the MergeTrigger that caused this merge to happen System.Boolean newMergesFound true iff any new merges were found by the caller; otherwise false Implements IMergeScheduler System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeState.DocMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeState.DocMap.html",
    "title": "Class MergeState.DocMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergeState.DocMap Remaps docids around deletes during merge Inheritance System.Object MergeState.DocMap 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.Index Assembly : Lucene.Net.dll Syntax public abstract class DocMap Properties | Improve this Doc View Source HasDeletions Returns true if there are any deletions. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxDoc Returns the total number of documents, ignoring deletions. Declaration public abstract int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDeletedDocs Returns the number of deleted documents. Declaration public abstract int NumDeletedDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Returns the number of not-deleted documents. Declaration public int NumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Build(AtomicReader) Creates a MergeState.DocMap instance appropriate for this reader. Declaration public static MergeState.DocMap Build(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description MergeState.DocMap | Improve this Doc View Source Get(Int32) Returns the mapped docID corresponding to the provided one. Declaration public abstract int Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeState.html",
    "title": "Class MergeState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergeState Holds common state used during segment merging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergeState 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.Index Assembly : Lucene.Net.dll Syntax public class MergeState Properties | Improve this Doc View Source CheckAbort Holds the CheckAbort instance, which is invoked periodically to see if the merge has been aborted. Declaration public CheckAbort CheckAbort { get; } Property Value Type Description CheckAbort | Improve this Doc View Source DocBase New docID base per reader. Declaration public int[] DocBase { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source DocMaps Maps docIDs around deletions. Declaration public MergeState.DocMap[] DocMaps { get; set; } Property Value Type Description MergeState.DocMap [] | Improve this Doc View Source FieldInfos FieldInfos of the newly merged segment. Declaration public FieldInfos FieldInfos { get; set; } Property Value Type Description FieldInfos | Improve this Doc View Source InfoStream InfoStream for debugging messages. Declaration public InfoStream InfoStream { get; } Property Value Type Description InfoStream | Improve this Doc View Source MatchedCount How many MatchingSegmentReaders are set. Declaration public int MatchedCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MatchingSegmentReaders SegmentReader s that have identical field name/number mapping, so their stored fields and term vectors may be bulk merged. Declaration public SegmentReader[] MatchingSegmentReaders { get; set; } Property Value Type Description SegmentReader [] | Improve this Doc View Source Readers Readers being merged. Declaration public IList<AtomicReader> Readers { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReader > | Improve this Doc View Source SegmentInfo SegmentInfo of the newly merged segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeTrigger.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeTrigger.html",
    "title": "Enum MergeTrigger | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum MergeTrigger MergeTrigger is passed to FindMerges(MergeTrigger, SegmentInfos) to indicate the event that triggered the merge. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum MergeTrigger Fields Name Description CLOSING Merge was triggered by a disposing IndexWriter . EXPLICIT Merge has been triggered explicitly by the user. FULL_FLUSH Merge was triggered by a full flush. Full flushes can be caused by a commit, NRT reader reopen or a Dispose() call on the index writer. MERGE_FINISHED Merge was triggered by a successfully finished merge. SEGMENT_FLUSH Merge was triggered by a segment flush."
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.EnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.EnumWithSlice.html",
    "title": "Class MultiDocsAndPositionsEnum.EnumWithSlice | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocsAndPositionsEnum.EnumWithSlice Holds a DocsAndPositionsEnum along with the corresponding ReaderSlice . Inheritance System.Object MultiDocsAndPositionsEnum.EnumWithSlice 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class EnumWithSlice Properties | Improve this Doc View Source DocsAndPositionsEnum DocsAndPositionsEnum for this sub-reader. Declaration public DocsAndPositionsEnum DocsAndPositionsEnum { get; } Property Value Type Description DocsAndPositionsEnum | Improve this Doc View Source Slice ReaderSlice describing how this sub-reader fits into the composite reader. Declaration public ReaderSlice Slice { get; } Property Value Type Description ReaderSlice Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.html",
    "title": "Class MultiDocsAndPositionsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MultiDocsAndPositionsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source MultiDocsAndPositionsEnum(MultiTermsEnum, Int32) Sole constructor. Declaration public MultiDocsAndPositionsEnum(MultiTermsEnum parent, int subReaderCount) Parameters Type Name Description MultiTermsEnum parent System.Int32 subReaderCount Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsAndPositionsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsAndPositionsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source CanReuse(MultiTermsEnum) Returns true if this instance can be reused by the provided MultiTermsEnum . Declaration public bool CanReuse(MultiTermsEnum parent) Parameters Type Name Description MultiTermsEnum parent Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition() | Improve this Doc View Source Reset(MultiDocsAndPositionsEnum.EnumWithSlice[], Int32) Re-use and reset this instance on the provided slices. Declaration public MultiDocsAndPositionsEnum Reset(MultiDocsAndPositionsEnum.EnumWithSlice[] subs, int numSubs) Parameters Type Name Description MultiDocsAndPositionsEnum.EnumWithSlice [] subs System.Int32 numSubs Returns Type Description MultiDocsAndPositionsEnum | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.EnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.EnumWithSlice.html",
    "title": "Class MultiDocsEnum.EnumWithSlice | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocsEnum.EnumWithSlice Holds a DocsEnum along with the corresponding ReaderSlice . Inheritance System.Object MultiDocsEnum.EnumWithSlice 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class EnumWithSlice Properties | Improve this Doc View Source DocsEnum DocsEnum of this sub-reader. Declaration public DocsEnum DocsEnum { get; } Property Value Type Description DocsEnum | Improve this Doc View Source Slice ReaderSlice describing how this sub-reader fits into the composite reader. Declaration public ReaderSlice Slice { get; } Property Value Type Description ReaderSlice Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.html",
    "title": "Class MultiDocsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocsEnum Exposes DocsEnum , merged from DocsEnum API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum MultiDocsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiDocsEnum : DocsEnum Constructors | Improve this Doc View Source MultiDocsEnum(MultiTermsEnum, Int32) Sole constructor Declaration public MultiDocsEnum(MultiTermsEnum parent, int subReaderCount) Parameters Type Name Description MultiTermsEnum parent The MultiTermsEnum that created us. System.Int32 subReaderCount How many sub-readers are being merged. Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source CanReuse(MultiTermsEnum) Returns true if this instance can be reused by the provided MultiTermsEnum . Declaration public bool CanReuse(MultiTermsEnum parent) Parameters Type Name Description MultiTermsEnum parent Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.html",
    "title": "Class MultiDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocValues A wrapper for CompositeReader providing access to DocValues . NOTE : for multi readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. NOTE : this is very costly. This is a Lucene.NET EXPERIMENTAL API, use at your own risk This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MultiDocValues 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.Index Assembly : Lucene.Net.dll Syntax public class MultiDocValues Methods | Improve this Doc View Source GetBinaryValues(IndexReader, String) Returns a BinaryDocValues for a reader's docvalues (potentially merging on-the-fly) This is a slow way to access binary values. Instead, access them per-segment with GetBinaryDocValues(String) Declaration public static BinaryDocValues GetBinaryValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(IndexReader, String) Returns a IBits for a reader's docsWithField (potentially merging on-the-fly) This is a slow way to access this bitset. Instead, access them per-segment with GetDocsWithField(String) Declaration public static IBits GetDocsWithField(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(IndexReader, String) Returns a NumericDocValues for a reader's norms (potentially merging on-the-fly). This is a slow way to access normalization values. Instead, access them per-segment with GetNormValues(String) Declaration public static NumericDocValues GetNormValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericValues(IndexReader, String) Returns a NumericDocValues for a reader's docvalues (potentially merging on-the-fly) This is a slow way to access numeric values. Instead, access them per-segment with GetNumericDocValues(String) Declaration public static NumericDocValues GetNumericValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedSetValues(IndexReader, String) Returns a SortedSetDocValues for a reader's docvalues (potentially doing extremely slow things). This is an extremely slow way to access sorted values. Instead, access them per-segment with GetSortedSetDocValues(String) Declaration public static SortedSetDocValues GetSortedSetValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetSortedValues(IndexReader, String) Returns a SortedDocValues for a reader's docvalues (potentially doing extremely slow things). this is an extremely slow way to access sorted values. Instead, access them per-segment with GetSortedDocValues(String) Declaration public static SortedDocValues GetSortedValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description SortedDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedDocValues.html",
    "title": "Class MultiDocValues.MultiSortedDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocValues.MultiSortedDocValues Implements SortedDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BinaryDocValues SortedDocValues MultiDocValues.MultiSortedDocValues Inherited Members SortedDocValues.Get(Int32, BytesRef) SortedDocValues.LookupTerm(BytesRef) SortedDocValues.GetTermsEnum() 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.Index Assembly : Lucene.Net.dll Syntax public class MultiSortedDocValues : SortedDocValues Properties | Improve this Doc View Source DocStarts docbase for each leaf: parallel with Values Declaration public int[] DocStarts { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Mapping ordinal map mapping ords from values to global ord space Declaration public MultiDocValues.OrdinalMap Mapping { get; } Property Value Type Description MultiDocValues.OrdinalMap | Improve this Doc View Source ValueCount Declaration public override int ValueCount { get; } Property Value Type Description System.Int32 Overrides SortedDocValues.ValueCount | Improve this Doc View Source Values leaf values Declaration public SortedDocValues[] Values { get; } Property Value Type Description SortedDocValues [] Methods | Improve this Doc View Source GetOrd(Int32) Declaration public override int GetOrd(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 Overrides SortedDocValues.GetOrd(Int32) | Improve this Doc View Source LookupOrd(Int32, BytesRef) Declaration public override void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord BytesRef result Overrides SortedDocValues.LookupOrd(Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedSetDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedSetDocValues.html",
    "title": "Class MultiDocValues.MultiSortedSetDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocValues.MultiSortedSetDocValues Implements MultiDocValues.MultiSortedSetDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SortedSetDocValues MultiDocValues.MultiSortedSetDocValues Inherited Members SortedSetDocValues.NO_MORE_ORDS SortedSetDocValues.LookupTerm(BytesRef) SortedSetDocValues.GetTermsEnum() 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.Index Assembly : Lucene.Net.dll Syntax public class MultiSortedSetDocValues : SortedSetDocValues Properties | Improve this Doc View Source DocStarts docbase for each leaf: parallel with Values Declaration public int[] DocStarts { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Mapping ordinal map mapping ords from values to global ord space Declaration public MultiDocValues.OrdinalMap Mapping { get; } Property Value Type Description MultiDocValues.OrdinalMap | Improve this Doc View Source ValueCount Declaration public override long ValueCount { get; } Property Value Type Description System.Int64 Overrides SortedSetDocValues.ValueCount | Improve this Doc View Source Values leaf values Declaration public SortedSetDocValues[] Values { get; } Property Value Type Description SortedSetDocValues [] Methods | Improve this Doc View Source LookupOrd(Int64, BytesRef) Declaration public override void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord BytesRef result Overrides SortedSetDocValues.LookupOrd(Int64, BytesRef) | Improve this Doc View Source NextOrd() Declaration public override long NextOrd() Returns Type Description System.Int64 Overrides SortedSetDocValues.NextOrd() | Improve this Doc View Source SetDocument(Int32) Declaration public override void SetDocument(int docID) Parameters Type Name Description System.Int32 docID Overrides SortedSetDocValues.SetDocument(Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.OrdinalMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.OrdinalMap.html",
    "title": "Class MultiDocValues.OrdinalMap | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiDocValues.OrdinalMap maps per-segment ordinals to/from global ordinal space Inheritance System.Object MultiDocValues.OrdinalMap 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.Index Assembly : Lucene.Net.dll Syntax public class OrdinalMap Constructors | Improve this Doc View Source OrdinalMap(Object, TermsEnum[]) Creates an ordinal map that allows mapping ords to/from a merged space from subs . Declaration public OrdinalMap(object owner, TermsEnum[] subs) Parameters Type Name Description System.Object owner a cache key TermsEnum [] subs TermsEnum s that support Ord . They need not be dense (e.g. can be FilteredTermsEnums). Exceptions Type Condition System.IO.IOException if an I/O error occurred. Properties | Improve this Doc View Source ValueCount Returns the total number of unique terms in global ord space. Declaration public virtual long ValueCount { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetFirstSegmentNumber(Int64) Given a global ordinal, returns the index of the first segment that contains this term. Declaration public virtual int GetFirstSegmentNumber(long globalOrd) Parameters Type Name Description System.Int64 globalOrd Returns Type Description System.Int32 | Improve this Doc View Source GetFirstSegmentOrd(Int64) Given global ordinal, returns the ordinal of the first segment which contains this ordinal (the corresponding to the segment return GetFirstSegmentNumber(Int64) ). Declaration public virtual long GetFirstSegmentOrd(long globalOrd) Parameters Type Name Description System.Int64 globalOrd Returns Type Description System.Int64 | Improve this Doc View Source GetGlobalOrd(Int32, Int64) Given a segment number and segment ordinal, returns the corresponding global ordinal. Declaration public virtual long GetGlobalOrd(int segmentIndex, long segmentOrd) Parameters Type Name Description System.Int32 segmentIndex System.Int64 segmentOrd Returns Type Description System.Int64 | Improve this Doc View Source RamBytesUsed() Returns total byte size used by this ordinal map. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiFields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiFields.html",
    "title": "Class MultiFields | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiFields Exposes flex API, merged from flex API of sub-segments. This is useful when you're interacting with an IndexReader implementation that consists of sequential sub-readers (eg DirectoryReader or MultiReader ). NOTE : for composite readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields MultiFields Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable Inherited Members Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY 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.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiFields : Fields, IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source MultiFields(Fields[], ReaderSlice[]) Expert: construct a new MultiFields instance directly. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public MultiFields(Fields[] subs, ReaderSlice[] subSlices) Parameters Type Name Description Fields [] subs ReaderSlice [] subSlices Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetFields(IndexReader) Returns a single Fields instance for this reader, merging fields/terms/docs/positions on the fly. This method will return null if the reader has no postings. NOTE : this is a slow way to access postings. It's better to get the sub-readers and iterate through them yourself. Declaration public static Fields GetFields(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Fields | Improve this Doc View Source GetIndexedFields(IndexReader) Call this to get the (merged) FieldInfos representing the set of indexed fields only for a composite reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) ) will be unavailable. Declaration public static ICollection<string> GetIndexedFields(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source GetLiveDocs(IndexReader) Returns a single IBits instance for this reader, merging live Documents on the fly. This method will return null if the reader has no deletions. NOTE : this is a very slow way to access live docs. For example, each IBits access will require a binary search. It's better to get the sub-readers and iterate through them yourself. Declaration public static IBits GetLiveDocs(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description IBits | Improve this Doc View Source GetMergedFieldInfos(IndexReader) Call this to get the (merged) FieldInfos for a composite reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) ) will be unavailable. Declaration public static FieldInfos GetMergedFieldInfos(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description FieldInfos | Improve this Doc View Source GetTermDocsEnum(IndexReader, IBits, String, BytesRef) Returns DocsEnum for the specified field & term. This will return null if the field or term does not exist. Declaration public static DocsEnum GetTermDocsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term Returns Type Description DocsEnum | Improve this Doc View Source GetTermDocsEnum(IndexReader, IBits, String, BytesRef, DocsFlags) Returns DocsEnum for the specified field & term, with control over whether freqs are required. Some codecs may be able to optimize their implementation when freqs are not required. This will return null if the field or term does not exist. See Docs(IBits, DocsEnum, DocsFlags) . Declaration public static DocsEnum GetTermDocsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term, DocsFlags flags) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source GetTermPositionsEnum(IndexReader, IBits, String, BytesRef) Returns DocsAndPositionsEnum for the specified field & term. This will return null if the field or term does not exist or positions were not indexed. Declaration public static DocsAndPositionsEnum GetTermPositionsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term Returns Type Description DocsAndPositionsEnum See Also GetTermPositionsEnum(IndexReader, IBits, String, BytesRef, DocsAndPositionsFlags) | Improve this Doc View Source GetTermPositionsEnum(IndexReader, IBits, String, BytesRef, DocsAndPositionsFlags) Returns DocsAndPositionsEnum for the specified field & term, with control over whether offsets and payloads are required. Some codecs may be able to optimize their implementation when offsets and/or payloads are not required. This will return null if the field or term does not exist or positions were not indexed. See DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) . Declaration public static DocsAndPositionsEnum GetTermPositionsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term, DocsAndPositionsFlags flags) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source GetTerms(IndexReader, String) this method may return null if the field does not exist. Declaration public static Terms GetTerms(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description Terms | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiReader.html",
    "title": "Class MultiReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiReader A CompositeReader which reads multiple indexes, appending their content. It can be used to create a view on several sub-readers (like DirectoryReader ) and execute searches on it. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < IndexReader > MultiReader Implements System.IDisposable Inherited Members BaseCompositeReader<IndexReader>.GetTermVectors(Int32) BaseCompositeReader<IndexReader>.NumDocs BaseCompositeReader<IndexReader>.MaxDoc BaseCompositeReader<IndexReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<IndexReader>.DocFreq(Term) BaseCompositeReader<IndexReader>.TotalTermFreq(Term) BaseCompositeReader<IndexReader>.GetSumDocFreq(String) BaseCompositeReader<IndexReader>.GetDocCount(String) BaseCompositeReader<IndexReader>.GetSumTotalTermFreq(String) BaseCompositeReader<IndexReader>.ReaderIndex(Int32) BaseCompositeReader<IndexReader>.ReaderBase(Int32) BaseCompositeReader<IndexReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiReader : BaseCompositeReader<IndexReader>, IDisposable Constructors | Improve this Doc View Source MultiReader(IndexReader[]) Construct a MultiReader aggregating the named set of (sub)readers. Note that all subreaders are closed if this Multireader is closed. Declaration public MultiReader(params IndexReader[] subReaders) Parameters Type Name Description IndexReader [] subReaders set of (sub)readers | Improve this Doc View Source MultiReader(IndexReader[], Boolean) Construct a MultiReader aggregating the named set of (sub)readers. Declaration public MultiReader(IndexReader[] subReaders, bool closeSubReaders) Parameters Type Name Description IndexReader [] subReaders set of (sub)readers; this array will be cloned. System.Boolean closeSubReaders indicates whether the subreaders should be disposed when this MultiReader is disposed Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTerms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTerms.html",
    "title": "Class MultiTerms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTerms Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Terms MultiTerms Inherited Members Terms.EMPTY_ARRAY 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.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiTerms : Terms Constructors | Improve this Doc View Source MultiTerms(Terms[], ReaderSlice[]) Sole constructor. Declaration public MultiTerms(Terms[] subs, ReaderSlice[] subSlices) Parameters Type Name Description Terms [] subs The Terms instances of all sub-readers. ReaderSlice [] subSlices A parallel array (matching subs ) describing the sub-reader slices. Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum) | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum Overrides Terms.Intersect(CompiledAutomaton, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.html",
    "title": "Class MultiTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermsEnum Exposes TermsEnum API, merged from TermsEnum API of sub-segments. This does a merge sort, by term text, of the sub-readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsEnum MultiTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Attributes TermsEnum.SeekExact(BytesRef, TermState) TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.GetTermState() TermsEnum.EMPTY 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.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source MultiTermsEnum(ReaderSlice[]) Sole constructor. Declaration public MultiTermsEnum(ReaderSlice[] slices) Parameters Type Name Description ReaderSlice [] slices Which sub-reader slices we should merge. Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source MatchArray Returns sub-reader slices positioned to the current term. Declaration public MultiTermsEnum.TermsEnumWithSlice[] MatchArray { get; } Property Value Type Description MultiTermsEnum.TermsEnumWithSlice [] | Improve this Doc View Source MatchCount Returns how many sub-reader slices contain the current term. Declaration public int MatchCount { get; } Property Value Type Description System.Int32 See Also MatchArray | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source Reset(MultiTermsEnum.TermsEnumIndex[]) The terms array must be newly created TermsEnum , ie Next() has not yet been called. Declaration public TermsEnum Reset(MultiTermsEnum.TermsEnumIndex[] termsEnumsIndex) Parameters Type Name Description MultiTermsEnum.TermsEnumIndex [] termsEnumsIndex Returns Type Description TermsEnum | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(BytesRef) Declaration public override bool SeekExact(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumIndex.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumIndex.html",
    "title": "Class MultiTermsEnum.TermsEnumIndex | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermsEnum.TermsEnumIndex Inheritance System.Object MultiTermsEnum.TermsEnumIndex 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.Index Assembly : Lucene.Net.dll Syntax public class TermsEnumIndex Constructors | Improve this Doc View Source TermsEnumIndex(TermsEnum, Int32) Declaration public TermsEnumIndex(TermsEnum termsEnum, int subIndex) Parameters Type Name Description TermsEnum termsEnum System.Int32 subIndex Fields | Improve this Doc View Source EMPTY_ARRAY Declaration public static readonly MultiTermsEnum.TermsEnumIndex[] EMPTY_ARRAY Field Value Type Description MultiTermsEnum.TermsEnumIndex []"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumWithSlice.html",
    "title": "Class MultiTermsEnum.TermsEnumWithSlice | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermsEnum.TermsEnumWithSlice Inheritance System.Object MultiTermsEnum.TermsEnumWithSlice 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermsEnumWithSlice Constructors | Improve this Doc View Source TermsEnumWithSlice(Int32, ReaderSlice) Declaration public TermsEnumWithSlice(int index, ReaderSlice subSlice) Parameters Type Name Description System.Int32 index ReaderSlice subSlice Properties | Improve this Doc View Source Current Declaration public BytesRef Current { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Reset(TermsEnum, BytesRef) Declaration public void Reset(TermsEnum terms, BytesRef term) Parameters Type Name Description TermsEnum terms BytesRef term | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoDeletionPolicy.html",
    "title": "Class NoDeletionPolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoDeletionPolicy An IndexDeletionPolicy which keeps all index commits around, never deleting them. This class is a singleton and can be accessed by referencing INSTANCE . Inheritance System.Object IndexDeletionPolicy NoDeletionPolicy 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.Index Assembly : Lucene.Net.dll Syntax public sealed class NoDeletionPolicy : IndexDeletionPolicy Fields | Improve this Doc View Source INSTANCE The single instance of this class. Declaration public static readonly IndexDeletionPolicy INSTANCE Field Value Type Description IndexDeletionPolicy Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexDeletionPolicy.Clone() | Improve this Doc View Source OnCommit<T>(IList<T>) Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(System.Collections.Generic.IList<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoMergePolicy.html",
    "title": "Class NoMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoMergePolicy A MergePolicy which never returns merges to execute (hence it's name). It is also a singleton and can be accessed through NO_COMPOUND_FILES if you want to indicate the index does not use compound files, or through COMPOUND_FILES otherwise. Use it if you want to prevent an IndexWriter from ever executing merges, without going through the hassle of tweaking a merge policy's settings to achieve that, such as changing its merge factor. Inheritance System.Object MergePolicy NoMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.Dispose() MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.dll Syntax public sealed class NoMergePolicy : MergePolicy, IDisposable Fields | Improve this Doc View Source COMPOUND_FILES A singleton NoMergePolicy which indicates the index uses compound files. Declaration public static readonly MergePolicy COMPOUND_FILES Field Value Type Description MergePolicy | Improve this Doc View Source NO_COMPOUND_FILES A singleton NoMergePolicy which indicates the index does not use compound files. Declaration public static readonly MergePolicy NO_COMPOUND_FILES Field Value Type Description MergePolicy Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoMergeScheduler.html",
    "title": "Class NoMergeScheduler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoMergeScheduler A MergeScheduler which never executes any merges. It is also a singleton and can be accessed through INSTANCE . Use it if you want to prevent an IndexWriter from ever executing merges, regardless of the MergePolicy used. Note that you can achieve the same thing by using NoMergePolicy , however with NoMergeScheduler you also ensure that no unnecessary code of any MergeScheduler implementation is ever executed. Hence it is recommended to use both if you want to disable merges from ever happening. Inheritance System.Object MergeScheduler NoMergeScheduler Implements IMergeScheduler System.IDisposable Inherited Members MergeScheduler.Dispose() 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.Index Assembly : Lucene.Net.dll Syntax public sealed class NoMergeScheduler : MergeScheduler, IMergeScheduler, IDisposable Fields | Improve this Doc View Source INSTANCE The single instance of NoMergeScheduler Declaration public static readonly MergeScheduler INSTANCE Field Value Type Description MergeScheduler Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) Implements IMergeScheduler System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.NumericDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NumericDocValues.html",
    "title": "Class NumericDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericDocValues A per-document numeric value. Inheritance System.Object NumericDocValues Int64Values PackedInt32s.Reader 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.Index Assembly : Lucene.Net.dll Syntax public abstract class NumericDocValues Constructors | Improve this Doc View Source NumericDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected NumericDocValues() Methods | Improve this Doc View Source Get(Int32) Returns the numeric value for the specified document ID. Declaration public abstract long Get(int docID) Parameters Type Name Description System.Int32 docID document ID to lookup Returns Type Description System.Int64 numeric value"
  },
  "api/Lucene.Net/Lucene.Net.Index.OpenMode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.OpenMode.html",
    "title": "Enum OpenMode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum OpenMode Specifies the open mode for IndexWriter . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum OpenMode Fields Name Description APPEND Opens an existing index. CREATE Creates a new index or overwrites an existing one. CREATE_OR_APPEND Creates a new index if one does not exist, otherwise it opens the index and documents will be appended."
  },
  "api/Lucene.Net/Lucene.Net.Index.OrdTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.OrdTermState.html",
    "title": "Class OrdTermState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OrdTermState An ordinal based TermState This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermState OrdTermState BlockTermState Inherited Members TermState.Clone() 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.Index Assembly : Lucene.Net.dll Syntax public class OrdTermState : TermState Constructors | Improve this Doc View Source OrdTermState() Sole constructor. Declaration public OrdTermState() Properties | Improve this Doc View Source Ord Term ordinal, i.e. it's position in the full list of sorted terms. Declaration public long Ord { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides TermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides TermState.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.ParallelAtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ParallelAtomicReader.html",
    "title": "Class ParallelAtomicReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParallelAtomicReader An AtomicReader which reads multiple, parallel indexes. Each index added must have the same number of documents, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . Inheritance System.Object IndexReader AtomicReader ParallelAtomicReader Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class ParallelAtomicReader : AtomicReader, IDisposable Constructors | Improve this Doc View Source ParallelAtomicReader(AtomicReader[]) Create a ParallelAtomicReader based on the provided readers; auto-disposes the given readers on Dispose() . Declaration public ParallelAtomicReader(params AtomicReader[] readers) Parameters Type Name Description AtomicReader [] readers | Improve this Doc View Source ParallelAtomicReader(Boolean, AtomicReader[]) Create a ParallelAtomicReader based on the provided readers . Declaration public ParallelAtomicReader(bool closeSubReaders, params AtomicReader[] readers) Parameters Type Name Description System.Boolean closeSubReaders AtomicReader [] readers | Improve this Doc View Source ParallelAtomicReader(Boolean, AtomicReader[], AtomicReader[]) Expert: create a ParallelAtomicReader based on the provided readers and storedFieldsReaders ; when a document is loaded, only storedFieldsReaders will be used. Declaration public ParallelAtomicReader(bool closeSubReaders, AtomicReader[] readers, AtomicReader[] storedFieldsReaders) Parameters Type Name Description System.Boolean closeSubReaders AtomicReader [] readers AtomicReader [] storedFieldsReaders Properties | Improve this Doc View Source FieldInfos Get the FieldInfos describing all fields in this reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) will be unavailable. Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.ParallelCompositeReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ParallelCompositeReader.html",
    "title": "Class ParallelCompositeReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ParallelCompositeReader A CompositeReader which reads multiple, parallel indexes. Each index added must have the same number of documents, and exactly the same hierarchical subreader structure, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . A good strategy to create suitable indexes with IndexWriter is to use LogDocMergePolicy , as this one does not reorder documents during merging (like TieredMergePolicy ) and triggers merges by number of documents per segment. If you use different MergePolicy s it might happen that the segment structure of your index is no longer predictable. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < IndexReader > ParallelCompositeReader Implements System.IDisposable Inherited Members BaseCompositeReader<IndexReader>.GetTermVectors(Int32) BaseCompositeReader<IndexReader>.NumDocs BaseCompositeReader<IndexReader>.MaxDoc BaseCompositeReader<IndexReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<IndexReader>.DocFreq(Term) BaseCompositeReader<IndexReader>.TotalTermFreq(Term) BaseCompositeReader<IndexReader>.GetSumDocFreq(String) BaseCompositeReader<IndexReader>.GetDocCount(String) BaseCompositeReader<IndexReader>.GetSumTotalTermFreq(String) BaseCompositeReader<IndexReader>.ReaderIndex(Int32) BaseCompositeReader<IndexReader>.ReaderBase(Int32) BaseCompositeReader<IndexReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class ParallelCompositeReader : BaseCompositeReader<IndexReader>, IDisposable Constructors | Improve this Doc View Source ParallelCompositeReader(CompositeReader[]) Create a ParallelCompositeReader based on the provided readers; auto-disposes the given readers on Dispose() . Declaration public ParallelCompositeReader(params CompositeReader[] readers) Parameters Type Name Description CompositeReader [] readers | Improve this Doc View Source ParallelCompositeReader(Boolean, CompositeReader[]) Create a ParallelCompositeReader based on the provided readers . Declaration public ParallelCompositeReader(bool closeSubReaders, params CompositeReader[] readers) Parameters Type Name Description System.Boolean closeSubReaders CompositeReader [] readers | Improve this Doc View Source ParallelCompositeReader(Boolean, CompositeReader[], CompositeReader[]) Expert: create a ParallelCompositeReader based on the provided readers and storedFieldReaders ; when a document is loaded, only storedFieldReaders will be used. Declaration public ParallelCompositeReader(bool closeSubReaders, CompositeReader[] readers, CompositeReader[] storedFieldReaders) Parameters Type Name Description System.Boolean closeSubReaders CompositeReader [] readers CompositeReader [] storedFieldReaders Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.PersistentSnapshotDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.PersistentSnapshotDeletionPolicy.html",
    "title": "Class PersistentSnapshotDeletionPolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PersistentSnapshotDeletionPolicy A SnapshotDeletionPolicy which adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in a Directory and are committed as soon as Snapshot() or Release(IndexCommit) is called. NOTE: Sharing PersistentSnapshotDeletionPolicy s that write to the same directory across IndexWriter s will corrupt snapshots. You should make sure every IndexWriter has its own PersistentSnapshotDeletionPolicy and that they all write to a different Directory . It is OK to use the same Directory that holds the index. This class adds a Release(Int64) method to release commits from a previous snapshot's Generation . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexDeletionPolicy SnapshotDeletionPolicy PersistentSnapshotDeletionPolicy Inherited Members SnapshotDeletionPolicy.m_refCounts SnapshotDeletionPolicy.m_indexCommits SnapshotDeletionPolicy.m_lastCommit SnapshotDeletionPolicy.OnCommit<T>(IList<T>) SnapshotDeletionPolicy.OnInit<T>(IList<T>) SnapshotDeletionPolicy.ReleaseGen(Int64) SnapshotDeletionPolicy.IncRef(IndexCommit) SnapshotDeletionPolicy.GetSnapshots() SnapshotDeletionPolicy.SnapshotCount SnapshotDeletionPolicy.GetIndexCommit(Int64) SnapshotDeletionPolicy.Clone() 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.Index Assembly : Lucene.Net.dll Syntax public class PersistentSnapshotDeletionPolicy : SnapshotDeletionPolicy Constructors | Improve this Doc View Source PersistentSnapshotDeletionPolicy(IndexDeletionPolicy, Directory) PersistentSnapshotDeletionPolicy wraps another IndexDeletionPolicy to enable flexible snapshotting, passing CREATE_OR_APPEND by default. Declaration public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir) Parameters Type Name Description IndexDeletionPolicy primary the IndexDeletionPolicy that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via Release(IndexCommit) . Directory dir the Directory which will be used to persist the snapshots information. | Improve this Doc View Source PersistentSnapshotDeletionPolicy(IndexDeletionPolicy, Directory, OpenMode) PersistentSnapshotDeletionPolicy wraps another IndexDeletionPolicy to enable flexible snapshotting. Declaration public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir, OpenMode mode) Parameters Type Name Description IndexDeletionPolicy primary the IndexDeletionPolicy that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via Release(IndexCommit) . Directory dir the Directory which will be used to persist the snapshots information. OpenMode mode specifies whether a new index should be created, deleting all existing snapshots information (immediately), or open an existing index, initializing the class with the snapshots information. Fields | Improve this Doc View Source SNAPSHOTS_PREFIX Prefix used for the save file. Declaration public static readonly string SNAPSHOTS_PREFIX Field Value Type Description System.String Properties | Improve this Doc View Source LastSaveFile Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved. Declaration public virtual string LastSaveFile { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Release(IndexCommit) Deletes a snapshotted commit. Once this method returns, the snapshot information is persisted in the directory. Declaration public override void Release(IndexCommit commit) Parameters Type Name Description IndexCommit commit Overrides SnapshotDeletionPolicy.Release(IndexCommit) See Also Release ( IndexCommit ) | Improve this Doc View Source Release(Int64) Deletes a snapshotted commit by generation. Once this method returns, the snapshot information is persisted in the directory. Declaration public virtual void Release(long gen) Parameters Type Name Description System.Int64 gen See Also Generation Release ( IndexCommit ) | Improve this Doc View Source Snapshot() Snapshots the last commit. Once this method returns, the snapshot information is persisted in the directory. Declaration public override IndexCommit Snapshot() Returns Type Description IndexCommit Overrides SnapshotDeletionPolicy.Snapshot() See Also Snapshot ()"
  },
  "api/Lucene.Net/Lucene.Net.Index.RandomAccessOrds.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.RandomAccessOrds.html",
    "title": "Class RandomAccessOrds | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RandomAccessOrds Extension of SortedSetDocValues that supports random access to the ordinals of a document. Operations via this API are independent of the iterator api ( NextOrd() ) and do not impact its state. Codecs can optionally extend this API if they support constant-time access to ordinals for the document. Inheritance System.Object SortedSetDocValues RandomAccessOrds Inherited Members SortedSetDocValues.NO_MORE_ORDS SortedSetDocValues.NextOrd() SortedSetDocValues.SetDocument(Int32) SortedSetDocValues.LookupOrd(Int64, BytesRef) SortedSetDocValues.ValueCount SortedSetDocValues.LookupTerm(BytesRef) SortedSetDocValues.GetTermsEnum() 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.Index Assembly : Lucene.Net.dll Syntax public abstract class RandomAccessOrds : SortedSetDocValues Constructors | Improve this Doc View Source RandomAccessOrds() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected RandomAccessOrds() Methods | Improve this Doc View Source Cardinality() Returns the cardinality for the current document (previously set by SetDocument(Int32) . Declaration public abstract int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source OrdAt(Int32) Retrieve the ordinal for the current document (previously set by SetDocument(Int32) at the specified index. An index ranges from 0 to Cardinality()-1 . The first ordinal value is at index 0 , the next at index 1 , and so on, as for array indexing. Declaration public abstract long OrdAt(int index) Parameters Type Name Description System.Int32 index index of the ordinal for the document. Returns Type Description System.Int64 ordinal for the document at the specified index."
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderManager.html",
    "title": "Class ReaderManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReaderManager Utility class to safely share DirectoryReader instances across multiple threads, while periodically reopening. This class ensures each reader is disposed only once all threads have finished using it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager < DirectoryReader > ReaderManager Implements System.IDisposable Inherited Members ReferenceManager<DirectoryReader>.Current ReferenceManager<DirectoryReader>.Acquire() ReferenceManager<DirectoryReader>.Dispose() ReferenceManager<DirectoryReader>.Dispose(Boolean) ReferenceManager<DirectoryReader>.MaybeRefresh() ReferenceManager<DirectoryReader>.MaybeRefreshBlocking() ReferenceManager<DirectoryReader>.AfterMaybeRefresh() ReferenceManager<DirectoryReader>.Release(DirectoryReader) ReferenceManager<DirectoryReader>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<DirectoryReader>.RemoveListener(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.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderManager : ReferenceManager<DirectoryReader>, IDisposable Constructors | Improve this Doc View Source ReaderManager(IndexWriter, Boolean) Creates and returns a new ReaderManager from the given IndexWriter . Declaration public ReaderManager(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer the IndexWriter to open the IndexReader from. System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the IndexSearcher / DirectoryReader . If false , the deletes may or may not be applied, but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . See OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source ReaderManager(Directory) Creates and returns a new ReaderManager from the given Directory . Declaration public ReaderManager(Directory dir) Parameters Type Name Description Directory dir the directory to open the DirectoryReader on. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error Methods | Improve this Doc View Source DecRef(DirectoryReader) Declaration protected override void DecRef(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.DecRef(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source GetRefCount(DirectoryReader) Declaration protected override int GetRefCount(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.GetRefCount(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source RefreshIfNeeded(DirectoryReader) Declaration protected override DirectoryReader RefreshIfNeeded(DirectoryReader referenceToRefresh) Parameters Type Name Description DirectoryReader referenceToRefresh Returns Type Description DirectoryReader Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.RefreshIfNeeded(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source TryIncRef(DirectoryReader) Declaration protected override bool TryIncRef(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.TryIncRef(Lucene.Net.Index.DirectoryReader) Implements System.IDisposable Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>) See Also SearcherManager"
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderSlice.html",
    "title": "Class ReaderSlice | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReaderSlice Subreader slice from a parent composite reader. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ReaderSlice 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderSlice Constructors | Improve this Doc View Source ReaderSlice(Int32, Int32, Int32) Sole constructor. Declaration public ReaderSlice(int start, int length, int readerIndex) Parameters Type Name Description System.Int32 start System.Int32 length System.Int32 readerIndex Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length ReaderSlice array. Declaration public static readonly ReaderSlice[] EMPTY_ARRAY Field Value Type Description ReaderSlice [] Properties | Improve this Doc View Source Length Number of documents in this slice. Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ReaderIndex Sub-reader index for this slice. Declaration public int ReaderIndex { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Document ID this slice starts from. Declaration public int Start { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderUtil.html",
    "title": "Class ReaderUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReaderUtil Common util methods for dealing with IndexReader s and IndexReaderContext s. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ReaderUtil 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.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderUtil Methods | Improve this Doc View Source GetTopLevelContext(IndexReaderContext) Walks up the reader tree and return the given context's top level reader context, or in other words the reader tree's root context. Declaration public static IndexReaderContext GetTopLevelContext(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context Returns Type Description IndexReaderContext | Improve this Doc View Source SubIndex(Int32, IList<AtomicReaderContext>) Returns index of the searcher/reader for document n in the array used to construct this searcher/reader. Declaration public static int SubIndex(int n, IList<AtomicReaderContext> leaves) Parameters Type Name Description System.Int32 n System.Collections.Generic.IList < AtomicReaderContext > leaves Returns Type Description System.Int32 | Improve this Doc View Source SubIndex(Int32, Int32[]) Returns index of the searcher/reader for document n in the array used to construct this searcher/reader. Declaration public static int SubIndex(int n, int[] docStarts) Parameters Type Name Description System.Int32 n System.Int32 [] docStarts Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentCommitInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentCommitInfo.html",
    "title": "Class SegmentCommitInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentCommitInfo Embeds a [read-only] SegmentInfo and adds per-commit fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentCommitInfo 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentCommitInfo Constructors | Improve this Doc View Source SegmentCommitInfo(SegmentInfo, Int32, Int64, Int64) Sole constructor. Declaration public SegmentCommitInfo(SegmentInfo info, int delCount, long delGen, long fieldInfosGen) Parameters Type Name Description SegmentInfo info SegmentInfo that we wrap System.Int32 delCount number of deleted documents in this segment System.Int64 delGen deletion generation number (used to name deletion files) System.Int64 fieldInfosGen FieldInfos generation number (used to name field-infos files) Properties | Improve this Doc View Source DelCount Returns the number of deleted docs in the segment. Declaration public virtual int DelCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DelGen Returns generation number of the live docs file or -1 if there are no deletes yet. Declaration public virtual long DelGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source FieldInfosGen Returns the generation number of the field infos file or -1 if there are no field updates yet. Declaration public virtual long FieldInfosGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source HasDeletions Returns true if there are any deletions for the segment at this commit. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasFieldUpdates Returns true if there are any field updates for the segment in this commit. Declaration public virtual bool HasFieldUpdates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Info The SegmentInfo that we wrap. Declaration public SegmentInfo Info { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source NextDelGen Returns the next available generation number of the live docs file. Declaration public virtual long NextDelGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NextFieldInfosGen Returns the next available generation number of the FieldInfos files. Declaration public virtual long NextFieldInfosGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source UpdatesFiles Returns the per generation updates files. Declaration public virtual IDictionary<long, ISet<string>> UpdatesFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.Int64 , System.Collections.Generic.ISet < System.String >> Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source GetFiles() Returns all files in use by this segment. Declaration public virtual ICollection<string> GetFiles() Returns Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source GetSizeInBytes() Returns total size in bytes of all files for this segment. NOTE: this value is not correct for 3.0 segments that have shared docstores. To get the correct value, upgrade! Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source SetGenUpdatesFiles(IDictionary<Int64, ISet<String>>) Sets the updates file names per generation. Does not deep clone the map. Declaration public virtual void SetGenUpdatesFiles(IDictionary<long, ISet<string>> genUpdatesFiles) Parameters Type Name Description System.Collections.Generic.IDictionary < System.Int64 , System.Collections.Generic.ISet < System.String >> genUpdatesFiles | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(Directory, Int32) Returns a description of this segment. Declaration public virtual string ToString(Directory dir, int pendingDelCount) Parameters Type Name Description Directory dir System.Int32 pendingDelCount Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfo.html",
    "title": "Class SegmentInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentInfo Information about a segment such as it's name, directory, and files related to the segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfo 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.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentInfo Constructors | Improve this Doc View Source SegmentInfo(Directory, String, String, Int32, Boolean, Codec, IDictionary<String, String>) Construct a new complete SegmentInfo instance from input. Note: this is public only to allow access from the codecs package. Declaration public SegmentInfo(Directory dir, string version, string name, int docCount, bool isCompoundFile, Codec codec, IDictionary<string, string> diagnostics) Parameters Type Name Description Directory dir System.String version System.String name System.Int32 docCount System.Boolean isCompoundFile Codec codec System.Collections.Generic.IDictionary < System.String , System.String > diagnostics | Improve this Doc View Source SegmentInfo(Directory, String, String, Int32, Boolean, Codec, IDictionary<String, String>, IDictionary<String, String>) Construct a new complete SegmentInfo instance from input. Note: this is public only to allow access from the codecs package. Declaration public SegmentInfo(Directory dir, string version, string name, int docCount, bool isCompoundFile, Codec codec, IDictionary<string, string> diagnostics, IDictionary<string, string> attributes) Parameters Type Name Description Directory dir System.String version System.String name System.Int32 docCount System.Boolean isCompoundFile Codec codec System.Collections.Generic.IDictionary < System.String , System.String > diagnostics System.Collections.Generic.IDictionary < System.String , System.String > attributes Fields | Improve this Doc View Source NO Used by some member fields to mean not present (e.g., norms, deletions). Declaration public static readonly int NO Field Value Type Description System.Int32 | Improve this Doc View Source YES Used by some member fields to mean present (e.g., norms, deletions). Declaration public static readonly int YES Field Value Type Description System.Int32 Properties | Improve this Doc View Source Attributes Returns the internal codec attributes map. May be null if no mappings exist. Declaration [Obsolete(\"no longer supported\")] public IDictionary<string, string> Attributes { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Codec Gets or Sets Codec that wrote this segment. Setter can only be called once. Declaration public Codec Codec { get; set; } Property Value Type Description Codec | Improve this Doc View Source Diagnostics Gets or Sets diagnostics saved into the segment when it was written. Declaration public IDictionary<string, string> Diagnostics { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Dir Where this segment resides. Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source DocCount Returns number of documents in this segment (deletions are not taken into account). Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Unique segment name in the directory. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source UseCompoundFile Gets or Sets whether this segment is stored as a compound file. true if this is a compound file; else, false Declaration public bool UseCompoundFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Version Used by DefaultSegmentInfosReader to upgrade a 3.0 segment to record its version is \"3.0\". this method can be removed when we're not required to support 3x indexes anymore, e.g. in 5.0. NOTE: this method is used for internal purposes only - you should not modify the version of a SegmentInfo , or it may result in unexpected exceptions thrown when you attempt to open the index. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public string Version { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source AddFile(String) Add this file to the set of files written for this segment. Declaration public void AddFile(string file) Parameters Type Name Description System.String file | Improve this Doc View Source AddFiles(ICollection<String>) Add these files to the set of files written for this segment. Declaration public void AddFiles(ICollection<string> files) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > files | Improve this Doc View Source Equals(Object) We consider another SegmentInfo instance equal if it has the same dir and same name. 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 GetAttribute(String) Get a codec attribute value, or null if it does not exist Declaration [Obsolete(\"no longer supported\")] public string GetAttribute(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetFiles() Return all files referenced by this SegmentInfo . Declaration public ISet<string> GetFiles() Returns Type Description System.Collections.Generic.ISet < System.String > | 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 PutAttribute(String, String) Puts a codec attribute value. This is a key-value mapping for the field that the codec can use to store additional metadata, and will be available to the codec when reading the segment via GetAttribute(String) If a value already exists for the field, it will be replaced with the new value. Declaration [Obsolete(\"no longer supported\")] public string PutAttribute(string key, string value) Parameters Type Name Description System.String key System.String value Returns Type Description System.String | Improve this Doc View Source SetFiles(ISet<String>) Sets the files written for this segment. Declaration public void SetFiles(ISet<string> files) Parameters Type Name Description System.Collections.Generic.ISet < System.String > files | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(Directory, Int32) Used for debugging. Format may suddenly change. Current format looks like _a(3.1):c45/4 , which means the segment's name is _a ; it was created with Lucene 3.1 (or '?' if it's unknown); it's using compound file format (would be C if not compound); it has 45 documents; it has 4 deletions (this part is left off when there are no deletions). Declaration public string ToString(Directory dir, int delCount) Parameters Type Name Description Directory dir System.Int32 delCount Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.FindSegmentsFile.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.FindSegmentsFile.html",
    "title": "Class SegmentInfos.FindSegmentsFile | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentInfos.FindSegmentsFile Utility class for executing code that needs to do something with the current segments file. This is necessary with lock-less commits because from the time you locate the current segments file name, until you actually open it, read its contents, or check modified time, etc., it could have been deleted due to a writer commit finishing. Inheritance System.Object SegmentInfos.FindSegmentsFile 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.Index Assembly : Lucene.Net.dll Syntax public abstract class FindSegmentsFile Constructors | Improve this Doc View Source FindSegmentsFile(Directory) Sole constructor. Declaration public FindSegmentsFile(Directory directory) Parameters Type Name Description Directory directory Methods | Improve this Doc View Source DoBody(String) Subclass must implement this. The assumption is an System.IO.IOException will be thrown if something goes wrong during the processing that could have been caused by a writer committing. Declaration protected abstract object DoBody(string segmentFileName) Parameters Type Name Description System.String segmentFileName Returns Type Description System.Object | Improve this Doc View Source Run() Locate the most recent segments file and run DoBody(String) on it. Declaration public virtual object Run() Returns Type Description System.Object | Improve this Doc View Source Run(IndexCommit) Run DoBody(String) on the provided commit. Declaration public virtual object Run(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Object"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.html",
    "title": "Class SegmentInfos | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentInfos A collection of segmentInfo objects with methods for operating on those segments in relation to the file system. The active segments in the index are stored in the segment info file, segments_N . There may be one or more segments_N files in the index; however, the one with the largest generation is the active one (when older segments_N files are present it's because they temporarily cannot be deleted, or, a writer is in the process of committing, or a custom IndexDeletionPolicy is in use). This file lists each segment by name and has details about the codec and generation of deletes. There is also a file segments.gen . this file contains the current generation (the _N in segments_N ) of the index. This is used only as a fallback in case the current generation cannot be accurately determined by directory listing alone (as is the case for some NFS clients with time-based directory cache expiration). This file simply contains an WriteInt32(Int32) version header ( FORMAT_SEGMENTS_GEN_CURRENT ), followed by the generation recorded as WriteInt64(Int64) , written twice. Files: segments.gen : GenHeader, Generation, Generation, Footer segments_N : Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles> SegCount , CommitUserData, Footer Data types: Header --> WriteHeader(DataOutput, String, Int32) GenHeader, NameCounter, SegCount, DeletionCount --> WriteInt32(Int32) Generation, Version, DelGen, Checksum, FieldInfosGen --> WriteInt64(Int64) SegName, SegCodec --> WriteString(String) CommitUserData --> WriteStringStringMap(IDictionary<String, String>) UpdatesFiles --> WriteStringSet(ISet<String>) Footer --> WriteFooter(IndexOutput) Field Descriptions: Version counts how often the index has been changed by adding or deleting documents. NameCounter is used to generate names for new segment files. SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment's index. DelGen is the generation count of the deletes file. If this is -1, there are no deletes. Anything above zero means there are deletes stored by LiveDocsFormat . DeletionCount records the number of deleted documents in this segment. SegCodec is the Name of the Codec that encoded this segment. CommitUserData stores an optional user-supplied opaque that was passed to SetCommitData(IDictionary<String, String>) . FieldInfosGen is the generation count of the fieldInfos file. If this is -1, there are no updates to the fieldInfos in that segment. Anything above zero means there are updates to fieldInfos stored by FieldInfosFormat . UpdatesFiles stores the list of files that were updated in that segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfos Implements System.Collections.Generic.IEnumerable < SegmentCommitInfo > 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.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentInfos : IEnumerable<SegmentCommitInfo>, IEnumerable Constructors | Improve this Doc View Source SegmentInfos() Sole constructor. Typically you call this and then use Read(Directory) or Read(Directory, String) to populate each SegmentCommitInfo . Alternatively, you can add/remove your own SegmentCommitInfo s. Declaration public SegmentInfos() Fields | Improve this Doc View Source FORMAT_SEGMENTS_GEN_CURRENT Current format of segments.gen Declaration public static readonly int FORMAT_SEGMENTS_GEN_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_40 The file format version for the segments_N codec header, up to 4.5. Declaration public static readonly int VERSION_40 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_46 The file format version for the segments_N codec header, since 4.6+. Declaration public static readonly int VERSION_46 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_48 The file format version for the segments_N codec header, since 4.8+ Declaration public static readonly int VERSION_48 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Returns number of SegmentCommitInfo s. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Counter Used to name new segments. Declaration public int Counter { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DefaultGenLookaheadCount Gets or Sets the Lucene.Net.Index.SegmentInfos.defaultGenLookaheadCount . Advanced: set how many times to try incrementing the gen when loading the segments file. this only runs if the primary (listing directory) and secondary (opening segments.gen file) methods fail to find the segments file. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static int DefaultGenLookaheadCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Generation Returns current generation. Declaration public long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source InfoStream If non-null, information about retries when loading the segments file will be printed to this. Declaration public static TextWriter InfoStream { get; set; } Property Value Type Description System.IO.TextWriter | Improve this Doc View Source LastGeneration Returns last succesfully read or written generation. Declaration public long LastGeneration { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Segments Declaration public IList<SegmentCommitInfo> Segments { get; } Property Value Type Description System.Collections.Generic.IList < SegmentCommitInfo > | Improve this Doc View Source TotalDocCount Returns sum of all segment's docCounts. Note that this does not include deletions Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UserData Gets Lucene.Net.Index.SegmentInfos.userData saved with this commit. Declaration public IDictionary<string, string> UserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > See Also Commit() | Improve this Doc View Source Version Version number when this SegmentInfos was generated. Declaration public long Version { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(SegmentCommitInfo) Appends the provided SegmentCommitInfo . Declaration public void Add(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si | Improve this Doc View Source AddAll(IEnumerable<SegmentCommitInfo>) Appends the provided SegmentCommitInfo s. Declaration public void AddAll(IEnumerable<SegmentCommitInfo> sis) Parameters Type Name Description System.Collections.Generic.IEnumerable < SegmentCommitInfo > sis | Improve this Doc View Source AsList() Returns all contained segments as an unmodifiable IList{SegmentCommitInfo} view. Declaration public IList<SegmentCommitInfo> AsList() Returns Type Description System.Collections.Generic.IList < SegmentCommitInfo > | Improve this Doc View Source Changed() Call this before committing if changes have been made to the segments. Declaration public void Changed() | Improve this Doc View Source Clear() Clear all SegmentCommitInfo s. Declaration public void Clear() | Improve this Doc View Source Clone() Returns a copy of this instance, also copying each SegmentInfo . Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source GenerationFromSegmentsFileName(String) Parse the generation off the segments file name and return it. Declaration public static long GenerationFromSegmentsFileName(string fileName) Parameters Type Name Description System.String fileName Returns Type Description System.Int64 | Improve this Doc View Source GetEnumerator() Returns an unmodifiable IEnumerator{SegmentCommitInfo} of contained segments in order. Declaration public IEnumerator<SegmentCommitInfo> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < SegmentCommitInfo > | Improve this Doc View Source GetFiles(Directory, Boolean) Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files associated with any \"external\" segments are skipped). The returned collection is recomputed on each invocation. Declaration public ICollection<string> GetFiles(Directory dir, bool includeSegmentsFile) Parameters Type Name Description Directory dir System.Boolean includeSegmentsFile Returns Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source GetLastCommitGeneration(Directory) Get the generation of the most recent commit to the index in this directory (N in the segments_N file). Declaration public static long GetLastCommitGeneration(Directory directory) Parameters Type Name Description Directory directory directory to search for the latest segments_N file Returns Type Description System.Int64 | Improve this Doc View Source GetLastCommitGeneration(String[]) Get the generation of the most recent commit to the list of index files (N in the segments_N file). Declaration public static long GetLastCommitGeneration(string[] files) Parameters Type Name Description System.String [] files array of file names to check Returns Type Description System.Int64 | Improve this Doc View Source GetLastCommitSegmentsFileName(Directory) Get the filename of the segments_N file for the most recent commit to the index in this Directory. Declaration public static string GetLastCommitSegmentsFileName(Directory directory) Parameters Type Name Description Directory directory directory to search for the latest segments_N file Returns Type Description System.String | Improve this Doc View Source GetLastCommitSegmentsFileName(String[]) Get the filename of the segments_N file for the most recent commit in the list of index files. Declaration public static string GetLastCommitSegmentsFileName(string[] files) Parameters Type Name Description System.String [] files array of file names to check Returns Type Description System.String | Improve this Doc View Source GetNextSegmentFileName() Get the next segments_N filename that will be written. Declaration public string GetNextSegmentFileName() Returns Type Description System.String | Improve this Doc View Source GetSegmentsFileName() Get the segments_N filename in use by this segment infos. Declaration public string GetSegmentsFileName() Returns Type Description System.String | Improve this Doc View Source Info(Int32) Returns SegmentCommitInfo at the provided index. Declaration public SegmentCommitInfo Info(int i) Parameters Type Name Description System.Int32 i Returns Type Description SegmentCommitInfo | Improve this Doc View Source Read(Directory) Find the latest commit ( segments_N file ) and load all SegmentCommitInfo s. Declaration public void Read(Directory directory) Parameters Type Name Description Directory directory | Improve this Doc View Source Read(Directory, String) Read a particular segmentFileName . Note that this may throw an System.IO.IOException if a commit is in process. Declaration public void Read(Directory directory, string segmentFileName) Parameters Type Name Description Directory directory directory containing the segments file System.String segmentFileName segment file to load Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Remove(SegmentCommitInfo) Remove the provided SegmentCommitInfo . WARNING : O(N) cost Declaration public void Remove(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si | Improve this Doc View Source ToString(Directory) Returns readable description of this segment. Declaration public string ToString(Directory directory) Parameters Type Name Description Directory directory Returns Type Description System.String | Improve this Doc View Source Write3xInfo(Directory, SegmentInfo, IOContext) Declaration [Obsolete] public static string Write3xInfo(Directory dir, SegmentInfo si, IOContext context) Parameters Type Name Description Directory dir SegmentInfo si IOContext context Returns Type Description System.String | Improve this Doc View Source WriteSegmentsGen(Directory, Int64) A utility for writing the SEGMENTS_GEN file to a Directory . NOTE: this is an internal utility which is kept public so that it's accessible by code from other packages. You should avoid calling this method unless you're absolutely sure what you're doing! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static void WriteSegmentsGen(Directory dir, long generation) Parameters Type Name Description Directory dir System.Int64 generation Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReader.html",
    "title": "Class SegmentReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentReader IndexReader implementation over a single segment. Instances pointing to the same segment (but with different deletes, etc) may share the same core data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexReader AtomicReader SegmentReader Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentReader : AtomicReader, IDisposable Constructors | Improve this Doc View Source SegmentReader(SegmentCommitInfo, Int32, IOContext) Constructs a new SegmentReader with a new core. Declaration public SegmentReader(SegmentCommitInfo si, int termInfosIndexDivisor, IOContext context) Parameters Type Name Description SegmentCommitInfo si System.Int32 termInfosIndexDivisor IOContext context Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey | Improve this Doc View Source Directory Returns the directory this index resides in. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source FieldsReader Expert: retrieve thread-private StoredFieldsReader This is a Lucene.NET INTERNAL API, use at your own risk Declaration public StoredFieldsReader FieldsReader { get; } Property Value Type Description StoredFieldsReader | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs | Improve this Doc View Source SegmentInfo Return the SegmentCommitInfo of the segment this reader is reading. Declaration public SegmentCommitInfo SegmentInfo { get; } Property Value Type Description SegmentCommitInfo | Improve this Doc View Source SegmentName Return the name of the segment this reader is reading. Declaration public string SegmentName { get; } Property Value Type Description System.String | Improve this Doc View Source TermInfosIndexDivisor Returns term infos index divisor originally passed to SegmentReader(SegmentCommitInfo, Int32, IOContext) . Declaration public int TermInfosIndexDivisor { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermVectorsReader Expert: retrieve thread-private TermVectorsReader This is a Lucene.NET INTERNAL API, use at your own risk Declaration public TermVectorsReader TermVectorsReader { get; } Property Value Type Description TermVectorsReader Methods | Improve this Doc View Source AddCoreDisposedListener(SegmentReader.ICoreDisposedListener) Expert: adds a SegmentReader.ICoreDisposedListener to this reader's shared core Declaration public void AddCoreDisposedListener(SegmentReader.ICoreDisposedListener listener) Parameters Type Name Description SegmentReader.ICoreDisposedListener listener | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM Bytes used Declaration public long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source RemoveCoreDisposedListener(SegmentReader.ICoreDisposedListener) Expert: removes a SegmentReader.ICoreDisposedListener from this reader's shared core Declaration public void RemoveCoreDisposedListener(SegmentReader.ICoreDisposedListener listener) Parameters Type Name Description SegmentReader.ICoreDisposedListener listener | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReader.ICoreDisposedListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReader.ICoreDisposedListener.html",
    "title": "Interface SegmentReader.ICoreDisposedListener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface SegmentReader.ICoreDisposedListener Called when the shared core for this SegmentReader is disposed. This listener is called only once all SegmentReader s sharing the same core are disposed. At this point it is safe for apps to evict this reader from any caches keyed on CoreCacheKey . This is the same interface that IFieldCache uses, internally, to evict entries. NOTE: This was CoreClosedListener in Lucene. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface ICoreDisposedListener Methods | Improve this Doc View Source OnDispose(Object) Invoked when the shared core of the original SegmentReader has disposed. Declaration void OnDispose(object ownerCoreCacheKey) Parameters Type Name Description System.Object ownerCoreCacheKey"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReadState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReadState.html",
    "title": "Class SegmentReadState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentReadState Holder class for common parameters used during read. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentReadState 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.Index Assembly : Lucene.Net.dll Syntax public class SegmentReadState Constructors | Improve this Doc View Source SegmentReadState(SegmentReadState, String) Create a SegmentReadState . Declaration public SegmentReadState(SegmentReadState other, string newSegmentSuffix) Parameters Type Name Description SegmentReadState other System.String newSegmentSuffix | Improve this Doc View Source SegmentReadState(Directory, SegmentInfo, FieldInfos, IOContext, Int32) Create a SegmentReadState . Declaration public SegmentReadState(Directory dir, SegmentInfo info, FieldInfos fieldInfos, IOContext context, int termsIndexDivisor) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fieldInfos IOContext context System.Int32 termsIndexDivisor | Improve this Doc View Source SegmentReadState(Directory, SegmentInfo, FieldInfos, IOContext, Int32, String) Create a SegmentReadState . Declaration public SegmentReadState(Directory dir, SegmentInfo info, FieldInfos fieldInfos, IOContext context, int termsIndexDivisor, string segmentSuffix) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fieldInfos IOContext context System.Int32 termsIndexDivisor System.String segmentSuffix Properties | Improve this Doc View Source Context IOContext to pass to OpenInput(String, IOContext) . Declaration public IOContext Context { get; } Property Value Type Description IOContext | Improve this Doc View Source Directory Directory where this segment is read from. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos FieldInfos describing all fields in this segment. Declaration public FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source SegmentInfo SegmentInfo describing this segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source SegmentSuffix Unique suffix for any postings files read for this segment. PerFieldPostingsFormat sets this for each of the postings formats it wraps. If you create a new PostingsFormat then any files you write/read must be derived using this suffix (use SegmentFileName(String, String, String) ). Declaration public string SegmentSuffix { get; } Property Value Type Description System.String | Improve this Doc View Source TermsIndexDivisor The termInfosIndexDivisor to use, if appropriate (not all PostingsFormat s support it; in particular the current default does not). NOTE: if this is < 0, that means \"defer terms index load until needed\". But if the codec must load the terms index on init (preflex is the only once currently that must do so), then it should negate this value to get the app's terms divisor Declaration public int TermsIndexDivisor { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentWriteState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentWriteState.html",
    "title": "Class SegmentWriteState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SegmentWriteState Holder class for common parameters used during write. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentWriteState 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.Index Assembly : Lucene.Net.dll Syntax public class SegmentWriteState Constructors | Improve this Doc View Source SegmentWriteState(SegmentWriteState, String) Create a shallow copy of SegmentWriteState with a new segment suffix. Declaration public SegmentWriteState(SegmentWriteState state, string segmentSuffix) Parameters Type Name Description SegmentWriteState state System.String segmentSuffix | Improve this Doc View Source SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext) Sole constructor. Declaration public SegmentWriteState(InfoStream infoStream, Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, int termIndexInterval, BufferedUpdates segUpdates, IOContext context) Parameters Type Name Description InfoStream infoStream Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos System.Int32 termIndexInterval BufferedUpdates segUpdates IOContext context | Improve this Doc View Source SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext, String) Constructor which takes segment suffix. Declaration public SegmentWriteState(InfoStream infoStream, Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, int termIndexInterval, BufferedUpdates segUpdates, IOContext context, string segmentSuffix) Parameters Type Name Description InfoStream infoStream Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos System.Int32 termIndexInterval BufferedUpdates segUpdates IOContext context System.String segmentSuffix See Also SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext) Properties | Improve this Doc View Source Context IOContext for all writes; you should pass this to CreateOutput(String, IOContext) . Declaration public IOContext Context { get; } Property Value Type Description IOContext | Improve this Doc View Source DelCountOnFlush Number of deleted documents set while flushing the segment. Declaration public int DelCountOnFlush { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Directory Directory where this segment will be written to. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos FieldInfos describing all fields in this segment. Declaration public FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source InfoStream InfoStream used for debugging messages. Declaration public InfoStream InfoStream { get; } Property Value Type Description InfoStream | Improve this Doc View Source LiveDocs IMutableBits recording live documents; this is only set if there is one or more deleted documents. Declaration public IMutableBits LiveDocs { get; set; } Property Value Type Description IMutableBits | Improve this Doc View Source SegmentInfo SegmentInfo describing this segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source SegmentSuffix Unique suffix for any postings files written for this segment. PerFieldPostingsFormat sets this for each of the postings formats it wraps. If you create a new PostingsFormat then any files you write/read must be derived using this suffix (use SegmentFileName(String, String, String) ). Declaration public string SegmentSuffix { get; } Property Value Type Description System.String | Improve this Doc View Source SegUpdates Deletes and updates to apply while we are flushing the segment. A Term is enrolled in here if it was deleted/updated at one point, and it's mapped to the docIDUpto, meaning any docID < docIDUpto containing this term should be deleted/updated. Declaration public BufferedUpdates SegUpdates { get; } Property Value Type Description BufferedUpdates | Improve this Doc View Source TermIndexInterval Expert: The fraction of terms in the \"dictionary\" which should be stored in RAM. Smaller values use more memory, but make searching slightly faster, while larger values use less memory and make searching slightly slower. Searching is typically not dominated by dictionary lookup, so tweaking this is rarely useful. Declaration public int TermIndexInterval { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SerialMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SerialMergeScheduler.html",
    "title": "Class SerialMergeScheduler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SerialMergeScheduler A MergeScheduler that simply does each merge sequentially, using the current thread. Inheritance System.Object MergeScheduler SerialMergeScheduler Implements IMergeScheduler System.IDisposable Inherited Members MergeScheduler.Dispose() MergeScheduler.Clone() 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.Index Assembly : Lucene.Net.dll Syntax public class SerialMergeScheduler : MergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source SerialMergeScheduler() Sole constructor. Declaration public SerialMergeScheduler() Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Just do the merges in sequence. We do this \"synchronized\" so that even if the application is using multiple threads, only one merge may run at a time. Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) Implements IMergeScheduler System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.SimpleMergedSegmentWarmer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SimpleMergedSegmentWarmer.html",
    "title": "Class SimpleMergedSegmentWarmer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleMergedSegmentWarmer A very simple merged segment warmer that just ensures data structures are initialized. Inheritance System.Object IndexWriter.IndexReaderWarmer SimpleMergedSegmentWarmer 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.Index Assembly : Lucene.Net.dll Syntax public class SimpleMergedSegmentWarmer : IndexWriter.IndexReaderWarmer Constructors | Improve this Doc View Source SimpleMergedSegmentWarmer(InfoStream) Creates a new SimpleMergedSegmentWarmer Declaration public SimpleMergedSegmentWarmer(InfoStream infoStream) Parameters Type Name Description InfoStream infoStream InfoStream to log statistics about warming. Methods | Improve this Doc View Source Warm(AtomicReader) Declaration public override void Warm(AtomicReader reader) Parameters Type Name Description AtomicReader reader Overrides IndexWriter.IndexReaderWarmer.Warm(AtomicReader)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SingleTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SingleTermsEnum.html",
    "title": "Class SingleTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleTermsEnum Subclass of FilteredTermsEnum for enumerating a single term. For example, this can be used by MultiTermQuery s that need only visit one term, but want to preserve MultiTermQuery semantics such as MultiTermRewriteMethod . Inheritance System.Object TermsEnum FilteredTermsEnum SingleTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY 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.Index Assembly : Lucene.Net.dll Syntax public sealed class SingleTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source SingleTermsEnum(TermsEnum, BytesRef) Creates a new SingleTermsEnum . After calling the constructor the enumeration is already pointing to the term, if it exists. Declaration public SingleTermsEnum(TermsEnum tenum, BytesRef termText) Parameters Type Name Description TermsEnum tenum BytesRef termText Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.SlowCompositeReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SlowCompositeReaderWrapper.html",
    "title": "Class SlowCompositeReaderWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SlowCompositeReaderWrapper This class forces a composite reader (eg a MultiReader or DirectoryReader ) to emulate an atomic reader. This requires implementing the postings APIs on-the-fly, using the static methods in MultiFields , MultiDocValues , by stepping through the sub-readers to merge fields/terms, appending docs, etc. NOTE : This class almost always results in a performance hit. If this is important to your use case, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. Inheritance System.Object IndexReader AtomicReader SlowCompositeReaderWrapper Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SlowCompositeReaderWrapper : AtomicReader, IDisposable Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Wrap(IndexReader) This method is sugar for getting an AtomicReader from an IndexReader of any kind. If the reader is already atomic, it is returned unchanged, otherwise wrapped by this class. Declaration public static AtomicReader Wrap(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description AtomicReader Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.SnapshotDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SnapshotDeletionPolicy.html",
    "title": "Class SnapshotDeletionPolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SnapshotDeletionPolicy An IndexDeletionPolicy that wraps any other IndexDeletionPolicy and adds the ability to hold and later release snapshots of an index. While a snapshot is held, the IndexWriter will not remove any files associated with it even if the index is otherwise being actively, arbitrarily changed. Because we wrap another arbitrary IndexDeletionPolicy , this gives you the freedom to continue using whatever IndexDeletionPolicy you would normally want to use with your index. This class maintains all snapshots in-memory, and so the information is not persisted and not protected against system failures. If persistence is important, you can use PersistentSnapshotDeletionPolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexDeletionPolicy SnapshotDeletionPolicy PersistentSnapshotDeletionPolicy 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.Index Assembly : Lucene.Net.dll Syntax public class SnapshotDeletionPolicy : IndexDeletionPolicy Constructors | Improve this Doc View Source SnapshotDeletionPolicy(IndexDeletionPolicy) Sole constructor, taking the incoming IndexDeletionPolicy to wrap. Declaration public SnapshotDeletionPolicy(IndexDeletionPolicy primary) Parameters Type Name Description IndexDeletionPolicy primary Fields | Improve this Doc View Source m_indexCommits Used to map gen to IndexCommit . Declaration protected IDictionary<long?, IndexCommit> m_indexCommits Field Value Type Description System.Collections.Generic.IDictionary < System.Nullable < System.Int64 >, IndexCommit > | Improve this Doc View Source m_lastCommit Most recently committed IndexCommit . Declaration protected IndexCommit m_lastCommit Field Value Type Description IndexCommit | Improve this Doc View Source m_refCounts Records how many snapshots are held against each commit generation Declaration protected IDictionary<long, int> m_refCounts Field Value Type Description System.Collections.Generic.IDictionary < System.Int64 , System.Int32 > Properties | Improve this Doc View Source SnapshotCount Returns the total number of snapshots currently held. Declaration public virtual int SnapshotCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexDeletionPolicy.Clone() | Improve this Doc View Source GetIndexCommit(Int64) Retrieve an IndexCommit from its generation; returns null if this IndexCommit is not currently snapshotted Declaration public virtual IndexCommit GetIndexCommit(long gen) Parameters Type Name Description System.Int64 gen Returns Type Description IndexCommit | Improve this Doc View Source GetSnapshots() Returns all IndexCommit s held by at least one snapshot. Declaration public virtual IList<IndexCommit> GetSnapshots() Returns Type Description System.Collections.Generic.IList < IndexCommit > | Improve this Doc View Source IncRef(IndexCommit) Increments the refCount for this IndexCommit . Declaration protected virtual void IncRef(IndexCommit ic) Parameters Type Name Description IndexCommit ic | Improve this Doc View Source OnCommit<T>(IList<T>) Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source Release(IndexCommit) Release a snapshotted commit. Declaration public virtual void Release(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit previously returned by Snapshot() | Improve this Doc View Source ReleaseGen(Int64) Release a snapshot by generation. Declaration protected virtual void ReleaseGen(long gen) Parameters Type Name Description System.Int64 gen | Improve this Doc View Source Snapshot() Snapshots the last commit and returns it. Once a commit is 'snapshotted,' it is protected from deletion (as long as this IndexDeletionPolicy is used). The snapshot can be removed by calling Release(IndexCommit) followed by a call to DeleteUnusedFiles() . NOTE: while the snapshot is held, the files it references will not be deleted, which will consume additional disk space in your index. If you take a snapshot at a particularly bad time (say just before you call ForceMerge(Int32) ) then in the worst case this could consume an extra 1X of your total index size, until you release the snapshot. Declaration public virtual IndexCommit Snapshot() Returns Type Description IndexCommit the IndexCommit that was snapshotted. Exceptions Type Condition System.InvalidOperationException if this index does not have any commits yet"
  },
  "api/Lucene.Net/Lucene.Net.Index.SortedDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SortedDocValues.html",
    "title": "Class SortedDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedDocValues A per-document byte[] with presorted values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. Inheritance System.Object BinaryDocValues SortedDocValues MultiDocValues.MultiSortedDocValues 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.Index Assembly : Lucene.Net.dll Syntax public abstract class SortedDocValues : BinaryDocValues Constructors | Improve this Doc View Source SortedDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SortedDocValues() Properties | Improve this Doc View Source ValueCount Returns the number of unique values. Declaration public abstract int ValueCount { get; } Property Value Type Description System.Int32 Number of unique values in this SortedDocValues . This is also equivalent to one plus the maximum ordinal. Methods | Improve this Doc View Source Get(Int32, BytesRef) Declaration public override void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result Overrides BinaryDocValues.Get(Int32, BytesRef) | Improve this Doc View Source GetOrd(Int32) Returns the ordinal for the specified docID. Declaration public abstract int GetOrd(int docID) Parameters Type Name Description System.Int32 docID document ID to lookup Returns Type Description System.Int32 ordinal for the document: this is dense, starts at 0, then increments by 1 for the next value in sorted order. Note that missing values are indicated by -1. | Improve this Doc View Source GetTermsEnum() Returns a TermsEnum over the values. The enum supports Ord and SeekExact(Int64) . Declaration public virtual TermsEnum GetTermsEnum() Returns Type Description TermsEnum | Improve this Doc View Source LookupOrd(Int32, BytesRef) Retrieves the value for the specified ordinal. Declaration public abstract void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord ordinal to lookup (must be >= 0 and < ValueCount ) BytesRef result will be populated with the ordinal's value See Also GetOrd(Int32) | Improve this Doc View Source LookupTerm(BytesRef) If key exists, returns its ordinal, else returns -insertionPoint-1 , like System.Array.BinarySearch(System.Array,System.Int32,System.Int32,System.Object) Declaration public virtual int LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Key to look up Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SortedSetDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SortedSetDocValues.html",
    "title": "Class SortedSetDocValues | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortedSetDocValues A per-document set of presorted byte[] values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. Inheritance System.Object SortedSetDocValues MultiDocValues.MultiSortedSetDocValues RandomAccessOrds 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.Index Assembly : Lucene.Net.dll Syntax public abstract class SortedSetDocValues Constructors | Improve this Doc View Source SortedSetDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SortedSetDocValues() Fields | Improve this Doc View Source NO_MORE_ORDS When returned by NextOrd() it means there are no more ordinals for the document. Declaration public static readonly long NO_MORE_ORDS Field Value Type Description System.Int64 Properties | Improve this Doc View Source ValueCount Returns the number of unique values. Declaration public abstract long ValueCount { get; } Property Value Type Description System.Int64 Number of unique values in this SortedDocValues . This is also equivalent to one plus the maximum ordinal. Methods | Improve this Doc View Source GetTermsEnum() Returns a TermsEnum over the values. The enum supports Ord and SeekExact(Int64) . Declaration public virtual TermsEnum GetTermsEnum() Returns Type Description TermsEnum | Improve this Doc View Source LookupOrd(Int64, BytesRef) Retrieves the value for the specified ordinal. Declaration public abstract void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord ordinal to lookup BytesRef result will be populated with the ordinal's value See Also NextOrd() | Improve this Doc View Source LookupTerm(BytesRef) If key exists, returns its ordinal, else returns -insertionPoint-1 , like System.Array.BinarySearch(System.Array,System.Int32,System.Int32,System.Object) . Declaration public virtual long LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Key to look up Returns Type Description System.Int64 | Improve this Doc View Source NextOrd() Returns the next ordinal for the current document (previously set by SetDocument(Int32) . Declaration public abstract long NextOrd() Returns Type Description System.Int64 Next ordinal for the document, or NO_MORE_ORDS . ordinals are dense, start at 0, then increment by 1 for the next value in sorted order. | Improve this Doc View Source SetDocument(Int32) Sets iteration to the specified docID Declaration public abstract void SetDocument(int docID) Parameters Type Name Description System.Int32 docID document ID"
  },
  "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.html",
    "title": "Class StoredFieldVisitor | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StoredFieldVisitor Expert: Provides a low-level means of accessing the stored field values in an index. See Document(Int32, StoredFieldVisitor) . NOTE : a StoredFieldVisitor implementation should not try to load or visit other stored documents in the same reader because the implementation of stored fields for most codecs is not reeentrant and you will see strange exceptions as a result. See DocumentStoredFieldVisitor , which is a StoredFieldVisitor that builds the Document containing all stored fields. This is used by Document(Int32) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldVisitor DocumentStoredFieldVisitor 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.Index Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldVisitor Constructors | Improve this Doc View Source StoredFieldVisitor() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldVisitor() Methods | Improve this Doc View Source BinaryField(FieldInfo, Byte[]) Process a binary field. Declaration public virtual void BinaryField(FieldInfo fieldInfo, byte[] value) Parameters Type Name Description FieldInfo fieldInfo System.Byte [] value newly allocated byte array with the binary contents. | Improve this Doc View Source DoubleField(FieldInfo, Double) Process a System.Double numeric field. Declaration public virtual void DoubleField(FieldInfo fieldInfo, double value) Parameters Type Name Description FieldInfo fieldInfo System.Double value | Improve this Doc View Source Int32Field(FieldInfo, Int32) Process a System.Int32 numeric field. Declaration public virtual void Int32Field(FieldInfo fieldInfo, int value) Parameters Type Name Description FieldInfo fieldInfo System.Int32 value | Improve this Doc View Source Int64Field(FieldInfo, Int64) Process a System.Int64 numeric field. Declaration public virtual void Int64Field(FieldInfo fieldInfo, long value) Parameters Type Name Description FieldInfo fieldInfo System.Int64 value | Improve this Doc View Source NeedsField(FieldInfo) Hook before processing a field. Before a field is processed, this method is invoked so that subclasses can return a StoredFieldVisitor.Status representing whether they need that particular field or not, or to stop processing entirely. Declaration public abstract StoredFieldVisitor.Status NeedsField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description StoredFieldVisitor.Status | Improve this Doc View Source SingleField(FieldInfo, Single) Process a System.Single numeric field. Declaration public virtual void SingleField(FieldInfo fieldInfo, float value) Parameters Type Name Description FieldInfo fieldInfo System.Single value | Improve this Doc View Source StringField(FieldInfo, String) Process a System.String field Declaration public virtual void StringField(FieldInfo fieldInfo, string value) Parameters Type Name Description FieldInfo fieldInfo System.String value"
  },
  "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.Status.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.Status.html",
    "title": "Enum StoredFieldVisitor.Status | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum StoredFieldVisitor.Status Enumeration of possible return values for NeedsField(FieldInfo) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum Status Fields Name Description NO NO: don't visit this field, but continue processing fields for this document. STOP STOP: don't visit this field and stop processing any other fields for this document. YES YES: the field should be visited."
  },
  "api/Lucene.Net/Lucene.Net.Index.TaskMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TaskMergeScheduler.html",
    "title": "Class TaskMergeScheduler | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TaskMergeScheduler A MergeScheduler that runs each merge using System.Threading.Tasks.Task s on the default System.Threading.Tasks.TaskScheduler . If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. LUCENENET specific Inheritance System.Object MergeScheduler TaskMergeScheduler Implements IConcurrentMergeScheduler IMergeScheduler System.IDisposable Inherited Members MergeScheduler.Dispose() 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.Index Assembly : Lucene.Net.dll Syntax public class TaskMergeScheduler : MergeScheduler, IConcurrentMergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source TaskMergeScheduler() Sole constructor, with all settings set to default values. Declaration public TaskMergeScheduler() Fields | Improve this Doc View Source COMPONENT_NAME Declaration public const string COMPONENT_NAME = \"CMS\" Field Value Type Description System.String Properties | Improve this Doc View Source MaxMergeCount Max number of merges we accept before forcefully throttling the incoming threads Declaration public int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Max number of merge threads allowed to be running at once. When there are more merges then this, we forcefully pause the larger ones, letting the smaller ones run, up until MaxMergeCount merges at which point we forcefully pause incoming threads (that presumably are the ones causing so much merging). Declaration public int MaxThreadCount { get; } Property Value Type Description System.Int32 See Also SetMaxMergesAndThreads(Int32, Int32) | Improve this Doc View Source MergeThreadPriority Return the priority that merge threads run at. This is always the same. Declaration public int MergeThreadPriority { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Verbose Returns true if verbosing is enabled. This method is usually used in conjunction with Message(String) , like that: if (Verbose) { Message(\"your message\"); } Declaration protected bool Verbose { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ClearSuppressExceptions() Used for testing Declaration public virtual void ClearSuppressExceptions() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source DoMerge(MergePolicy.OneMerge) Does the actual merge, by calling Merge(MergePolicy.OneMerge) Declaration protected virtual void DoMerge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source HandleMergeException(Exception) Called when an exception is hit in a background merge thread Declaration protected virtual void HandleMergeException(Exception exc) Parameters Type Name Description System.Exception exc | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) | Improve this Doc View Source Message(String) Outputs the given message - this method assumes Verbose was called and returned true . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Sets the maximum number of merge threads and simultaneous merges allowed. Declaration public void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount The max # simultaneous merges that are allowed. If a merge is necessary yet we already have this many threads running, the incoming thread (that is calling add/updateDocument) will block until a merge thread has completed. Note that we will only run the smallest maxThreadCount merges at a time. System.Int32 maxThreadCount The max # simultaneous merge threads that should be running at once. This must be <= maxMergeCount | Improve this Doc View Source SetMergeThreadPriority(Int32) This method has no effect in TaskMergeScheduler because the MergeThreadPriority returns a constant value. Declaration public void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Used for testing Declaration public virtual void SetSuppressExceptions() | Improve this Doc View Source Sync() Wait for any running merge threads to finish. This call is not interruptible as used by Dispose() . Declaration public virtual void Sync() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IConcurrentMergeScheduler IMergeScheduler System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.Term.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Term.html",
    "title": "Class Term | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Term A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc. Inheritance System.Object Term Implements System.IComparable < Term > System.IEquatable < Term > 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.Index Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class Term : IComparable<Term>, IEquatable<Term> Constructors | Improve this Doc View Source Term(String) Constructs a Term with the given field and empty text. this serves two purposes: 1) reuse of a Term with the same field. 2) pattern for a query. Declaration public Term(string fld) Parameters Type Name Description System.String fld field's name | Improve this Doc View Source Term(String, BytesRef) Constructs a Term with the given field and bytes. Note that a null field or null bytes value results in undefined behavior for most Lucene APIs that accept a Term parameter. WARNING: the provided BytesRef is not copied, but used directly. Therefore the bytes should not be modified after construction, for example, you should clone a copy by DeepCopyOf(BytesRef) rather than pass reused bytes from a TermsEnum . Declaration public Term(string fld, BytesRef bytes) Parameters Type Name Description System.String fld BytesRef bytes | Improve this Doc View Source Term(String, String) Constructs a Term with the given field and text. Note that a null field or null text value results in undefined behavior for most Lucene APIs that accept a Term parameter. Declaration public Term(string fld, string text) Parameters Type Name Description System.String fld System.String text Properties | Improve this Doc View Source Bytes Returns the bytes of this term. Declaration public BytesRef Bytes { get; } Property Value Type Description BytesRef | Improve this Doc View Source Field Returns the field of this term. The field indicates the part of a document which this term came from. Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(Term) Compares two terms, returning a negative integer if this term belongs before the argument, zero if this term is equal to the argument, and a positive integer if this term belongs after the argument. The ordering of terms is first by field, then by text. Declaration public int CompareTo(Term other) Parameters Type Name Description Term other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Term) Declaration public bool Equals(Term other) Parameters Type Name Description Term 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() | Improve this Doc View Source Text() Returns the text of this term. In the case of words, this is simply the text of the word. In the case of dates and other types, this is an encoding of the object as a string. Declaration public string Text() Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(BytesRef) Returns human-readable form of the term text. If the term is not unicode, the raw bytes will be printed instead. Declaration public static string ToString(BytesRef termText) Parameters Type Name Description BytesRef termText Returns Type Description System.String Implements System.IComparable<T> System.IEquatable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermContext.html",
    "title": "Class TermContext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermContext Maintains a IndexReader TermState view over IndexReader instances containing a single term. The TermContext doesn't track if the given TermState objects are valid, neither if the TermState instances refer to the same terms in the associated readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermContext 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.Index Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class TermContext Constructors | Improve this Doc View Source TermContext(IndexReaderContext) Creates an empty TermContext from a IndexReaderContext Declaration public TermContext(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context | Improve this Doc View Source TermContext(IndexReaderContext, TermState, Int32, Int32, Int64) Creates a TermContext with an initial TermState , IndexReader pair. Declaration public TermContext(IndexReaderContext context, TermState state, int ord, int docFreq, long totalTermFreq) Parameters Type Name Description IndexReaderContext context TermState state System.Int32 ord System.Int32 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq expert: only available for queries that want to lie about docfreq This is a Lucene.NET INTERNAL API, use at your own risk Declaration public int DocFreq { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopReaderContext Holds the IndexReaderContext of the top-level IndexReader , used internally only for asserting. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexReaderContext TopReaderContext { get; } Property Value Type Description IndexReaderContext | Improve this Doc View Source TotalTermFreq Returns the accumulated term frequency of all TermState instances passed to Register(TermState, Int32, Int32, Int64) . Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 the accumulated term frequency of all TermState instances passed to Register(TermState, Int32, Int32, Int64) . Methods | Improve this Doc View Source Build(IndexReaderContext, Term) Creates a TermContext from a top-level IndexReaderContext and the given Term . this method will lookup the given term in all context's leaf readers and register each of the readers containing the term in the returned TermContext using the leaf reader's ordinal. Note: the given context must be a top-level context. Declaration public static TermContext Build(IndexReaderContext context, Term term) Parameters Type Name Description IndexReaderContext context Term term Returns Type Description TermContext | Improve this Doc View Source Clear() Clears the TermContext internal state and removes all registered TermState s Declaration public void Clear() | Improve this Doc View Source Get(Int32) Returns the TermState for an leaf ordinal or null if no TermState for the ordinal was registered. Declaration public TermState Get(int ord) Parameters Type Name Description System.Int32 ord The readers leaf ordinal to get the TermState for. Returns Type Description TermState The TermState for the given readers ord or null if no TermState for the reader was registered | Improve this Doc View Source Register(TermState, Int32, Int32, Int64) Registers and associates a TermState with an leaf ordinal. The leaf ordinal should be derived from a IndexReaderContext 's leaf ord. Declaration public void Register(TermState state, int ord, int docFreq, long totalTermFreq) Parameters Type Name Description TermState state System.Int32 ord System.Int32 docFreq System.Int64 totalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Index.Terms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Terms.html",
    "title": "Class Terms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Terms Access to the terms in a specific field. See Fields . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Terms BlockTreeTermsReader.FieldReader FilterAtomicReader.FilterTerms MultiTerms 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.Index Assembly : Lucene.Net.dll Syntax public abstract class Terms Constructors | Improve this Doc View Source Terms() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected Terms() Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length array of Terms . Declaration public static readonly Terms[] EMPTY_ARRAY Field Value Type Description Terms [] Properties | Improve this Doc View Source Comparer Return the IComparer{BytesRef} used to sort terms provided by the iterator. This method may return null if there are no terms. This method may be invoked many times; it's best to cache a single instance & reuse it. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Count Returns the number of terms for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. NOTE: This was size() in Lucene. Declaration public abstract long Count { get; } Property Value Type Description System.Int64 | Improve this Doc View Source DocCount Returns the number of documents that have at least one term for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasFreqs Returns true if documents in this field store per-document term frequency ( Freq ). Declaration public abstract bool HasFreqs { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasOffsets Returns true if documents in this field store offsets. Declaration public abstract bool HasOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if documents in this field store payloads. Declaration public abstract bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPositions Returns true if documents in this field store positions. Declaration public abstract bool HasPositions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SumDocFreq Returns the sum of DocFreq for all terms in this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long SumDocFreq { get; } Property Value Type Description System.Int64 | Improve this Doc View Source SumTotalTermFreq Returns the sum of TotalTermFreq for all terms in this field, or -1 if this measure isn't stored by the codec (or if this fields omits term freq and positions). Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetIterator(TermsEnum) Returns an iterator that will step through all terms. This method will not return null . If you have a previous TermsEnum , for example from a different field, you can pass it for possible reuse if the implementation can do so. Declaration public abstract TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Returns a TermsEnum that iterates over all terms that are accepted by the provided CompiledAutomaton . If the startTerm is provided then the returned enum will only accept terms startTerm , but you still must call Next() first to get to the first term. Note that the provided startTerm must be accepted by the automaton. NOTE : the returned TermsEnum cannot seek . Declaration public virtual TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermsEnum.html",
    "title": "Class TermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermsEnum Iterator to seek ( SeekCeil(BytesRef) , SeekExact(BytesRef) ) or step through ( Next() terms to obtain frequency information ( DocFreq ), DocsEnum or DocsAndPositionsEnum for the current term ( Docs(IBits, DocsEnum) ). Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than the one before it. The TermsEnum is unpositioned when you first obtain it and you must first successfully call Next() or one of the Seek methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsEnum FilterAtomicReader.FilterTermsEnum FilteredTermsEnum MultiTermsEnum FuzzyTermsEnum Implements IBytesRefIterator 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.Index Assembly : Lucene.Net.dll Syntax public abstract class TermsEnum : IBytesRefIterator Constructors | Improve this Doc View Source TermsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermsEnum() Fields | Improve this Doc View Source EMPTY An empty TermsEnum for quickly returning an empty instance e.g. in MultiTermQuery Please note: this enum should be unmodifiable, but it is currently possible to add Attributes to it. This should not be a problem, as the enum is always empty and the existence of unused Attributes does not matter. Declaration public static readonly TermsEnum EMPTY Field Value Type Description TermsEnum Properties | Improve this Doc View Source Attributes Returns the related attributes. Declaration public virtual AttributeSource Attributes { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Comparer Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source DocFreq Returns the number of documents containing the current term. Do not call this when the enum is unpositioned. Declaration public abstract int DocFreq { get; } Property Value Type Description System.Int32 See Also END | Improve this Doc View Source Ord Returns ordinal position for current term. This is an optional property (the codec may throw System.NotSupportedException . Do not call this when the enum is unpositioned. Declaration public abstract long Ord { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Term Returns current term. Do not call this when the enum is unpositioned. Declaration public abstract BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term across all documents (the sum of the Freq for each doc that has this term). This will be -1 if the codec doesn't support this measure. Note that, like other term measures, this measure does not take deleted documents into account. Declaration public abstract long TotalTermFreq { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Docs(IBits, DocsEnum) Get DocsEnum for the current term. Do not call this when the enum is unpositioned. This method will not return null . Declaration public DocsEnum Docs(IBits liveDocs, DocsEnum reuse) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsEnum reuse Pass a prior DocsEnum for possible reuse Returns Type Description DocsEnum | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Get DocsEnum for the current term, with control over whether freqs are required. Do not call this when the enum is unpositioned. This method will not return null . Declaration public abstract DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsEnum reuse Pass a prior DocsEnum for possible reuse DocsFlags flags Specifies which optional per-document values you require; DocsFlags Returns Type Description DocsEnum See Also Docs(IBits, DocsEnum) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum) Get DocsAndPositionsEnum for the current term. Do not call this when the enum is unpositioned. This method will return null if positions were not indexed. Declaration public DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsAndPositionsEnum reuse Pass a prior DocsAndPositionsEnum for possible reuse Returns Type Description DocsAndPositionsEnum See Also DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Get DocsAndPositionsEnum for the current term, with control over whether offsets and payloads are required. Some codecs may be able to optimize their implementation when offsets and/or payloads are not required. Do not call this when the enum is unpositioned. This will return null if positions were not indexed. Declaration public abstract DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsAndPositionsEnum reuse Pass a prior DocsAndPositionsEnum for possible reuse DocsAndPositionsFlags flags Specifies which optional per-position values you require; see DocsAndPositionsFlags . Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source GetTermState() Expert: Returns the TermsEnum s internal state to position the TermsEnum without re-seeking the term dictionary. NOTE: A seek by GetTermState() might not capture the AttributeSource 's state. Callers must maintain the AttributeSource states separately Declaration public virtual TermState GetTermState() Returns Type Description TermState See Also TermState SeekExact(BytesRef, TermState) | Improve this Doc View Source Next() Declaration public abstract BytesRef Next() Returns Type Description BytesRef | Improve this Doc View Source SeekCeil(BytesRef) Seeks to the specified term, if it exists, or to the next (ceiling) term. Returns TermsEnum.SeekStatus to indicate whether exact term was found, a different term was found, or EOF was hit. The target term may be before or after the current term. If this returns END , the enum is unpositioned. Declaration public abstract TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus | Improve this Doc View Source SeekExact(BytesRef) Attempts to seek to the exact term, returning true if the term is found. If this returns false , the enum is unpositioned. For some codecs, SeekExact(BytesRef) may be substantially faster than SeekCeil(BytesRef) . Declaration public virtual bool SeekExact(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description System.Boolean | Improve this Doc View Source SeekExact(BytesRef, TermState) Expert: Seeks a specific position by TermState previously obtained from GetTermState() . Callers should maintain the TermState to use this method. Low-level implementations may position the TermsEnum without re-seeking the term dictionary. Seeking by TermState should only be used iff the state was obtained from the same TermsEnum instance. NOTE: Using this method with an incompatible TermState might leave this TermsEnum in undefined state. On a segment level TermState instances are compatible only iff the source and the target TermsEnum operate on the same field. If operating on segment level, TermState instances must not be used across segments. NOTE: A seek by TermState might not restore the AttributeSource 's state. AttributeSource states must be maintained separately if this method is used. Declaration public virtual void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term the term the TermState corresponds to TermState state the TermState | Improve this Doc View Source SeekExact(Int64) Seeks to the specified term by ordinal (position) as previously returned by Ord . The target ord may be before or after the current ord, and must be within bounds. Declaration public abstract void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermsEnum.SeekStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermsEnum.SeekStatus.html",
    "title": "Enum TermsEnum.SeekStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum TermsEnum.SeekStatus Represents returned result from SeekCeil(BytesRef) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum SeekStatus Fields Name Description END The term was not found, and the end of iteration was hit. FOUND The precise term was found. NOT_FOUND A different term was found after the requested term"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermState.html",
    "title": "Class TermState | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermState Encapsulates all required internal state to position the associated TermsEnum without re-seeking. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermState OrdTermState 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) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class TermState Constructors | Improve this Doc View Source TermState() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermState() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyFrom(TermState) Copies the content of the given TermState to this instance Declaration public abstract void CopyFrom(TermState other) Parameters Type Name Description TermState other the TermState to copy | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also SeekExact ( BytesRef , TermState ) GetTermState ()"
  },
  "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.html",
    "title": "Class TieredMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TieredMergePolicy Merges segments of approximately equal size, subject to an allowed number of segments per tier. This is similar to LogByteSizeMergePolicy , except this merge policy is able to merge non-adjacent segment, and separates how many segments are merged at once ( MaxMergeAtOnce ) from how many segments are allowed per tier ( SegmentsPerTier ). This merge policy also does not over-merge (i.e. cascade merges). For normal merging, this policy first computes a \"budget\" of how many segments are allowed to be in the index. If the index is over-budget, then the policy sorts segments by decreasing size (pro-rating by percent deletes), and then finds the least-cost merge. Merge cost is measured by a combination of the \"skew\" of the merge (size of largest segment divided by smallest segment), total merge size and percent deletes reclaimed, so that merges with lower skew, smaller size and those reclaiming more deletes, are favored. If a merge will produce a segment that's larger than MaxMergedSegmentMB , then the policy will merge fewer segments (down to 1 at once, if that one has deletions) to keep the segment size under budget. NOTE : This policy freely merges non-adjacent segments; if this is a problem, use LogMergePolicy . NOTE : This policy always merges by byte size of the segments, always pro-rates by percent deletes, and does not apply any maximum segment size during forceMerge (unlike LogByteSizeMergePolicy ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy TieredMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.dll Syntax public class TieredMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source TieredMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public TieredMergePolicy() Fields | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default noCFSRatio. If a merge's size is >= 10% of the index, then we disable compound file for it. Declaration public static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double See Also NoCFSRatio Properties | Improve this Doc View Source FloorSegmentMB Segments smaller than this are \"rounded up\" to this size, ie treated as equal (floor) size for merge selection. this is to prevent frequent flushing of tiny segments from allowing a long tail in the index. Default is 2 MB. Declaration public virtual double FloorSegmentMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source ForceMergeDeletesPctAllowed When forceMergeDeletes is called, we only merge away a segment if its delete percentage is over this threshold. Default is 10%. Declaration public virtual double ForceMergeDeletesPctAllowed { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MaxMergeAtOnce Gets or sets maximum number of segments to be merged at a time during \"normal\" merging. For explicit merging (eg, ForceMerge(Int32) or ForceMergeDeletes() was called), see MaxMergeAtOnceExplicit . Default is 10. Declaration public virtual int MaxMergeAtOnce { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxMergeAtOnceExplicit Gets or sets maximum number of segments to be merged at a time, during ForceMerge(Int32) or ForceMergeDeletes() . Default is 30. Declaration public virtual int MaxMergeAtOnceExplicit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxMergedSegmentMB Gets or sets maximum sized segment to produce during normal merging. This setting is approximate: the estimate of the merged segment size is made by summing sizes of to-be-merged segments (compensating for percent deleted docs). Default is 5 GB. Declaration public virtual double MaxMergedSegmentMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source ReclaimDeletesWeight Controls how aggressively merges that reclaim more deletions are favored. Higher values will more aggressively target merges that reclaim deletions, but be careful not to go so high that way too much merging takes place; a value of 3.0 is probably nearly too high. A value of 0.0 means deletions don't impact merge selection. Declaration public virtual double ReclaimDeletesWeight { get; set; } Property Value Type Description System.Double | Improve this Doc View Source SegmentsPerTier Gets or sets the allowed number of segments per tier. Smaller values mean more merging but fewer segments. NOTE : this value should be >= the MaxMergeAtOnce otherwise you'll force too much merging to occur. Default is 10.0. Declaration public virtual double SegmentsPerTier { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos infos) Parameters Type Name Description SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos infos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos infos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source Score(IList<SegmentCommitInfo>, Boolean, Int64) Expert: scores one merge; subclasses can override. Declaration protected virtual TieredMergePolicy.MergeScore Score(IList<SegmentCommitInfo> candidate, bool hitTooLarge, long mergingBytes) Parameters Type Name Description System.Collections.Generic.IList < SegmentCommitInfo > candidate System.Boolean hitTooLarge System.Int64 mergingBytes Returns Type Description TieredMergePolicy.MergeScore | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.MergeScore.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.MergeScore.html",
    "title": "Class TieredMergePolicy.MergeScore | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TieredMergePolicy.MergeScore Holds score and explanation for a single candidate merge. Inheritance System.Object TieredMergePolicy.MergeScore 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.Index Assembly : Lucene.Net.dll Syntax protected abstract class MergeScore Constructors | Improve this Doc View Source MergeScore() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected MergeScore() Properties | Improve this Doc View Source Explanation Human readable explanation of how the merge got this score. Declaration public abstract string Explanation { get; } Property Value Type Description System.String | Improve this Doc View Source Score Returns the score for this merge candidate; lower scores are better. Declaration public abstract double Score { get; } Property Value Type Description System.Double"
  },
  "api/Lucene.Net/Lucene.Net.Index.TrackingIndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TrackingIndexWriter.html",
    "title": "Class TrackingIndexWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrackingIndexWriter Class that tracks changes to a delegated IndexWriter , used by ControlledRealTimeReopenThread<T> to ensure specific changes are visible. Create this class (passing your IndexWriter ), and then pass this class to ControlledRealTimeReopenThread<T> . Be sure to make all changes via the TrackingIndexWriter , otherwise ControlledRealTimeReopenThread<T> won't know about the changes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TrackingIndexWriter 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.Index Assembly : Lucene.Net.dll Syntax public class TrackingIndexWriter Constructors | Improve this Doc View Source TrackingIndexWriter(IndexWriter) Create a TrackingIndexWriter wrapping the provided IndexWriter . Declaration public TrackingIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Properties | Improve this Doc View Source Generation Return the current generation being indexed. Declaration public virtual long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexWriter Return the wrapped IndexWriter . Declaration public virtual IndexWriter IndexWriter { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Calls AddDocument(IEnumerable<IIndexableField>) and returns the generation that reflects this change. Declaration public virtual long AddDocument(IEnumerable<IIndexableField> d) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > d Returns Type Description System.Int64 | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Calls AddDocument(IEnumerable<IIndexableField>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long AddDocument(IEnumerable<IIndexableField> d, Analyzer a) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > d Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Calls AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) and returns the generation that reflects this change. Declaration public virtual long AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Returns Type Description System.Int64 | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Calls AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer a) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source AddIndexes(IndexReader[]) Calls AddIndexes(IndexReader[]) and returns the generation that reflects this change. Declaration public virtual long AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Returns Type Description System.Int64 | Improve this Doc View Source AddIndexes(Directory[]) Calls AddIndexes(Directory[]) and returns the generation that reflects this change. Declaration public virtual long AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs Returns Type Description System.Int64 | Improve this Doc View Source DeleteAll() Calls DeleteAll() and returns the generation that reflects this change. Declaration public virtual long DeleteAll() Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Term) Calls DeleteDocuments(Term) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(Term t) Parameters Type Name Description Term t Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Term[]) Calls DeleteDocuments(Term[]) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(params Term[] terms) Parameters Type Name Description Term [] terms Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Query) Calls DeleteDocuments(Query) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(Query q) Parameters Type Name Description Query q Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Query[]) Calls DeleteDocuments(Query[]) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(params Query[] queries) Parameters Type Name Description Query [] queries Returns Type Description System.Int64 | Improve this Doc View Source GetAndIncrementGeneration() Return and increment current gen. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual long GetAndIncrementGeneration() Returns Type Description System.Int64 | Improve this Doc View Source TryDeleteDocument(IndexReader, Int32) Cals TryDeleteDocument(IndexReader, Int32) and returns the generation that reflects this change. Declaration public virtual long TryDeleteDocument(IndexReader reader, int docID) Parameters Type Name Description IndexReader reader System.Int32 docID Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Calls UpdateDocument(Term, IEnumerable<IIndexableField>) and returns the generation that reflects this change. Declaration public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < IIndexableField > d Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) Calls UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d, Analyzer a) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < IIndexableField > d Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Calls UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) and returns the generation that reflects this change. Declaration public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Calls UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer a) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer a Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.CommitFailException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.CommitFailException.html",
    "title": "Class TwoPhaseCommitTool.CommitFailException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TwoPhaseCommitTool.CommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to Commit() . Inheritance System.Object System.Exception System.SystemException System.IO.IOException TwoPhaseCommitTool.CommitFailException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CommitFailException : IOException, ISerializable Constructors | Improve this Doc View Source CommitFailException(Exception, ITwoPhaseCommit) Sole constructor. Declaration public CommitFailException(Exception cause, ITwoPhaseCommit obj) Parameters Type Name Description System.Exception cause ITwoPhaseCommit obj Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.html",
    "title": "Class TwoPhaseCommitTool | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TwoPhaseCommitTool A utility for executing 2-phase commit on several objects. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TwoPhaseCommitTool 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.Index Assembly : Lucene.Net.dll Syntax public sealed class TwoPhaseCommitTool Methods | Improve this Doc View Source Execute(ITwoPhaseCommit[]) Executes a 2-phase commit algorithm by first PrepareCommit() all objects and only if all succeed, it proceeds with Commit() . If any of the objects fail on either the preparation or actual commit, it terminates and Rollback() all of them. NOTE: It may happen that an object fails to commit, after few have already successfully committed. This tool will still issue a rollback instruction on them as well, but depending on the implementation, it may not have any effect. NOTE: if any of the objects are null , this method simply skips over them. Declaration public static void Execute(params ITwoPhaseCommit[] objects) Parameters Type Name Description ITwoPhaseCommit [] objects Exceptions Type Condition TwoPhaseCommitTool.PrepareCommitFailException if any of the objects fail to PrepareCommit() TwoPhaseCommitTool.CommitFailException if any of the objects fail to Commit() See Also ITwoPhaseCommit"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.PrepareCommitFailException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.PrepareCommitFailException.html",
    "title": "Class TwoPhaseCommitTool.PrepareCommitFailException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TwoPhaseCommitTool.PrepareCommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to PrepareCommit() . Inheritance System.Object System.Exception System.SystemException System.IO.IOException TwoPhaseCommitTool.PrepareCommitFailException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class PrepareCommitFailException : IOException, ISerializable Constructors | Improve this Doc View Source PrepareCommitFailException(Exception, ITwoPhaseCommit) Sole constructor. Declaration public PrepareCommitFailException(Exception cause, ITwoPhaseCommit obj) Parameters Type Name Description System.Exception cause ITwoPhaseCommit obj Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Index.UpgradeIndexMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.UpgradeIndexMergePolicy.html",
    "title": "Class UpgradeIndexMergePolicy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UpgradeIndexMergePolicy This MergePolicy is used for upgrading all existing segments of an index when calling ForceMerge(Int32) . All other methods delegate to the base MergePolicy given to the constructor. This allows for an as-cheap-as possible upgrade of an older index by only upgrading segments that are created by previous Lucene versions. ForceMerge does no longer really merge; it is just used to \"ForceMerge\" older segment versions away. In general one would use IndexUpgrader , but for a fully customizeable upgrade, you can use this like any other MergePolicy and call ForceMerge(Int32) : IndexWriterConfig iwc = new IndexWriterConfig(LuceneVersion.LUCENE_XX, new KeywordAnalyzer()); iwc.MergePolicy = new UpgradeIndexMergePolicy(iwc.MergePolicy); using (IndexWriter w = new IndexWriter(dir, iwc)) { w.ForceMerge(1); } Warning: this merge policy may reorder documents if the index was partially upgraded before calling ForceMerge(Int32) (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a ForceMerge(1) instead. Please note, the delegate MergePolicy may also reorder documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy UpgradeIndexMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.Dispose() MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB 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.Index Assembly : Lucene.Net.dll Syntax public class UpgradeIndexMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source UpgradeIndexMergePolicy(MergePolicy) Wrap the given MergePolicy and intercept ForceMerge(Int32) requests to only upgrade segments written with previous Lucene versions. Declaration public UpgradeIndexMergePolicy(MergePolicy base) Parameters Type Name Description MergePolicy base Fields | Improve this Doc View Source m_base Wrapped MergePolicy . Declaration protected readonly MergePolicy m_base Field Value Type Description MergePolicy Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source ShouldUpgradeSegment(SegmentCommitInfo) Returns true if the given segment should be upgraded. The default implementation will return !Constants.LUCENE_MAIN_VERSION.Equals(si.Info.Version, StringComparison.Ordinal) , so all segments created with a different version number than this Lucene version will get upgraded. Declaration protected virtual bool ShouldUpgradeSegment(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) Implements System.IDisposable See Also IndexUpgrader"
  },
  "api/Lucene.Net/Lucene.Net.Search.AutomatonQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.AutomatonQuery.html",
    "title": "Class AutomatonQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AutomatonQuery A Query that will match terms against a finite-state machine. This query will match documents that contain terms accepted by a given finite-state machine. The automaton can be constructed with the Lucene.Net.Util.Automaton API. Alternatively, it can be created from a regular expression with RegexpQuery or from the standard Lucene wildcard syntax with WildcardQuery . When the query is executed, it will create an equivalent DFA of the finite-state machine, and will enumerate the term dictionary in an intelligent way to reduce the number of comparisons. For example: the regular expression of [dl]og? will make approximately four comparisons: do, dog, lo, and log. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query MultiTermQuery AutomatonQuery RegexpQuery WildcardQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class AutomatonQuery : MultiTermQuery Constructors | Improve this Doc View Source AutomatonQuery(Term, Automaton) Create a new AutomatonQuery from an Automaton . Declaration public AutomatonQuery(Term term, Automaton automaton) Parameters Type Name Description Term term Term containing field and possibly some pattern structure. The term text is ignored. Automaton automaton Automaton to run, terms that are accepted are considered a match. Fields | Improve this Doc View Source m_automaton The automaton to match index terms against Declaration protected readonly Automaton m_automaton Field Value Type Description Automaton | Improve this Doc View Source m_compiled Declaration protected readonly CompiledAutomaton m_compiled Field Value Type Description CompiledAutomaton | Improve this Doc View Source m_term Term containing the field, and possibly some pattern structure Declaration protected readonly Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Automaton Returns the automaton used to create this query Declaration public virtual Automaton Automaton { get; } Property Value Type Description Automaton Methods | 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 MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BitsFilteredDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BitsFilteredDocIdSet.html",
    "title": "Class BitsFilteredDocIdSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BitsFilteredDocIdSet This implementation supplies a filtered DocIdSet , that excludes all docids which are not in a IBits instance. This is especially useful in Filter to apply the Lucene.Net.Search.BitsFilteredDocIdSet.acceptDocs passed to GetDocIdSet(AtomicReaderContext, IBits) before returning the final DocIdSet . Inheritance System.Object DocIdSet FilteredDocIdSet BitsFilteredDocIdSet Inherited Members FilteredDocIdSet.IsCacheable FilteredDocIdSet.Bits FilteredDocIdSet.GetIterator() DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class BitsFilteredDocIdSet : FilteredDocIdSet Constructors | Improve this Doc View Source BitsFilteredDocIdSet(DocIdSet, IBits) Constructor. Declaration public BitsFilteredDocIdSet(DocIdSet innerSet, IBits acceptDocs) Parameters Type Name Description DocIdSet innerSet Underlying DocIdSet IBits acceptDocs Allowed docs, all docids not in this set will not be returned by this DocIdSet Methods | Improve this Doc View Source Match(Int32) Declaration protected override bool Match(int docid) Parameters Type Name Description System.Int32 docid Returns Type Description System.Boolean Overrides FilteredDocIdSet.Match(Int32) | Improve this Doc View Source Wrap(DocIdSet, IBits) Convenience wrapper method: If acceptDocs == null it returns the original set without wrapping. Declaration public static DocIdSet Wrap(DocIdSet set, IBits acceptDocs) Parameters Type Name Description DocIdSet set Underlying DocIdSet. If null , this method returns null IBits acceptDocs Allowed docs, all docids not in this set will not be returned by this DocIdSet . If null , this method returns the original set without wrapping. Returns Type Description DocIdSet See Also DocIdSet Filter"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanClause.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanClause.html",
    "title": "Class BooleanClause | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanClause A clause in a BooleanQuery . Inheritance System.Object BooleanClause Implements System.IEquatable < BooleanClause > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Serializable] public class BooleanClause : IEquatable<BooleanClause> Constructors | Improve this Doc View Source BooleanClause(Query, Occur) Constructs a BooleanClause . Declaration public BooleanClause(Query query, Occur occur) Parameters Type Name Description Query query Occur occur Properties | Improve this Doc View Source IsProhibited Declaration public virtual bool IsProhibited { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsRequired Declaration public virtual bool IsRequired { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Occur Declaration public virtual Occur Occur { get; set; } Property Value Type Description Occur | Improve this Doc View Source Query Declaration public virtual Query Query { get; set; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(BooleanClause) Declaration public bool Equals(BooleanClause other) Parameters Type Name Description BooleanClause other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. 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() | Improve this Doc View Source ToString(Occur) Declaration public static string ToString(Occur occur) Parameters Type Name Description Occur occur Returns Type Description System.String Implements System.IEquatable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.BooleanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.BooleanWeight.html",
    "title": "Class BooleanQuery.BooleanWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanQuery.BooleanWeight Expert: the Weight for BooleanQuery , used to normalize, score and explain these queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Weight BooleanQuery.BooleanWeight Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class BooleanWeight : Weight Constructors | Improve this Doc View Source BooleanWeight(BooleanQuery, IndexSearcher, Boolean) Declaration public BooleanWeight(BooleanQuery outerInstance, IndexSearcher searcher, bool disableCoord) Parameters Type Name Description BooleanQuery outerInstance IndexSearcher searcher System.Boolean disableCoord Fields | Improve this Doc View Source m_maxCoord Declaration protected int m_maxCoord Field Value Type Description System.Int32 | Improve this Doc View Source m_similarity The Similarity implementation. Declaration protected Similarity m_similarity Field Value Type Description Similarity | Improve this Doc View Source m_weights Declaration protected List<Weight> m_weights Field Value Type Description System.Collections.Generic.List < Weight > Properties | Improve this Doc View Source MaxCoord Declaration public int MaxCoord { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query | Improve this Doc View Source ScoresDocsOutOfOrder Declaration public override bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Weight.ScoresDocsOutOfOrder | Improve this Doc View Source Similarity Declaration public Similarity Similarity { get; } Property Value Type Description Similarity Methods | Improve this Doc View Source Coord(Int32, Int32) Declaration public virtual float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Declaration public override BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context System.Boolean scoreDocsInOrder IBits acceptDocs Returns Type Description BulkScorer Overrides Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.html",
    "title": "Class BooleanQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanQuery A Query that matches documents matching boolean combinations of other queries, e.g. TermQuery s, PhraseQuery s or other BooleanQuery s. Collection initializer note: To create and populate a BooleanQuery in a single statement, you can use the following example as a guide: var booleanQuery = new BooleanQuery() { { new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD }, { new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD } }; // or var booleanQuery = new BooleanQuery() { new BooleanClause(new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD), new BooleanClause(new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD) }; Inheritance System.Object Query BooleanQuery Implements System.Collections.Generic.IEnumerable < BooleanClause > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Serializable] public class BooleanQuery : Query, IEnumerable<BooleanClause>, IEnumerable Constructors | Improve this Doc View Source BooleanQuery() Constructs an empty boolean query. Declaration public BooleanQuery() | Improve this Doc View Source BooleanQuery(Boolean) Constructs an empty boolean query. Coord(Int32, Int32) may be disabled in scoring, as appropriate. For example, this score factor does not make sense for most automatically generated queries, like WildcardQuery and FuzzyQuery . Declaration public BooleanQuery(bool disableCoord) Parameters Type Name Description System.Boolean disableCoord Disables Coord(Int32, Int32) in scoring. Fields | Improve this Doc View Source m_minNrShouldMatch Declaration protected int m_minNrShouldMatch Field Value Type Description System.Int32 Properties | Improve this Doc View Source Clauses Returns the list of clauses in this query. Declaration public virtual IList<BooleanClause> Clauses { get; } Property Value Type Description System.Collections.Generic.IList < BooleanClause > | Improve this Doc View Source CoordDisabled Returns true if Coord(Int32, Int32) is disabled in scoring for this query instance. Declaration public virtual bool CoordDisabled { get; } Property Value Type Description System.Boolean See Also BooleanQuery(Boolean) | Improve this Doc View Source MaxClauseCount Return the maximum number of clauses permitted, 1024 by default. Attempts to add more than the permitted number of clauses cause BooleanQuery.TooManyClausesException to be thrown. Declaration public static int MaxClauseCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinimumNumberShouldMatch Specifies a minimum number of the optional BooleanClause s which must be satisfied. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Use of this method is totally independent of specifying that any specific clauses are required (or prohibited). This number will only be compared against the number of matching optional clauses. Declaration public virtual int MinimumNumberShouldMatch { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(BooleanClause) Adds a clause to a boolean query. Declaration public virtual void Add(BooleanClause clause) Parameters Type Name Description BooleanClause clause Exceptions Type Condition BooleanQuery.TooManyClausesException If the new number of clauses exceeds the maximum clause number See Also MaxClauseCount | Improve this Doc View Source Add(Query, Occur) Adds a clause to a boolean query. Declaration public virtual void Add(Query query, Occur occur) Parameters Type Name Description Query query Occur occur Exceptions Type Condition BooleanQuery.TooManyClausesException If the new number of clauses exceeds the maximum clause number See Also MaxClauseCount | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Returns the set of clauses in this query. Declaration public virtual BooleanClause[] GetClauses() Returns Type Description BooleanClause [] | Improve this Doc View Source GetEnumerator() Returns an iterator on the clauses in this query. It implements the IEnumerable{BooleanClause} interface to make it possible to do: foreach (BooleanClause clause in booleanQuery) {} Declaration public IEnumerator<BooleanClause> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < BooleanClause > | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.TooManyClausesException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.TooManyClausesException.html",
    "title": "Class BooleanQuery.TooManyClausesException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BooleanQuery.TooManyClausesException Thrown when an attempt is made to add more than MaxClauseCount clauses. This typically happens if a PrefixQuery , FuzzyQuery , WildcardQuery , or TermRangeQuery is expanded to many terms during search. Inheritance System.Object System.Exception BooleanQuery.TooManyClausesException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TooManyClausesException : Exception, ISerializable Constructors | Improve this Doc View Source TooManyClausesException() Declaration public TooManyClausesException() Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BoostAttribute.html",
    "title": "Class BoostAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BoostAttribute Implementation class for IBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute BoostAttribute Implements IBoostAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() 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.Search Assembly : Lucene.Net.dll Syntax public sealed class BoostAttribute : Attribute, IBoostAttribute, IAttribute Properties | Improve this Doc View Source Boost Gets or Sets the boost in this attribute. Default is 1.0f . Declaration public float Boost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements IBoostAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Search.BulkScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BulkScorer.html",
    "title": "Class BulkScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BulkScorer This class is used to score a range of documents at once, and is returned by GetBulkScorer(AtomicReaderContext, Boolean, IBits) . Only queries that have a more optimized means of scoring across a range of documents need to override this. Otherwise, a default implementation is wrapped around the Scorer returned by GetScorer(AtomicReaderContext, IBits) . Inheritance System.Object BulkScorer ConstantScoreQuery.ConstantBulkScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class BulkScorer Methods | Improve this Doc View Source Score(ICollector) Scores and collects all matching documents. Declaration public virtual void Score(ICollector collector) Parameters Type Name Description ICollector collector The collector to which all matching documents are passed. | Improve this Doc View Source Score(ICollector, Int32) Collects matching documents in a range. Declaration public abstract bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector The collector to which all matching documents are passed. System.Int32 max Score up to, but not including, this doc Returns Type Description System.Boolean true if more matching documents may remain."
  },
  "api/Lucene.Net/Lucene.Net.Search.CachingCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CachingCollector.html",
    "title": "Class CachingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CachingCollector Caches all docs, and optionally also scores, coming from a search, and is then able to replay them to another collector. You specify the max RAM this class may use. Once the collection is done, call IsCached . If this returns true , you can use Replay(ICollector) against a new collector. If it returns false , this means too much RAM was required and you must instead re-run the original search. NOTE : this class consumes 4 (or 8 bytes, if scoring is cached) per collected document. If the result set is large this can easily be a very substantial amount of RAM! NOTE : this class caches at least 128 documents before checking RAM limits. See the Lucene modules/grouping module for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CachingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class CachingCollector : ICollector Fields | Improve this Doc View Source m_base Declaration protected int m_base Field Value Type Description System.Int32 | Improve this Doc View Source m_cachedDocs Declaration protected readonly IList<int[]> m_cachedDocs Field Value Type Description System.Collections.Generic.IList < System.Int32 []> | Improve this Doc View Source m_curDocs Declaration protected int[] m_curDocs Field Value Type Description System.Int32 [] | Improve this Doc View Source m_lastDocBase Declaration protected int m_lastDocBase Field Value Type Description System.Int32 | Improve this Doc View Source m_maxDocsToCache Declaration protected readonly int m_maxDocsToCache Field Value Type Description System.Int32 | Improve this Doc View Source m_other Declaration protected readonly ICollector m_other Field Value Type Description ICollector | Improve this Doc View Source m_upto Declaration protected int m_upto Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsCached Declaration public virtual bool IsCached { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source Create(ICollector, Boolean, Double) Create a new CachingCollector that wraps the given collector and caches documents and scores up to the specified RAM threshold. Declaration public static CachingCollector Create(ICollector other, bool cacheScores, double maxRAMMB) Parameters Type Name Description ICollector other The ICollector to wrap and delegate calls to. System.Boolean cacheScores Whether to cache scores in addition to document IDs. Note that this increases the RAM consumed per doc. System.Double maxRAMMB The maximum RAM in MB to consume for caching the documents and scores. If the collector exceeds the threshold, no documents and scores are cached. Returns Type Description CachingCollector | Improve this Doc View Source Create(ICollector, Boolean, Int32) Create a new CachingCollector that wraps the given collector and caches documents and scores up to the specified max docs threshold. Declaration public static CachingCollector Create(ICollector other, bool cacheScores, int maxDocsToCache) Parameters Type Name Description ICollector other The ICollector to wrap and delegate calls to. System.Boolean cacheScores Whether to cache scores in addition to document IDs. Note that this increases the RAM consumed per doc. System.Int32 maxDocsToCache The maximum number of documents for caching the documents and possible the scores. If the collector exceeds the threshold, no documents and scores are cached. Returns Type Description CachingCollector | Improve this Doc View Source Create(Boolean, Boolean, Double) Creates a CachingCollector which does not wrap another collector. The cached documents and scores can later be replayed ( Replay(ICollector) ). Declaration public static CachingCollector Create(bool acceptDocsOutOfOrder, bool cacheScores, double maxRAMMB) Parameters Type Name Description System.Boolean acceptDocsOutOfOrder whether documents are allowed to be collected out-of-order System.Boolean cacheScores System.Double maxRAMMB Returns Type Description CachingCollector | Improve this Doc View Source Replay(ICollector) Replays the cached doc IDs (and scores) to the given ICollector . If this instance does not cache scores, then Scorer is not set on other.SetScorer(Scorer) as well as scores are not replayed. Declaration public abstract void Replay(ICollector other) Parameters Type Name Description ICollector other Exceptions Type Condition System.InvalidOperationException If this collector is not cached (i.e., if the RAM limits were too low for the number of documents + scores to cache). System.ArgumentException If the given Collect's does not support out-of-order collection, while the collector passed to the ctor does. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to ), should save the passed-in Scorer and call GetScore() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.CachingWrapperFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CachingWrapperFilter.html",
    "title": "Class CachingWrapperFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CachingWrapperFilter Wraps another Filter 's result and caches it. The purpose is to allow filters to simply filter, and then wrap with this class to add caching. Inheritance System.Object Filter CachingWrapperFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class CachingWrapperFilter : Filter Constructors | Improve this Doc View Source CachingWrapperFilter(Filter) Wraps another filter's result and caches it. Declaration public CachingWrapperFilter(Filter filter) Parameters Type Name Description Filter filter Filter to cache results of Fields | Improve this Doc View Source EMPTY_DOCIDSET An empty DocIdSet instance Declaration protected static readonly DocIdSet EMPTY_DOCIDSET Field Value Type Description DocIdSet Properties | Improve this Doc View Source Filter Gets the contained filter. Declaration public virtual Filter Filter { get; } Property Value Type Description Filter the contained filter. Methods | Improve this Doc View Source CacheImpl(DocIdSetIterator, AtomicReader) Default cache implementation: uses WAH8DocIdSet . Declaration protected virtual DocIdSet CacheImpl(DocIdSetIterator iterator, AtomicReader reader) Parameters Type Name Description DocIdSetIterator iterator AtomicReader reader Returns Type Description DocIdSet | Improve this Doc View Source DocIdSetToCache(DocIdSet, AtomicReader) Provide the DocIdSet to be cached, using the DocIdSet provided by the wrapped Filter. This implementation returns the given DocIdSet , if IsCacheable returns true , else it calls CacheImpl(DocIdSetIterator, AtomicReader) Note: this method returns EMPTY_DOCIDSET if the given docIdSet is null or if GetIterator() return null . The empty instance is use as a placeholder in the cache instead of the null value. Declaration protected virtual DocIdSet DocIdSetToCache(DocIdSet docIdSet, AtomicReader reader) Parameters Type Name Description DocIdSet docIdSet AtomicReader reader Returns Type Description DocIdSet | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | 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 GetSizeInBytes() Returns total byte size used by cached filters. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.CollectionStatistics.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CollectionStatistics.html",
    "title": "Class CollectionStatistics | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CollectionStatistics Contains statistics for a collection (field) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CollectionStatistics Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class CollectionStatistics Constructors | Improve this Doc View Source CollectionStatistics(String, Int64, Int64, Int64, Int64) Sole constructor. Declaration public CollectionStatistics(string field, long maxDoc, long docCount, long sumTotalTermFreq, long sumDocFreq) Parameters Type Name Description System.String field System.Int64 maxDoc System.Int64 docCount System.Int64 sumTotalTermFreq System.Int64 sumDocFreq Properties | Improve this Doc View Source DocCount Returns the total number of documents that have at least one term for this field. Declaration public long DocCount { get; } Property Value Type Description System.Int64 See Also DocCount | Improve this Doc View Source Field Returns the field name Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MaxDoc Returns the total number of documents, regardless of whether they all contain values for this field. Declaration public long MaxDoc { get; } Property Value Type Description System.Int64 See Also MaxDoc | Improve this Doc View Source SumDocFreq Returns the total number of postings for this field Declaration public long SumDocFreq { get; } Property Value Type Description System.Int64 See Also SumDocFreq | Improve this Doc View Source SumTotalTermFreq Returns the total number of tokens for this field Declaration public long SumTotalTermFreq { get; } Property Value Type Description System.Int64 See Also SumTotalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Search.CollectionTerminatedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CollectionTerminatedException.html",
    "title": "Class CollectionTerminatedException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CollectionTerminatedException Throw this exception in Collect(Int32) to prematurely terminate collection of the current leaf. Note: IndexSearcher swallows this exception and never re-throws it. As a consequence, you should not catch it when calling any overload of Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) as it is unnecessary and might hide misuse of this exception. Inheritance System.Object System.Exception CollectionTerminatedException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CollectionTerminatedException : Exception, ISerializable Constructors | Improve this Doc View Source CollectionTerminatedException() Sole constructor. Declaration public CollectionTerminatedException() Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Collector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Collector.html",
    "title": "Class Collector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Collector LUCENENET specific class used to hold the NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) static method. Inheritance System.Object Collector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class Collector Methods | Improve this Doc View Source NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) Creates a new instance with the ability to specify the body of the SetScorer(Scorer) method through the setScorer parameter, the body of the Collect(Int32) method through the collect parameter, the body of the SetNextReader(AtomicReaderContext) method through the setNextReader parameter, and the body of the AcceptsDocsOutOfOrder property through the acceptsDocsOutOfOrder parameter. Simple example: IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); int docBase; searcher.Search(query, Collector.NewAnonymous(setScorer: (scorer) => { // ignore scorer }, collect: (doc) => { bits.Set(doc + docBase); }, setNextReader: (context) => { docBase = context.DocBase; }, acceptsDocsOutOfOrder: () => { return true; }) ); Declaration public static ICollector NewAnonymous(Action<Scorer> setScorer, Action<int> collect, Action<AtomicReaderContext> setNextReader, Func<bool> acceptsDocsOutOfOrder) Parameters Type Name Description System.Action < Scorer > setScorer A delegate method that represents (is called by) the SetScorer(Scorer) method. It accepts a Scorer scorer and has no return value. System.Action < System.Int32 > collect A delegate method that represents (is called by) the Collect(Int32) method. It accepts an System.Int32 doc and has no return value. System.Action < AtomicReaderContext > setNextReader A delegate method that represents (is called by) the SetNextReader(AtomicReaderContext) method. It accepts a AtomicReaderContext context and has no return value. System.Func < System.Boolean > acceptsDocsOutOfOrder A delegate method that represents (is called by) the AcceptsDocsOutOfOrder property. It returns a System.Boolean value. Returns Type Description ICollector A new Lucene.Net.Search.Collector.AnonymousCollector instance."
  },
  "api/Lucene.Net/Lucene.Net.Search.ComplexExplanation.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ComplexExplanation.html",
    "title": "Class ComplexExplanation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ComplexExplanation Expert: Describes the score computation for document and query, and can distinguish a match independent of a positive value. Inheritance System.Object Explanation ComplexExplanation Inherited Members Explanation.Value Explanation.Description Explanation.GetDetails() Explanation.AddDetail(Explanation) Explanation.ToString() Explanation.ToString(Int32) Explanation.ToHtml() 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.Search Assembly : Lucene.Net.dll Syntax public class ComplexExplanation : Explanation Constructors | Improve this Doc View Source ComplexExplanation() Declaration public ComplexExplanation() | Improve this Doc View Source ComplexExplanation(Boolean, Single, String) Declaration public ComplexExplanation(bool match, float value, string description) Parameters Type Name Description System.Boolean match System.Single value System.String description Properties | Improve this Doc View Source IsMatch Indicates whether or not this Explanation models a good match. If the match status is explicitly set (i.e.: not null) this method uses it; otherwise it defers to the superclass. Declaration public override bool IsMatch { get; } Property Value Type Description System.Boolean Overrides Explanation.IsMatch See Also Match | Improve this Doc View Source Match Gets or Sets the match status assigned to this explanation node. May be null if match status is unknown. Declaration public virtual bool? Match { get; set; } Property Value Type Description System.Nullable < System.Boolean > Methods | Improve this Doc View Source GetSummary() Declaration protected override string GetSummary() Returns Type Description System.String Overrides Explanation.GetSummary()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreAutoRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreAutoRewrite.html",
    "title": "Class ConstantScoreAutoRewrite | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstantScoreAutoRewrite A rewrite method that tries to pick the best constant-score rewrite method based on term and document counts from the query. If both the number of terms and documents is small enough, then CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE is used. Otherwise, CONSTANT_SCORE_FILTER_REWRITE is used. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > ConstantScoreAutoRewrite Inherited Members TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) 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.Search Assembly : Lucene.Net.dll Syntax public class ConstantScoreAutoRewrite : TermCollectingRewrite<BooleanQuery> Fields | Improve this Doc View Source DEFAULT_DOC_COUNT_PERCENT If the query will hit more than 1 in 1000 of the docs in the index (0.1%), the filter method is fastest: Declaration public static double DEFAULT_DOC_COUNT_PERCENT Field Value Type Description System.Double | Improve this Doc View Source DEFAULT_TERM_COUNT_CUTOFF Defaults derived from rough tests with a 20.0 million doc Wikipedia index. With more than 350 terms in the query, the filter method is fastest: Declaration public static int DEFAULT_TERM_COUNT_CUTOFF Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocCountPercent If the number of documents to be visited in the postings exceeds this specified percentage of the MaxDoc for the index, then CONSTANT_SCORE_FILTER_REWRITE is used. Value may be 0.0 to 100.0. Declaration public virtual double DocCountPercent { get; set; } Property Value Type Description System.Double | Improve this Doc View Source TermCountCutoff If the number of terms in this query is equal to or larger than this setting then CONSTANT_SCORE_FILTER_REWRITE is used. Declaration public virtual int TermCountCutoff { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docFreq, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docFreq System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | 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 GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantBulkScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantBulkScorer.html",
    "title": "Class ConstantScoreQuery.ConstantBulkScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantBulkScorer We return this as our BulkScorer so that if the CSQ wraps a query with its own optimized top-level scorer (e.g. Lucene.Net.Search.BooleanScorer ) we can use that top-level scorer. Inheritance System.Object BulkScorer ConstantScoreQuery.ConstantBulkScorer Inherited Members BulkScorer.Score(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.Search Assembly : Lucene.Net.dll Syntax protected class ConstantBulkScorer : BulkScorer Constructors | Improve this Doc View Source ConstantBulkScorer(ConstantScoreQuery, BulkScorer, Weight, Single) Declaration public ConstantBulkScorer(ConstantScoreQuery outerInstance, BulkScorer bulkScorer, Weight weight, float theScore) Parameters Type Name Description ConstantScoreQuery outerInstance BulkScorer bulkScorer Weight weight System.Single theScore Methods | Improve this Doc View Source Score(ICollector, Int32) Declaration public override bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector System.Int32 max Returns Type Description System.Boolean Overrides BulkScorer.Score(ICollector, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantScorer.html",
    "title": "Class ConstantScoreQuery.ConstantScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer ConstantScoreQuery.ConstantScorer Inherited Members Scorer.m_weight Scorer.Weight DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantScorer : Scorer Constructors | Improve this Doc View Source ConstantScorer(ConstantScoreQuery, DocIdSetIterator, Weight, Single) Declaration public ConstantScorer(ConstantScoreQuery outerInstance, DocIdSetIterator docIdSetIterator, Weight w, float theScore) Parameters Type Name Description ConstantScoreQuery outerInstance DocIdSetIterator docIdSetIterator Weight w System.Single theScore Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetChildren() Declaration public override ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description System.Collections.Generic.ICollection < Scorer.ChildScorer > Overrides Scorer.GetChildren() | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantWeight.html",
    "title": "Class ConstantScoreQuery.ConstantWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantWeight Inheritance System.Object Weight ConstantScoreQuery.ConstantWeight Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantWeight : Weight Constructors | Improve this Doc View Source ConstantWeight(ConstantScoreQuery, IndexSearcher) Declaration public ConstantWeight(ConstantScoreQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description ConstantScoreQuery outerInstance IndexSearcher searcher Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query | Improve this Doc View Source ScoresDocsOutOfOrder Declaration public override bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Weight.ScoresDocsOutOfOrder Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Declaration public override BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context System.Boolean scoreDocsInOrder IBits acceptDocs Returns Type Description BulkScorer Overrides Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.html",
    "title": "Class ConstantScoreQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ConstantScoreQuery A query that wraps another query or a filter and simply returns a constant score equal to the query boost for every document that matches the filter or query. For queries it therefore simply strips of all scores and returns a constant one. Inheritance System.Object Query ConstantScoreQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ConstantScoreQuery : Query Constructors | Improve this Doc View Source ConstantScoreQuery(Filter) Wraps a Filter as a Query . The hits will get a constant score dependent on the boost factor of this query. If you simply want to strip off scores from a Query , no longer use new ConstantScoreQuery(new QueryWrapperFilter(query)) , instead use ConstantScoreQuery(Query) ! Declaration public ConstantScoreQuery(Filter filter) Parameters Type Name Description Filter filter | Improve this Doc View Source ConstantScoreQuery(Query) Strips off scores from the passed in Query . The hits will get a constant score dependent on the boost factor of this query. Declaration public ConstantScoreQuery(Query query) Parameters Type Name Description Query query Fields | Improve this Doc View Source m_filter Declaration protected readonly Filter m_filter Field Value Type Description Filter | Improve this Doc View Source m_query Declaration protected readonly Query m_query Field Value Type Description Query Properties | Improve this Doc View Source Filter Returns the encapsulated filter, returns null if a query is wrapped. Declaration public virtual Filter Filter { get; } Property Value Type Description Filter | Improve this Doc View Source Query Returns the encapsulated query, returns null if a filter is wrapped. Declaration public virtual Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | 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 Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ControlledRealTimeReopenThread-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ControlledRealTimeReopenThread-1.html",
    "title": "Class ControlledRealTimeReopenThread<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ControlledRealTimeReopenThread<T> Utility class that runs a thread to manage periodic reopens of a ReferenceManager<G> , with methods to wait for a specific index changes to become visible. To use this class you must first wrap your IndexWriter with a TrackingIndexWriter and always use it to make changes to the index, saving the returned generation. Then, when a given search request needs to see a specific index change, call the WaitForGeneration(Int64) to wait for that change to be visible. Note that this will only scale well if most searches do not need to wait for a specific index generation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object J2N.Threading.ThreadJob ControlledRealTimeReopenThread<T> Implements System.IEquatable < J2N.Threading.ThreadJob > System.IEquatable < System.Threading.Thread > System.IDisposable Inherited Members J2N.Threading.ThreadJob.SafeRun(System.Threading.ThreadStart) J2N.Threading.ThreadJob.Start() J2N.Threading.ThreadJob.Interrupt() J2N.Threading.ThreadJob.Join() J2N.Threading.ThreadJob.Join(System.Int64) J2N.Threading.ThreadJob.Join(System.Int64, System.Int32) J2N.Threading.ThreadJob.Resume() J2N.Threading.ThreadJob.Abort() J2N.Threading.ThreadJob.Abort(System.Object) J2N.Threading.ThreadJob.Yield() J2N.Threading.ThreadJob.Suspend() J2N.Threading.ThreadJob.Sleep(System.Int64) J2N.Threading.ThreadJob.Sleep(System.Int64, System.Int32) J2N.Threading.ThreadJob.Sleep(System.TimeSpan) J2N.Threading.ThreadJob.Interrupted() J2N.Threading.ThreadJob.Equals(System.Threading.Thread) J2N.Threading.ThreadJob.Equals(J2N.Threading.ThreadJob) J2N.Threading.ThreadJob.Equals(System.Object) J2N.Threading.ThreadJob.GetHashCode() J2N.Threading.ThreadJob.ToString() J2N.Threading.ThreadJob.SyncRoot J2N.Threading.ThreadJob.Instance J2N.Threading.ThreadJob.CurrentThread J2N.Threading.ThreadJob.Name J2N.Threading.ThreadJob.State J2N.Threading.ThreadJob.Priority J2N.Threading.ThreadJob.IsAlive J2N.Threading.ThreadJob.IsBackground J2N.Threading.ThreadJob.IsDebug System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ControlledRealTimeReopenThread<T> : ThreadJob, IEquatable<ThreadJob>, IEquatable<Thread>, IDisposable where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source ControlledRealTimeReopenThread(TrackingIndexWriter, ReferenceManager<T>, Double, Double) Create ControlledRealTimeReopenThread<T> , to periodically reopen the a ReferenceManager<G> . Declaration public ControlledRealTimeReopenThread(TrackingIndexWriter writer, ReferenceManager<T> manager, double targetMaxStaleSec, double targetMinStaleSec) Parameters Type Name Description TrackingIndexWriter writer ReferenceManager <T> manager System.Double targetMaxStaleSec Maximum time until a new reader must be opened; this sets the upper bound on how slowly reopens may occur, when no caller is waiting for a specific generation to become visible. System.Double targetMinStaleSec Mininum time until a new reader can be opened; this sets the lower bound on how quickly reopens may occur, when a caller is waiting for a specific generation to become visible. Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Run() Declaration public override void Run() Overrides J2N.Threading.ThreadJob.Run() | Improve this Doc View Source WaitForGeneration(Int64) Waits for the target generation to become visible in the searcher. If the current searcher is older than the target generation, this method will block until the searcher is reopened, by another via MaybeRefresh() or until the ReferenceManager<G> is closed. Declaration public virtual void WaitForGeneration(long targetGen) Parameters Type Name Description System.Int64 targetGen The generation to wait for | Improve this Doc View Source WaitForGeneration(Int64, Int32) Waits for the target generation to become visible in the searcher, up to a maximum specified milli-seconds. If the current searcher is older than the target generation, this method will block until the searcher has been reopened by another thread via MaybeRefresh() , the given waiting time has elapsed, or until the ReferenceManager<G> is closed. NOTE: if the waiting time elapses before the requested target generation is available the current SearcherManager is returned instead. Declaration public virtual bool WaitForGeneration(long targetGen, int maxMS) Parameters Type Name Description System.Int64 targetGen The generation to wait for System.Int32 maxMS Maximum milliseconds to wait, or -1 to wait indefinitely Returns Type Description System.Boolean true if the targetGen is now available, or false if maxMS wait time was exceeded Implements System.IEquatable<T> System.IEquatable<T> System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.DisjunctionMaxWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.DisjunctionMaxWeight.html",
    "title": "Class DisjunctionMaxQuery.DisjunctionMaxWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DisjunctionMaxQuery.DisjunctionMaxWeight Expert: the Weight for DisjunctionMaxQuery, used to normalize, score and explain these queries. NOTE: this API and implementation is subject to change suddenly in the next release. Inheritance System.Object Weight DisjunctionMaxQuery.DisjunctionMaxWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class DisjunctionMaxWeight : Weight Constructors | Improve this Doc View Source DisjunctionMaxWeight(DisjunctionMaxQuery, IndexSearcher) Construct the Weight for this Query searched by searcher . Recursively construct subquery weights. Declaration public DisjunctionMaxWeight(DisjunctionMaxQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description DisjunctionMaxQuery outerInstance IndexSearcher searcher Fields | Improve this Doc View Source m_weights The Weight s for our subqueries, in 1-1 correspondence with disjuncts Declaration protected List<Weight> m_weights Field Value Type Description System.Collections.Generic.List < Weight > Properties | Improve this Doc View Source Query Return our associated DisjunctionMaxQuery Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Explain the score we computed for doc Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Create the scorer used to score our associated DisjunctionMaxQuery Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Compute the sub of squared weights of us applied to our subqueries. Used for normalization. Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Apply the computed normalization factor to our subqueries Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.html",
    "title": "Class DisjunctionMaxQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DisjunctionMaxQuery A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. This is useful when searching for a word in multiple fields with different boost factors (so that the fields cannot be combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, not the sum of the field scores (as BooleanQuery would give). If the query is \"albino elephant\" this ensures that \"albino\" matching one field and \"elephant\" matching another gets a higher score than \"albino\" matching both fields. To get this result, use both BooleanQuery and DisjunctionMaxQuery : for each term a DisjunctionMaxQuery searches for it in each field, while the set of these DisjunctionMaxQuery 's is combined into a BooleanQuery . The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that include this term in only the best of those multiple fields, without confusing this with the better case of two different terms in the multiple fields. Collection initializer note: To create and populate a DisjunctionMaxQuery in a single statement, you can use the following example as a guide: var disjunctionMaxQuery = new DisjunctionMaxQuery(0.1f) { new TermQuery(new Term(\"field1\", \"albino\")), new TermQuery(new Term(\"field2\", \"elephant\")) }; Inheritance System.Object Query DisjunctionMaxQuery Implements System.Collections.Generic.IEnumerable < Query > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class DisjunctionMaxQuery : Query, IEnumerable<Query>, IEnumerable Constructors | Improve this Doc View Source DisjunctionMaxQuery(ICollection<Query>, Single) Creates a new DisjunctionMaxQuery Declaration public DisjunctionMaxQuery(ICollection<Query> disjuncts, float tieBreakerMultiplier) Parameters Type Name Description System.Collections.Generic.ICollection < Query > disjuncts A ICollection{Query} of all the disjuncts to add System.Single tieBreakerMultiplier The weight to give to each matching non-maximum disjunct | Improve this Doc View Source DisjunctionMaxQuery(Single) Creates a new empty DisjunctionMaxQuery . Use Add(Query) to add the subqueries. Declaration public DisjunctionMaxQuery(float tieBreakerMultiplier) Parameters Type Name Description System.Single tieBreakerMultiplier The score of each non-maximum disjunct for a document is multiplied by this weight and added into the final score. If non-zero, the value should be small, on the order of 0.1, which says that 10 occurrences of word in a lower-scored field that is also in a higher scored field is just as good as a unique word in the lower scored field (i.e., one that is not in any higher scored field). Properties | Improve this Doc View Source Disjuncts Declaration public virtual IList<Query> Disjuncts { get; } Property Value Type Description System.Collections.Generic.IList < Query > The disjuncts. | Improve this Doc View Source TieBreakerMultiplier Declaration public virtual float TieBreakerMultiplier { get; } Property Value Type Description System.Single Tie breaker value for multiple matches. Methods | Improve this Doc View Source Add(Query) Add a subquery to this disjunction Declaration public virtual void Add(Query query) Parameters Type Name Description Query query The disjunct added | Improve this Doc View Source Add(ICollection<Query>) Add a collection of disjuncts to this disjunction via IEnumerable{Query} Declaration public virtual void Add(ICollection<Query> disjuncts) Parameters Type Name Description System.Collections.Generic.ICollection < Query > disjuncts A collection of queries to add as disjuncts. | Improve this Doc View Source Clone() Create a shallow copy of us -- used in rewriting if necessary Declaration public override object Clone() Returns Type Description System.Object A copy of us (but reuse, don't copy, our subqueries) Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Create the Weight used to score us Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Return true if we represent the same query as o Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Another object Returns Type Description System.Boolean true if o is a DisjunctionMaxQuery with the same boost and the same subqueries, in the same order, as us Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | Improve this Doc View Source GetEnumerator() Declaration public virtual IEnumerator<Query> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Query > An IEnumerator{Query} over the disjuncts | Improve this Doc View Source GetHashCode() Compute a hash code for hashing us Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Optimize our representation and our subqueries representations Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader The IndexReader we query Returns Type Description Query An optimized copy of us (which may not be a copy if there is nothing to optimize) Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prettyprint us. Declaration public override string ToString(string field) Parameters Type Name Description System.String field The field to which we are applied Returns Type Description System.String A string that shows what we do, of the form \"(disjunct1 | disjunct2 | ... | disjunctn)^boost\" Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocIdSet.html",
    "title": "Class DocIdSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocIdSet A DocIdSet contains a set of doc ids. Implementing classes must only implement GetIterator() to provide access to the set. Inheritance System.Object DocIdSet FieldCacheDocIdSet FilteredDocIdSet DocIdBitSet FixedBitSet OpenBitSet EliasFanoDocIdSet PForDeltaDocIdSet WAH8DocIdSet Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocIdSet Properties | Improve this Doc View Source Bits Optionally provides a IBits interface for random access to matching documents. Declaration public virtual IBits Bits { get; } Property Value Type Description IBits null , if this DocIdSet does not support random access. In contrast to GetIterator() , a return value of null does not imply that no documents match the filter! The default implementation does not provide random access, so you only need to implement this method if your DocIdSet can guarantee random access to every docid in O(1) time without external disk access (as IBits interface cannot throw System.IO.IOException ). This is generally true for bit sets like FixedBitSet , which return itself if they are used as DocIdSet . | Improve this Doc View Source IsCacheable This method is a hint for CachingWrapperFilter , if this DocIdSet should be cached without copying it. The default is to return false . If you have an own DocIdSet implementation that does its iteration very effective and fast without doing disk I/O, override this property and return true . Declaration public virtual bool IsCacheable { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetIterator() Provides a DocIdSetIterator to access the set. This implementation can return null if there are no docs that match. Declaration public abstract DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the Bits property through the bits parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, bits: () => { return bits; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<IBits> bits) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . System.Func < IBits > bits A delegate method that represents (is called by) the Bits property. It returns the IBits instance for this DocIdSet . Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the Bits property through the bits parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, bits: () => { return bits; }, isCacheable: () => { return true; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<IBits> bits, Func<bool> isCacheable) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . System.Func < IBits > bits A delegate method that represents (is called by) the Bits property. It returns the IBits instance for this DocIdSet . System.Func < System.Boolean > isCacheable A delegate method that represents (is called by) the IsCacheable property. It returns a System.Boolean value. Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the IsCacheable property through the isCacheable parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, isCacheable: () => { return true; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<bool> isCacheable) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . System.Func < System.Boolean > isCacheable A delegate method that represents (is called by) the IsCacheable property. It returns a System.Boolean value. Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance."
  },
  "api/Lucene.Net/Lucene.Net.Search.DocIdSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocIdSetIterator.html",
    "title": "Class DocIdSetIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocIdSetIterator This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to System.Int32.MaxValue in order to be used as a sentinel object. Implementations of this class are expected to consider System.Int32.MaxValue as an invalid value. Inheritance System.Object DocIdSetIterator DocsEnum FilteredDocIdSetIterator FixedBitSet.FixedBitSetIterator OpenBitSetIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocIdSetIterator Fields | Improve this Doc View Source NO_MORE_DOCS When returned by NextDoc() , Advance(Int32) and DocID it means there are no more docs in the iterator. Declaration public const int NO_MORE_DOCS = 2147483647 Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocID Returns the following: -1 or NO_MORE_DOCS if NextDoc() or Advance(Int32) were not called yet. NO_MORE_DOCS if the iterator has exhausted. Otherwise it should return the doc ID it is currently on. @since 2.9 Declaration public abstract int DocID { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Advance(Int32) Advances to the first beyond the current whose document number is greater than or equal to target , and returns the document number itself. Exhausts the iterator and returns NO_MORE_DOCS if target is greater than the highest document number in the set. The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. When target > current it behaves as if written: int Advance(int target) { int doc; while ((doc = NextDoc()) < target) { } return doc; } Some implementations are considerably more efficient than that. NOTE: this method may be called with NO_MORE_DOCS for efficiency by some Scorer s. If your implementation cannot efficiently determine that it should exhaust, it is recommended that you check for that value in each call to this method. @since 2.9 Declaration public abstract int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 | Improve this Doc View Source GetCost() Returns the estimated cost of this DocIdSetIterator . This is generally an upper bound of the number of documents this iterator might match, but may be a rough heuristic, hardcoded value, or otherwise completely inaccurate. Declaration public abstract long GetCost() Returns Type Description System.Int64 | Improve this Doc View Source GetEmpty() An empty DocIdSetIterator instance Declaration public static DocIdSetIterator GetEmpty() Returns Type Description DocIdSetIterator | Improve this Doc View Source NextDoc() Advances to the next document in the set and returns the doc it is currently on, or NO_MORE_DOCS if there are no more docs in the set. NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior. @since 2.9 Declaration public abstract int NextDoc() Returns Type Description System.Int32 | Improve this Doc View Source SlowAdvance(Int32) Slow (linear) implementation of Advance(Int32) relying on NextDoc() to advance beyond the target position. Declaration protected int SlowAdvance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRangeFilter.html",
    "title": "Class DocTermOrdsRangeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocTermOrdsRangeFilter A range filter built on top of a cached multi-valued term field (in IFieldCache ). Like FieldCacheRangeFilter , this is just a specialized range query versus using a TermRangeQuery with DocTermOrdsRewriteMethod : it will only do two ordinal to term lookups. Inheritance System.Object Filter DocTermOrdsRangeFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocTermOrdsRangeFilter : Filter Properties | Improve this Doc View Source Field Returns the field name for this filter Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerVal Returns the lower value of this range filter Declaration public virtual BytesRef LowerVal { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperVal Returns the upper value of this range filter Declaration public virtual BytesRef UpperVal { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) This method is implemented for each data type Declaration public abstract override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source NewBytesRefRange(String, BytesRef, BytesRef, Boolean, Boolean) Creates a BytesRef range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static DocTermOrdsRangeFilter NewBytesRefRange(string field, BytesRef lowerVal, BytesRef upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field BytesRef lowerVal BytesRef upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description DocTermOrdsRangeFilter | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRewriteMethod.html",
    "title": "Class DocTermOrdsRewriteMethod | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocTermOrdsRewriteMethod Rewrites MultiTermQuery s into a filter, using DocTermOrds for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiTermQuery.RewriteMethod DocTermOrdsRewriteMethod Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) 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.Search Assembly : Lucene.Net.dll Syntax public sealed class DocTermOrdsRewriteMethod : MultiTermQuery.RewriteMethod Methods | 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 Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Explanation.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Explanation.html",
    "title": "Class Explanation | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Explanation Expert: Describes the score computation for document and query. Inheritance System.Object Explanation ComplexExplanation 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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Explanation Constructors | Improve this Doc View Source Explanation() Declaration public Explanation() | Improve this Doc View Source Explanation(Single, String) Declaration public Explanation(float value, string description) Parameters Type Name Description System.Single value System.String description Properties | Improve this Doc View Source Description Gets or Sets the description of this explanation node. Declaration public virtual string Description { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsMatch Indicates whether or not this Explanation models a good match. By default, an Explanation represents a \"match\" if the value is positive. Declaration public virtual bool IsMatch { get; } Property Value Type Description System.Boolean See Also Value | Improve this Doc View Source Value Gets or Sets the value assigned to this explanation node. Declaration public virtual float Value { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source AddDetail(Explanation) Adds a sub-node to this explanation node. Declaration public virtual void AddDetail(Explanation detail) Parameters Type Name Description Explanation detail | Improve this Doc View Source GetDetails() The sub-nodes of this explanation node. Declaration public virtual Explanation[] GetDetails() Returns Type Description Explanation [] | Improve this Doc View Source GetSummary() A short one line summary which should contain all high level information about this Explanation , without the \"Details\" Declaration protected virtual string GetSummary() Returns Type Description System.String | Improve this Doc View Source ToHtml() Render an explanation as HTML. Declaration public virtual string ToHtml() Returns Type Description System.String | Improve this Doc View Source ToString() Render an explanation as text. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(Int32) Declaration protected virtual string ToString(int depth) Parameters Type Name Description System.Int32 depth Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Bytes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Bytes.html",
    "title": "Class FieldCache.Bytes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.Bytes Field values as 8-bit signed bytes Inheritance System.Object FieldCache.Bytes Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Bytes Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Bytes EMPTY Field Value Type Description FieldCache.Bytes Methods | Improve this Doc View Source Get(Int32) Return a single Byte representation of this field's value. Declaration public abstract byte Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Byte"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.CacheEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.CacheEntry.html",
    "title": "Class FieldCache.CacheEntry | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.CacheEntry EXPERT: A unique Identifier/Description for each item in the IFieldCache . Can be useful for logging/debugging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldCache.CacheEntry 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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CacheEntry Constructors | Improve this Doc View Source CacheEntry(Object, String, Type, Object, Object) Declaration public CacheEntry(object readerKey, string fieldName, Type cacheType, object custom, object value) Parameters Type Name Description System.Object readerKey System.String fieldName System.Type cacheType System.Object custom System.Object value Properties | Improve this Doc View Source CacheType Declaration public Type CacheType { get; } Property Value Type Description System.Type | Improve this Doc View Source Custom Declaration public object Custom { get; } Property Value Type Description System.Object | Improve this Doc View Source EstimatedSize The most recently estimated size of the value, null unless EstimateSize() has been called. Declaration public string EstimatedSize { get; } Property Value Type Description System.String | Improve this Doc View Source FieldName Declaration public string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source ReaderKey Declaration public object ReaderKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Value Declaration public object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source EstimateSize() Computes (and stores) the estimated size of the cache Value Declaration public void EstimateSize() See Also EstimatedSize | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.CreationPlaceholder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.CreationPlaceholder.html",
    "title": "Class FieldCache.CreationPlaceholder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.CreationPlaceholder Placeholder indicating creation of this cache is currently in-progress. Inheritance System.Object FieldCache.CreationPlaceholder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CreationPlaceholder"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Doubles.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Doubles.html",
    "title": "Class FieldCache.Doubles | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.Doubles Field values as 64-bit doubles Inheritance System.Object FieldCache.Doubles Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Doubles Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Doubles EMPTY Field Value Type Description FieldCache.Doubles Methods | Improve this Doc View Source Get(Int32) Return a System.Double representation of this field's value. Declaration public abstract double Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Double"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.html",
    "title": "Class FieldCache | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache Inheritance System.Object FieldCache Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldCache Fields | Improve this Doc View Source DEFAULT Expert: The cache used internally by sorting and range query classes. Declaration public static IFieldCache DEFAULT Field Value Type Description IFieldCache | Improve this Doc View Source DEFAULT_BYTE_PARSER The default parser for byte values, which are encoded by System.SByte.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . Declaration [Obsolete] public static readonly FieldCache.IByteParser DEFAULT_BYTE_PARSER Field Value Type Description FieldCache.IByteParser | Improve this Doc View Source DEFAULT_DOUBLE_PARSER The default parser for System.Double values, which are encoded by System.Double.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . Declaration [Obsolete] public static readonly FieldCache.IDoubleParser DEFAULT_DOUBLE_PARSER Field Value Type Description FieldCache.IDoubleParser | Improve this Doc View Source DEFAULT_INT16_PARSER The default parser for System.Int16 values, which are encoded by System.Int16.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_SHORT_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.IInt16Parser DEFAULT_INT16_PARSER Field Value Type Description FieldCache.IInt16Parser | Improve this Doc View Source DEFAULT_INT32_PARSER The default parser for System.Int32 values, which are encoded by System.Int32.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_INT_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.IInt32Parser DEFAULT_INT32_PARSER Field Value Type Description FieldCache.IInt32Parser | Improve this Doc View Source DEFAULT_INT64_PARSER The default parser for System.Int64 values, which are encoded by System.Int64.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_LONG_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.IInt64Parser DEFAULT_INT64_PARSER Field Value Type Description FieldCache.IInt64Parser | Improve this Doc View Source DEFAULT_SINGLE_PARSER The default parser for System.Single values, which are encoded by System.Single.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_FLOAT_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.ISingleParser DEFAULT_SINGLE_PARSER Field Value Type Description FieldCache.ISingleParser | Improve this Doc View Source NUMERIC_UTILS_DOUBLE_PARSER A parser instance for System.Double values encoded with NumericUtils , e.g. when indexed via DoubleField / NumericTokenStream . Declaration public static readonly FieldCache.IDoubleParser NUMERIC_UTILS_DOUBLE_PARSER Field Value Type Description FieldCache.IDoubleParser | Improve this Doc View Source NUMERIC_UTILS_INT32_PARSER A parser instance for System.Int32 values encoded by NumericUtils , e.g. when indexed via Int32Field / NumericTokenStream . NOTE: This was NUMERIC_UTILS_INT_PARSER in Lucene Declaration public static readonly FieldCache.IInt32Parser NUMERIC_UTILS_INT32_PARSER Field Value Type Description FieldCache.IInt32Parser | Improve this Doc View Source NUMERIC_UTILS_INT64_PARSER A parser instance for System.Int64 values encoded by NumericUtils , e.g. when indexed via Int64Field / NumericTokenStream . NOTE: This was NUMERIC_UTILS_LONG_PARSER in Lucene Declaration public static readonly FieldCache.IInt64Parser NUMERIC_UTILS_INT64_PARSER Field Value Type Description FieldCache.IInt64Parser | Improve this Doc View Source NUMERIC_UTILS_SINGLE_PARSER A parser instance for System.Single values encoded with NumericUtils , e.g. when indexed via SingleField / NumericTokenStream . NOTE: This was NUMERIC_UTILS_FLOAT_PARSER in Lucene Declaration public static readonly FieldCache.ISingleParser NUMERIC_UTILS_SINGLE_PARSER Field Value Type Description FieldCache.ISingleParser"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IByteParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IByteParser.html",
    "title": "Interface FieldCache.IByteParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FieldCache.IByteParser Interface to parse bytes from document fields. Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] public interface IByteParser : FieldCache.IParser Methods | Improve this Doc View Source ParseByte(BytesRef) Return a single Byte representation of this field's value. Declaration byte ParseByte(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Byte See Also GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IDoubleParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IDoubleParser.html",
    "title": "Interface FieldCache.IDoubleParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FieldCache.IDoubleParser Interface to parse System.Double s from document fields. Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IDoubleParser : FieldCache.IParser Methods | Improve this Doc View Source ParseDouble(BytesRef) Return an System.Double representation of this field's value. Declaration double ParseDouble(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Double See Also GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt16Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt16Parser.html",
    "title": "Interface FieldCache.IInt16Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FieldCache.IInt16Parser Interface to parse System.Int16 s from document fields. NOTE: This was ShortParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] public interface IInt16Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt16(BytesRef) Return a System.Int16 representation of this field's value. NOTE: This was parseShort() in Lucene Declaration short ParseInt16(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int16 See Also GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt32Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt32Parser.html",
    "title": "Interface FieldCache.IInt32Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FieldCache.IInt32Parser Interface to parse System.Int32 s from document fields. NOTE: This was IntParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IInt32Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt32(BytesRef) Return an System.Int32 representation of this field's value. NOTE: This was parseInt() in Lucene Declaration int ParseInt32(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int32 See Also GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt64Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt64Parser.html",
    "title": "Interface FieldCache.IInt64Parser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FieldCache.IInt64Parser Interface to parse System.Int64 from document fields. NOTE: This was LongParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IInt64Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt64(BytesRef) Return a System.Int64 representation of this field's value. NOTE: This was parseLong() in Lucene Declaration long ParseInt64(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int64 See Also GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int16s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int16s.html",
    "title": "Class FieldCache.Int16s | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.Int16s Field values as 16-bit signed shorts NOTE: This was Shorts in Lucene Inheritance System.Object FieldCache.Int16s Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int16s Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int16s EMPTY Field Value Type Description FieldCache.Int16s Methods | Improve this Doc View Source Get(Int32) Return a System.Int16 representation of this field's value. Declaration public abstract short Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int16"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int32s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int32s.html",
    "title": "Class FieldCache.Int32s | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.Int32s Field values as 32-bit signed integers NOTE: This was Ints in Lucene Inheritance System.Object FieldCache.Int32s Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int32s Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int32s EMPTY Field Value Type Description FieldCache.Int32s Methods | Improve this Doc View Source Get(Int32) Return an System.Int32 representation of this field's value. Declaration public abstract int Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int64s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int64s.html",
    "title": "Class FieldCache.Int64s | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.Int64s Field values as 64-bit signed long integers NOTE: This was Longs in Lucene Inheritance System.Object FieldCache.Int64s Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int64s Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int64s EMPTY Field Value Type Description FieldCache.Int64s Methods | Improve this Doc View Source Get(Int32) Return an System.Int64 representation of this field's value. Declaration public abstract long Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IParser.html",
    "title": "Interface FieldCache.IParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FieldCache.IParser Marker interface as super-interface to all parsers. It is used to specify a custom parser to SortField(String, FieldCache.IParser) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IParser Methods | Improve this Doc View Source TermsEnum(Terms) Pulls a TermsEnum from the given Terms . This method allows certain parsers to filter the actual TermsEnum before the field cache is filled. Declaration TermsEnum TermsEnum(Terms terms) Parameters Type Name Description Terms terms The Terms instance to create the TermsEnum from. Returns Type Description TermsEnum A possibly filtered TermsEnum instance, this method must not return null . Exceptions Type Condition System.IO.IOException If an System.IO.IOException occurs"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.ISingleParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.ISingleParser.html",
    "title": "Interface FieldCache.ISingleParser | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FieldCache.ISingleParser Interface to parse System.Single s from document fields. NOTE: This was FloatParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ISingleParser : FieldCache.IParser Methods | Improve this Doc View Source ParseSingle(BytesRef) Return an System.Single representation of this field's value. NOTE: This was parseFloat() in Lucene Declaration float ParseSingle(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Singles.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Singles.html",
    "title": "Class FieldCache.Singles | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCache.Singles Field values as 32-bit floats NOTE: This was Floats in Lucene Inheritance System.Object FieldCache.Singles Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Singles Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Singles EMPTY Field Value Type Description FieldCache.Singles Methods | Improve this Doc View Source Get(Int32) Return an System.Single representation of this field's value. Declaration public abstract float Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheDocIdSet.html",
    "title": "Class FieldCacheDocIdSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheDocIdSet Base class for DocIdSet to be used with IFieldCache . The implementation of its iterator is very stupid and slow if the implementation of the MatchDoc(Int32) method is not optimized, as iterators simply increment the document id until MatchDoc(Int32) returns true . Because of this MatchDoc(Int32) must be as fast as possible and in no case do any I/O. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet FieldCacheDocIdSet Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldCacheDocIdSet : DocIdSet Constructors | Improve this Doc View Source FieldCacheDocIdSet(Int32, IBits) Declaration public FieldCacheDocIdSet(int maxDoc, IBits acceptDocs) Parameters Type Name Description System.Int32 maxDoc IBits acceptDocs Fields | Improve this Doc View Source m_acceptDocs Declaration protected readonly IBits m_acceptDocs Field Value Type Description IBits | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 Properties | Improve this Doc View Source Bits Declaration public override sealed IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet is always cacheable (does not go back to the reader for iteration) Declaration public override sealed bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source GetIterator() Declaration public override sealed DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source MatchDoc(Int32) This method checks, if a doc is a hit Declaration protected abstract bool MatchDoc(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter.html",
    "title": "Class FieldCacheRangeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheRangeFilter A range filter built on top of a cached single term field (in IFieldCache ). FieldCacheRangeFilter builds a single cache for the field the first time it is used. Each subsequent FieldCacheRangeFilter on the same field then reuses this cache, even if the range itself changes. this means that FieldCacheRangeFilter is much faster (sometimes more than 100x as fast) as building a TermRangeFilter , if using a NewStringRange(String, String, String, Boolean, Boolean) . However, if the range never changes it is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single TermRangeFilter . For numeric data types, this filter may be significantly faster than NumericRangeFilter . Furthermore, it does not need the numeric values encoded by Int32Field , SingleField , Int64Field or DoubleField . But it has the problem that it only works with exact one value/document (see below). As with all IFieldCache based functionality, FieldCacheRangeFilter is only valid for fields which exact one term for each document (except for NewStringRange(String, String, String, Boolean, Boolean) where 0 terms are also allowed). Due to a restriction of IFieldCache , for numeric ranges all terms that do not have a numeric value, 0 is assumed. Thus it works on dates, prices and other single value fields but will not work on regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that there is only a single term. This class does not have an constructor, use one of the static factory methods available, that create a correct instance for different data types supported by IFieldCache . Inheritance System.Object FieldCacheRangeFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldCacheRangeFilter Methods | Improve this Doc View Source NewByteRange(String, FieldCache.IByteParser, Nullable<SByte>, Nullable<SByte>, Boolean, Boolean) Creates a numeric range filter using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) . This works with all System.Byte fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration [Obsolete] [CLSCompliant(false)] public static FieldCacheRangeFilter<sbyte?> NewByteRange(string field, FieldCache.IByteParser parser, sbyte? lowerVal, sbyte? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IByteParser parser System.Nullable < System.SByte > lowerVal System.Nullable < System.SByte > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.SByte >> | Improve this Doc View Source NewByteRange(String, Nullable<SByte>, Nullable<SByte>, Boolean, Boolean) Creates a numeric range filter using GetBytes(AtomicReader, String, Boolean) . This works with all System.Byte fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration [Obsolete] [CLSCompliant(false)] public static FieldCacheRangeFilter<sbyte?> NewByteRange(string field, sbyte? lowerVal, sbyte? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.SByte > lowerVal System.Nullable < System.SByte > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.SByte >> | Improve this Doc View Source NewBytesRefRange(String, BytesRef, BytesRef, Boolean, Boolean) Creates a BytesRef range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<BytesRef> NewBytesRefRange(string field, BytesRef lowerVal, BytesRef upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field BytesRef lowerVal BytesRef upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < BytesRef > | Improve this Doc View Source NewDoubleRange(String, FieldCache.IDoubleParser, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Creates a numeric range filter using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) . This works with all System.Double fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<double?> NewDoubleRange(string field, FieldCache.IDoubleParser parser, double? lowerVal, double? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IDoubleParser parser System.Nullable < System.Double > lowerVal System.Nullable < System.Double > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Double >> | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Creates a numeric range filter using GetDoubles(AtomicReader, String, Boolean) . This works with all System.Double fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<double?> NewDoubleRange(string field, double? lowerVal, double? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Double > lowerVal System.Nullable < System.Double > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Double >> | Improve this Doc View Source NewInt16Range(String, FieldCache.IInt16Parser, Nullable<Int16>, Nullable<Int16>, Boolean, Boolean) Creates a numeric range filter using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) . This works with all System.Int16 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newShortRange() in Lucene Declaration [Obsolete] public static FieldCacheRangeFilter<short?> NewInt16Range(string field, FieldCache.IInt16Parser parser, short? lowerVal, short? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt16Parser parser System.Nullable < System.Int16 > lowerVal System.Nullable < System.Int16 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int16 >> | Improve this Doc View Source NewInt16Range(String, Nullable<Int16>, Nullable<Int16>, Boolean, Boolean) Creates a numeric range filter using GetInt16s(AtomicReader, String, Boolean) . This works with all System.Int16 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newShortRange() in Lucene Declaration [Obsolete] public static FieldCacheRangeFilter<short?> NewInt16Range(string field, short? lowerVal, short? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int16 > lowerVal System.Nullable < System.Int16 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int16 >> | Improve this Doc View Source NewInt32Range(String, FieldCache.IInt32Parser, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Creates a numeric range filter using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) . This works with all System.Int32 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newIntRange() in Lucene Declaration public static FieldCacheRangeFilter<int?> NewInt32Range(string field, FieldCache.IInt32Parser parser, int? lowerVal, int? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser System.Nullable < System.Int32 > lowerVal System.Nullable < System.Int32 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int32 >> | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Creates a numeric range filter using GetInt32s(AtomicReader, String, Boolean) . This works with all System.Int32 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newIntRange() in Lucene Declaration public static FieldCacheRangeFilter<int?> NewInt32Range(string field, int? lowerVal, int? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int32 > lowerVal System.Nullable < System.Int32 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int32 >> | Improve this Doc View Source NewInt64Range(String, FieldCache.IInt64Parser, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Creates a numeric range filter using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) . This works with all System.Int64 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newLongRange() in Lucene Declaration public static FieldCacheRangeFilter<long?> NewInt64Range(string field, FieldCache.IInt64Parser parser, long? lowerVal, long? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt64Parser parser System.Nullable < System.Int64 > lowerVal System.Nullable < System.Int64 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int64 >> | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Creates a numeric range filter using GetInt64s(AtomicReader, String, Boolean) . This works with all System.Int64 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<long?> NewInt64Range(string field, long? lowerVal, long? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int64 > lowerVal System.Nullable < System.Int64 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int64 >> | Improve this Doc View Source NewSingleRange(String, FieldCache.ISingleParser, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Creates a numeric range filter using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) . This works with all System.Single fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newFloatRange() in Lucene Declaration public static FieldCacheRangeFilter<float?> NewSingleRange(string field, FieldCache.ISingleParser parser, float? lowerVal, float? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.ISingleParser parser System.Nullable < System.Single > lowerVal System.Nullable < System.Single > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Single >> | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Creates a numeric range filter using GetSingles(AtomicReader, String, Boolean) . This works with all System.Single fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newFloatRange() in Lucene Declaration public static FieldCacheRangeFilter<float?> NewSingleRange(string field, float? lowerVal, float? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Single > lowerVal System.Nullable < System.Single > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Single >> | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Creates a string range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<string> NewStringRange(string field, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.String >"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter-1.html",
    "title": "Class FieldCacheRangeFilter<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheRangeFilter<T> Inheritance System.Object Filter FieldCacheRangeFilter<T> Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldCacheRangeFilter<T> : Filter Type Parameters Name Description T Constructors | Improve this Doc View Source FieldCacheRangeFilter(String, FieldCache.IParser, T, T, Boolean, Boolean) Declaration protected FieldCacheRangeFilter(string field, FieldCache.IParser parser, T lowerVal, T upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IParser parser T lowerVal T upperVal System.Boolean includeLower System.Boolean includeUpper Properties | Improve this Doc View Source Field Returns the field name for this filter Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerVal Returns the lower value of this range filter Declaration public virtual T LowerVal { get; } Property Value Type Description T | Improve this Doc View Source Parser Returns the current numeric parser ( null for T is System.String ) Declaration public virtual FieldCache.IParser Parser { get; } Property Value Type Description FieldCache.IParser | Improve this Doc View Source UpperVal Returns the upper value of this range filter Declaration public virtual T UpperVal { get; } Property Value Type Description T Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) This method is implemented for each data type Declaration public abstract override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRewriteMethod.html",
    "title": "Class FieldCacheRewriteMethod | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheRewriteMethod Rewrites MultiTermQuery s into a filter, using the IFieldCache for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiTermQuery.RewriteMethod FieldCacheRewriteMethod Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) 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.Search Assembly : Lucene.Net.dll Syntax public sealed class FieldCacheRewriteMethod : MultiTermQuery.RewriteMethod Methods | 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 Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheTermsFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheTermsFilter.html",
    "title": "Class FieldCacheTermsFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheTermsFilter A Filter that only accepts documents whose single term value in the specified field is contained in the provided set of allowed terms. This is the same functionality as TermsFilter (from queries/), except this filter requires that the field contains only a single term for all documents. Because of drastically different implementations, they also have different performance characteristics, as described below. The first invocation of this filter on a given field will be slower, since a SortedDocValues must be created. Subsequent invocations using the same field will re-use this cache. However, as with all functionality based on IFieldCache , persistent RAM is consumed to hold the cache, and is not freed until the IndexReader is disposed. In contrast, TermsFilter has no persistent RAM consumption. With each search, this filter translates the specified set of Terms into a private FixedBitSet keyed by term number per unique IndexReader (normally one reader per segment). Then, during matching, the term number for each docID is retrieved from the cache and then checked for inclusion using the FixedBitSet . Since all testing is done using RAM resident data structures, performance should be very fast, most likely fast enough to not require further caching of the DocIdSet for each possible combination of terms. However, because docIDs are simply scanned linearly, an index with a great many small documents may find this linear scan too costly. In contrast, TermsFilter builds up a FixedBitSet , keyed by docID, every time it's created, by enumerating through all matching docs using DocsEnum to seek and scan through each term's docID list. While there is no linear scan of all docIDs, besides the allocation of the underlying array in the FixedBitSet , this approach requires a number of \"disk seeks\" in proportion to the number of terms, which can be exceptionally costly when there are cache misses in the OS's IO cache. Generally, this filter will be slower on the first invocation for a given field, but subsequent invocations, even if you change the allowed set of Terms , should be faster than TermsFilter, especially as the number of Terms being matched increases. If you are matching only a very small number of terms, and those terms in turn match a very small number of documents, TermsFilter may perform faster. Which filter is best is very application dependent. Inheritance System.Object Filter FieldCacheTermsFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldCacheTermsFilter : Filter Constructors | Improve this Doc View Source FieldCacheTermsFilter(String, BytesRef[]) Declaration public FieldCacheTermsFilter(string field, params BytesRef[] terms) Parameters Type Name Description System.String field BytesRef [] terms | Improve this Doc View Source FieldCacheTermsFilter(String, String[]) Declaration public FieldCacheTermsFilter(string field, params string[] terms) Parameters Type Name Description System.String field System.String [] terms Properties | Improve this Doc View Source FieldCache Declaration public virtual IFieldCache FieldCache { get; } Property Value Type Description IFieldCache Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.ByteComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.ByteComparer.html",
    "title": "Class FieldComparer.ByteComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.ByteComparer Parses field's values as System.Byte (using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) and sorts by ascending value Inheritance System.Object FieldComparer FieldComparer < System.SByte > FieldComparer.NumericComparer < System.SByte > FieldComparer.ByteComparer Inherited Members FieldComparer.NumericComparer<SByte>.m_missingValue FieldComparer.NumericComparer<SByte>.m_field FieldComparer.NumericComparer<SByte>.m_docsWithField FieldComparer<SByte>.CompareValues(SByte, SByte) FieldComparer<SByte>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] [CLSCompliant(false)] public sealed class ByteComparer : FieldComparer.NumericComparer<sbyte> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.SByte>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.SByte>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.SByte>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.SByte>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DocComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DocComparer.html",
    "title": "Class FieldComparer.DocComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.DocComparer Sorts by ascending docID Inheritance System.Object FieldComparer FieldComparer < System.Nullable < System.Int32 >> FieldComparer.DocComparer Inherited Members FieldComparer<Nullable<Int32>>.CompareValues(Nullable<Int32>, Nullable<Int32>) FieldComparer<Nullable<Int32>>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DocComparer : FieldComparer<int?> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DoubleComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DoubleComparer.html",
    "title": "Class FieldComparer.DoubleComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.DoubleComparer Parses field's values as System.Double (using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and sorts by ascending value Inheritance System.Object FieldComparer FieldComparer < System.Double > FieldComparer.NumericComparer < System.Double > FieldComparer.DoubleComparer Inherited Members FieldComparer.NumericComparer<Double>.m_missingValue FieldComparer.NumericComparer<Double>.m_field FieldComparer.NumericComparer<Double>.m_docsWithField FieldComparer<Double>.CompareValues(Double, Double) FieldComparer<Double>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DoubleComparer : FieldComparer.NumericComparer<double> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Double>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Double>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Double>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Double>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.html",
    "title": "Class FieldComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer Inheritance System.Object FieldComparer FieldComparer<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparer Properties | Improve this Doc View Source Item[Int32] Return the actual value in the slot. LUCENENET NOTE: This was value(int) in Lucene. Declaration public abstract IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot The value Property Value Type Description System.IComparable Value in this slot Methods | Improve this Doc View Source Compare(Int32, Int32) Compare hit at slot1 with hit at slot2 . Declaration public abstract int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 first slot to compare System.Int32 slot2 second slot to compare Returns Type Description System.Int32 any N < 0 if slot2 's value is sorted after slot1 , any N > 0 if the slot2 's value is sorted before slot1 and 0 if they are equal | Improve this Doc View Source CompareBottom(Int32) Compare the bottom of the queue with this doc. This will only invoked after setBottom has been called. This should return the same result as Compare(Int32, Int32) as if bottom were slot1 and the new document were slot 2. For a search that hits many results, this method will be the hotspot (invoked by far the most frequently). Declaration public abstract int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. | Improve this Doc View Source CompareTop(Int32) Compare the top value with this doc. This will only invoked after SetTopValue(Object) has been called. This should return the same result as Compare(Int32, Int32) as if topValue were slot1 and the new document were slot 2. This is only called for searches that use SearchAfter (deep paging). Declaration public abstract int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. | Improve this Doc View Source CompareValues(Object, Object) Declaration public abstract int CompareValues(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) This method is called when a new hit is competitive. You should copy any state associated with this document that will be required for future comparisons, into the specified slot. Declaration public abstract void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot Which slot to copy the hit to System.Int32 doc DocID relative to current reader | Improve this Doc View Source SetBottom(Int32) Set the bottom slot, ie the \"weakest\" (sorted last) entry in the queue. When CompareBottom(Int32) is called, you should compare against this slot. This will always be called before CompareBottom(Int32) . Declaration public abstract void SetBottom(int slot) Parameters Type Name Description System.Int32 slot The currently weakest (sorted last) slot in the queue | Improve this Doc View Source SetNextReader(AtomicReaderContext) Set a new AtomicReaderContext . All subsequent docIDs are relative to the current reader (you must add docBase if you need to map it to a top-level docID). Declaration public abstract FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Current reader context Returns Type Description FieldComparer The comparer to use for this segment; most comparers can just return \"this\" to reuse the same comparer across segments Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source SetScorer(Scorer) Sets the Scorer to use in case a document's score is needed. Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Scorer instance that you should use to obtain the current hit's score, if necessary. | Improve this Doc View Source SetTopValue(Object) Record the top value, for future calls to CompareTop(Int32) . This is only called for searches that use SearchAfter (deep paging), and is called before any calls to SetNextReader(AtomicReaderContext) . Declaration public abstract void SetTopValue(object value) Parameters Type Name Description System.Object value"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int16Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int16Comparer.html",
    "title": "Class FieldComparer.Int16Comparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.Int16Comparer Parses field's values as System.Int16 (using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and sorts by ascending value NOTE: This was ShortComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int16 > FieldComparer.NumericComparer < System.Int16 > FieldComparer.Int16Comparer Inherited Members FieldComparer.NumericComparer<Int16>.m_missingValue FieldComparer.NumericComparer<Int16>.m_field FieldComparer.NumericComparer<Int16>.m_docsWithField FieldComparer<Int16>.CompareValues(Int16, Int16) FieldComparer<Int16>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] public sealed class Int16Comparer : FieldComparer.NumericComparer<short> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int16>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int16>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int16>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int16>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int32Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int32Comparer.html",
    "title": "Class FieldComparer.Int32Comparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.Int32Comparer Parses field's values as System.Int32 (using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and sorts by ascending value NOTE: This was IntComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int32 > FieldComparer.NumericComparer < System.Int32 > FieldComparer.Int32Comparer Inherited Members FieldComparer.NumericComparer<Int32>.m_missingValue FieldComparer.NumericComparer<Int32>.m_field FieldComparer.NumericComparer<Int32>.m_docsWithField FieldComparer<Int32>.CompareValues(Int32, Int32) FieldComparer<Int32>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class Int32Comparer : FieldComparer.NumericComparer<int> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int32>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int32>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int32>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int32>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int64Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int64Comparer.html",
    "title": "Class FieldComparer.Int64Comparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.Int64Comparer Parses field's values as System.Int64 (using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and sorts by ascending value NOTE: This was LongComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int64 > FieldComparer.NumericComparer < System.Int64 > FieldComparer.Int64Comparer Inherited Members FieldComparer.NumericComparer<Int64>.m_missingValue FieldComparer.NumericComparer<Int64>.m_field FieldComparer.NumericComparer<Int64>.m_docsWithField FieldComparer<Int64>.CompareValues(Int64, Int64) FieldComparer<Int64>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class Int64Comparer : FieldComparer.NumericComparer<long> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int64>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int64>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int64>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int64>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.NumericComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.NumericComparer-1.html",
    "title": "Class FieldComparer.NumericComparer<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.NumericComparer<T> Base FieldComparer class for numeric types Inheritance System.Object FieldComparer FieldComparer <T> FieldComparer.NumericComparer<T> FieldComparer.ByteComparer FieldComparer.DoubleComparer FieldComparer.Int16Comparer FieldComparer.Int32Comparer FieldComparer.Int64Comparer FieldComparer.SingleComparer Inherited Members FieldComparer<T>.Compare(Int32, Int32) FieldComparer<T>.SetBottom(Int32) FieldComparer<T>.SetTopValue(Object) FieldComparer<T>.CompareBottom(Int32) FieldComparer<T>.CompareTop(Int32) FieldComparer<T>.Copy(Int32, Int32) FieldComparer<T>.CompareValues(T, T) FieldComparer<T>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) FieldComparer.Item[Int32] System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class NumericComparer<T> : FieldComparer<T> where T : struct Type Parameters Name Description T Constructors | Improve this Doc View Source NumericComparer(String, Nullable<T>) Declaration public NumericComparer(string field, T? missingValue) Parameters Type Name Description System.String field System.Nullable <T> missingValue Fields | Improve this Doc View Source m_docsWithField Declaration protected IBits m_docsWithField Field Value Type Description IBits | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_missingValue Declaration protected readonly T? m_missingValue Field Value Type Description System.Nullable <T> Methods | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<T>.SetNextReader(Lucene.Net.Index.AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.RelevanceComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.RelevanceComparer.html",
    "title": "Class FieldComparer.RelevanceComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.RelevanceComparer Sorts by descending relevance. NOTE: if you are sorting only by descending relevance and then secondarily by ascending docID, performance is faster using TopScoreDocCollector directly (which all overloads of Search(Query, Int32) use when no Sort is specified). Inheritance System.Object FieldComparer FieldComparer < System.Single > FieldComparer.RelevanceComparer Inherited Members FieldComparer<Single>.CompareValues(Object, Object) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class RelevanceComparer : FieldComparer<float> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(Single, Single) Declaration public override int CompareValues(float first, float second) Parameters Type Name Description System.Single first System.Single second Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareValues(System.Single, System.Single) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Single>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides FieldComparer.SetScorer(Scorer) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.SingleComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.SingleComparer.html",
    "title": "Class FieldComparer.SingleComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.SingleComparer Parses field's values as System.Single (using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and sorts by ascending value NOTE: This was FloatComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Single > FieldComparer.NumericComparer < System.Single > FieldComparer.SingleComparer Inherited Members FieldComparer.NumericComparer<Single>.m_missingValue FieldComparer.NumericComparer<Single>.m_field FieldComparer.NumericComparer<Single>.m_docsWithField FieldComparer<Single>.CompareValues(Single, Single) FieldComparer<Single>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class SingleComparer : FieldComparer.NumericComparer<float> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Single>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Single>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermOrdValComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermOrdValComparer.html",
    "title": "Class FieldComparer.TermOrdValComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.TermOrdValComparer Sorts by field's natural Term sort order, using ordinals. This is functionally equivalent to FieldComparer.TermValComparer , but it first resolves the string to their relative ordinal positions (using the index returned by GetTermsIndex(AtomicReader, String, Single) ), and does most comparisons using the ordinals. For medium to large results, this comparer will be much faster than FieldComparer.TermValComparer . For very small result sets it may be slower. Inheritance System.Object FieldComparer FieldComparer < BytesRef > FieldComparer.TermOrdValComparer Inherited Members FieldComparer<BytesRef>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermOrdValComparer : FieldComparer<BytesRef> Constructors | Improve this Doc View Source TermOrdValComparer(Int32, String) Creates this, sorting missing values first. Declaration public TermOrdValComparer(int numHits, string field) Parameters Type Name Description System.Int32 numHits System.String field | Improve this Doc View Source TermOrdValComparer(Int32, String, Boolean) Creates this, with control over how missing values are sorted. Pass true for sortMissingLast to put missing values at the end. Declaration public TermOrdValComparer(int numHits, string field, bool sortMissingLast) Parameters Type Name Description System.Int32 numHits System.String field System.Boolean sortMissingLast Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(BytesRef, BytesRef) Declaration public override int CompareValues(BytesRef val1, BytesRef val2) Parameters Type Name Description BytesRef val1 BytesRef val2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareValues(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Copy(System.Int32, System.Int32) | Improve this Doc View Source GetSortedDocValues(AtomicReaderContext, String) Retrieves the SortedDocValues for the field in this segment Declaration protected virtual SortedDocValues GetSortedDocValues(AtomicReaderContext context, string field) Parameters Type Name Description AtomicReaderContext context System.String field Returns Type Description SortedDocValues | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermValComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermValComparer.html",
    "title": "Class FieldComparer.TermValComparer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer.TermValComparer Sorts by field's natural Term sort order. All comparisons are done using CompareTo(BytesRef) , which is slow for medium to large result sets but possibly very fast for very small results sets. Inheritance System.Object FieldComparer FieldComparer < BytesRef > FieldComparer.TermValComparer Inherited Members FieldComparer<BytesRef>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TermValComparer : FieldComparer<BytesRef> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(BytesRef, BytesRef) Declaration public override int CompareValues(BytesRef val1, BytesRef val2) Parameters Type Name Description BytesRef val1 BytesRef val2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareValues(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer-1.html",
    "title": "Class FieldComparer<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparer<T> Expert: a FieldComparer compares hits so as to determine their sort order when collecting the top results with TopFieldCollector . The concrete public FieldComparer classes here correspond to the SortField types. This API is designed to achieve high performance sorting, by exposing a tight interaction with FieldValueHitQueue as it visits hits. Whenever a hit is competitive, it's enrolled into a virtual slot, which is an System.Int32 ranging from 0 to numHits-1. The FieldComparer is made aware of segment transitions during searching in case any internal state it's tracking needs to be recomputed during these transitions. A comparer must define these functions: Compare(Int32, Int32) Compare a hit at 'slot a' with hit 'slot b'. SetBottom(Int32) This method is called by FieldValueHitQueue to notify the FieldComparer of the current weakest (\"bottom\") slot. Note that this slot may not hold the weakest value according to your comparer, in cases where your comparer is not the primary one (ie, is only used to break ties from the comparers before it). CompareBottom(Int32) Compare a new hit (docID) against the \"weakest\" (bottom) entry in the queue. SetTopValue(Object) This method is called by TopFieldCollector to notify the FieldComparer of the top most value, which is used by future calls to CompareTop(Int32) . CompareTop(Int32) Compare a new hit (docID) against the top value previously set by a call to SetTopValue(Object) . Copy(Int32, Int32) Installs a new hit into the priority queue. The FieldValueHitQueue calls this method when a new hit is competitive. SetNextReader(AtomicReaderContext) Invoked when the search is switching to the next segment. You may need to update internal state of the comparer, for example retrieving new values from the IFieldCache . Item[Int32] Return the sort value stored in the specified slot. This is only called at the end of the search, in order to populate Fields when returning the top results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparer FieldComparer<T> FieldComparer.DocComparer FieldComparer.NumericComparer<T> FieldComparer.RelevanceComparer FieldComparer.TermOrdValComparer FieldComparer.TermValComparer Inherited Members FieldComparer.SetScorer(Scorer) FieldComparer.Item[Int32] System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparer<T> : FieldComparer Type Parameters Name Description T Methods | Improve this Doc View Source Compare(Int32, Int32) Compare hit at slot1 with hit at slot2 . Declaration public abstract override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 first slot to compare System.Int32 slot2 second slot to compare Returns Type Description System.Int32 any N < 0 if slot2 's value is sorted after slot1 , any N > 0 if the slot2 's value is sorted before slot1 and 0 if they are equal Overrides FieldComparer.Compare(Int32, Int32) | Improve this Doc View Source CompareBottom(Int32) Compare the bottom of the queue with this doc. This will only invoked after SetBottom(Int32) has been called. This should return the same result as Compare(Int32, Int32) as if bottom were slot1 and the new document were slot 2. For a search that hits many results, this method will be the hotspot (invoked by far the most frequently). Declaration public abstract override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. Overrides FieldComparer.CompareBottom(Int32) | Improve this Doc View Source CompareTop(Int32) Compare the top value with this doc. This will only invoked after SetTopValue(Object) has been called. This should return the same result as Compare(Int32, Int32) as if topValue were slot1 and the new document were slot 2. This is only called for searches that use SearchAfter (deep paging). Declaration public abstract override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. Overrides FieldComparer.CompareTop(Int32) | Improve this Doc View Source CompareValues(T, T) Returns -1 if first is less than second. Default impl to assume the type implements System.IComparable<T> and invoke System.IComparable<T>.CompareTo(T) ; be sure to override this method if your FieldComparer's type isn't a System.IComparable<T> or if your values may sometimes be null Declaration public virtual int CompareValues(T first, T second) Parameters Type Name Description T first T second Returns Type Description System.Int32 | Improve this Doc View Source CompareValues(Object, Object) Returns -1 if first is less than second. Default impl to assume the type implements System.IComparable<T> and invoke System.IComparable<T>.CompareTo(T) ; be sure to override this method if your FieldComparer's type isn't a System.IComparable<T> or if your values may sometimes be null Declaration public override int CompareValues(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Int32 Overrides FieldComparer.CompareValues(Object, Object) | Improve this Doc View Source Copy(Int32, Int32) This method is called when a new hit is competitive. You should copy any state associated with this document that will be required for future comparisons, into the specified slot. Declaration public abstract override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot Which slot to copy the hit to System.Int32 doc DocID relative to current reader Overrides FieldComparer.Copy(Int32, Int32) | Improve this Doc View Source SetBottom(Int32) Set the bottom slot, ie the \"weakest\" (sorted last) entry in the queue. When CompareBottom(Int32) is called, you should compare against this slot. This will always be called before CompareBottom(Int32) . Declaration public abstract override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot the currently weakest (sorted last) slot in the queue Overrides FieldComparer.SetBottom(Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Set a new AtomicReaderContext . All subsequent docIDs are relative to the current reader (you must add docBase if you need to map it to a top-level docID). Declaration public abstract override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Current reader context Returns Type Description FieldComparer The comparer to use for this segment; most comparers can just return \"this\" to reuse the same comparer across segments Overrides FieldComparer.SetNextReader(AtomicReaderContext) Exceptions Type Condition System.IO.IOException If there is a low-level IO error | Improve this Doc View Source SetTopValue(Object) Record the top value, for future calls to CompareTop(Int32) . This is only called for searches that use SearchAfter (deep paging), and is called before any calls to SetNextReader(AtomicReaderContext) . Declaration public abstract override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides FieldComparer.SetTopValue(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparerSource.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparerSource.html",
    "title": "Class FieldComparerSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldComparerSource Provides a FieldComparer for custom field sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparerSource Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparerSource Methods | Improve this Doc View Source NewComparer(String, Int32, Int32, Boolean) Creates a comparer for the field in the given index. Declaration public abstract FieldComparer NewComparer(string fieldname, int numHits, int sortPos, bool reversed) Parameters Type Name Description System.String fieldname Name of the field to create comparer for. System.Int32 numHits System.Int32 sortPos System.Boolean reversed Returns Type Description FieldComparer FieldComparer . Exceptions Type Condition System.IO.IOException If an error occurs reading the index."
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldDoc.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldDoc.html",
    "title": "Class FieldDoc | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldDoc Expert: A ScoreDoc which also contains information about how to sort the referenced document. In addition to the document number and score, this object contains an array of values for the document from the field(s) used to sort. For example, if the sort criteria was to sort by fields \"a\", \"b\" then \"c\", the fields object array will have three elements, corresponding respectively to the term values for the document in fields \"a\", \"b\" and \"c\". The class of each element in the array will be either System.Int32 , System.Single or System.String depending on the type of values in the terms of each field. Created: Feb 11, 2004 1:23:38 PM @since lucene 1.4 Inheritance System.Object ScoreDoc FieldDoc Inherited Members ScoreDoc.Score ScoreDoc.Doc ScoreDoc.ShardIndex 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.Search Assembly : Lucene.Net.dll Syntax public class FieldDoc : ScoreDoc Constructors | Improve this Doc View Source FieldDoc(Int32, Single) Expert: Creates one of these objects with empty sort information. Declaration public FieldDoc(int doc, float score) Parameters Type Name Description System.Int32 doc System.Single score | Improve this Doc View Source FieldDoc(Int32, Single, Object[]) Expert: Creates one of these objects with the given sort information. Declaration public FieldDoc(int doc, float score, object[] fields) Parameters Type Name Description System.Int32 doc System.Single score System.Object [] fields | Improve this Doc View Source FieldDoc(Int32, Single, Object[], Int32) Expert: Creates one of these objects with the given sort information. Declaration public FieldDoc(int doc, float score, object[] fields, int shardIndex) Parameters Type Name Description System.Int32 doc System.Single score System.Object [] fields System.Int32 shardIndex Properties | Improve this Doc View Source Fields Expert: The values which are used to sort the referenced document. The order of these will match the original sort criteria given by a Sort object. Each Object will have been returned from the Item[Int32] method corresponding FieldComparer used to sort this field. Declaration public object[] Fields { get; set; } Property Value Type Description System.Object [] See Also Sort Search(Query, Filter, Int32, Sort) Methods | Improve this Doc View Source ToString() A convenience method for debugging. Declaration public override string ToString() Returns Type Description System.String Overrides ScoreDoc.ToString() See Also ScoreDoc TopFieldDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueFilter.html",
    "title": "Class FieldValueFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldValueFilter A Filter that accepts all documents that have one or more values in a given field. this Filter request IBits from the IFieldCache and build the bits if not present. Inheritance System.Object Filter FieldValueFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldValueFilter : Filter Constructors | Improve this Doc View Source FieldValueFilter(String) Creates a new FieldValueFilter Declaration public FieldValueFilter(string field) Parameters Type Name Description System.String field The field to filter | Improve this Doc View Source FieldValueFilter(String, Boolean) Creates a new FieldValueFilter Declaration public FieldValueFilter(string field, bool negate) Parameters Type Name Description System.String field The field to filter System.Boolean negate If true all documents with no value in the given field are accepted. Properties | Improve this Doc View Source Field Returns the field this filter is applied on. Declaration public virtual string Field { get; } Property Value Type Description System.String The field this filter is applied on. | Improve this Doc View Source Negate Returns true if this filter is negated, otherwise false Declaration public virtual bool Negate { get; } Property Value Type Description System.Boolean true if this filter is negated, otherwise false Methods | 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 GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | 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()"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.Entry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.Entry.html",
    "title": "Class FieldValueHitQueue.Entry | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldValueHitQueue.Entry Inheritance System.Object ScoreDoc FieldValueHitQueue.Entry Inherited Members ScoreDoc.Score ScoreDoc.Doc ScoreDoc.ShardIndex 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.Search Assembly : Lucene.Net.dll Syntax public class Entry : ScoreDoc Constructors | Improve this Doc View Source Entry(Int32, Int32, Single) Declaration public Entry(int slot, int doc, float score) Parameters Type Name Description System.Int32 slot System.Int32 doc System.Single score Properties | Improve this Doc View Source Slot Declaration public int Slot { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides ScoreDoc.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.html",
    "title": "Class FieldValueHitQueue | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldValueHitQueue Inheritance System.Object FieldValueHitQueue Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldValueHitQueue Methods | Improve this Doc View Source Create<T>(SortField[], Int32) Creates a hit queue sorted by the given list of fields. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static FieldValueHitQueue<T> Create<T>(SortField[] fields, int size) where T : FieldValueHitQueue.Entry Parameters Type Name Description SortField [] fields SortField array we are sorting by in priority order (highest priority first); cannot be null or empty System.Int32 size The number of hits to retain. Must be greater than zero. Returns Type Description FieldValueHitQueue <T> Type Parameters Name Description T Exceptions Type Condition System.IO.IOException If there is a low-level IO error"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue-1.html",
    "title": "Class FieldValueHitQueue<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldValueHitQueue<T> Expert: A hit queue for sorting by hits by terms in more than one field. Uses FieldCache.DEFAULT for maintaining internal term lookup tables. This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 2.9 Inheritance System.Object PriorityQueue <T> FieldValueHitQueue<T> Inherited Members PriorityQueue<T>.LessThan(T, T) PriorityQueue<T>.GetSentinelObject() PriorityQueue<T>.Add(T) PriorityQueue<T>.InsertWithOverflow(T) PriorityQueue<T>.Top PriorityQueue<T>.Pop() PriorityQueue<T>.UpdateTop() PriorityQueue<T>.Count PriorityQueue<T>.Clear() PriorityQueue<T>.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.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldValueHitQueue<T> : PriorityQueue<T> where T : FieldValueHitQueue.Entry Type Parameters Name Description T Fields | Improve this Doc View Source m_comparers Declaration protected readonly FieldComparer[] m_comparers Field Value Type Description FieldComparer [] | Improve this Doc View Source m_fields Stores the sort criteria being used. Declaration protected readonly SortField[] m_fields Field Value Type Description SortField [] | Improve this Doc View Source m_firstComparer Declaration protected FieldComparer m_firstComparer Field Value Type Description FieldComparer | Improve this Doc View Source m_reverseMul Declaration protected readonly int[] m_reverseMul Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Comparers Declaration public virtual FieldComparer[] Comparers { get; } Property Value Type Description FieldComparer [] | Improve this Doc View Source ReverseMul Declaration public virtual int[] ReverseMul { get; } Property Value Type Description System.Int32 [] Methods | Improve this Doc View Source SetComparer(Int32, FieldComparer) Declaration public virtual void SetComparer(int pos, FieldComparer comparer) Parameters Type Name Description System.Int32 pos FieldComparer comparer See Also Search(Query, Filter, Int32, Sort) FieldCache"
  },
  "api/Lucene.Net/Lucene.Net.Search.Filter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Filter.html",
    "title": "Class Filter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Filter Abstract base class for restricting which documents may be returned during searching. Inheritance System.Object Filter CachingWrapperFilter DocTermOrdsRangeFilter FieldCacheRangeFilter<T> FieldCacheTermsFilter FieldValueFilter MultiTermQueryWrapperFilter<Q> QueryWrapperFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Filter Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Creates a DocIdSet enumerating the documents that should be permitted in search results. NOTE: null can be returned if no documents are accepted by this Filter . Note: this method will be called once per segment in the index during searching. The returned DocIdSet must refer to document IDs for that segment, not for the top-level reader. Declaration public abstract DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context a AtomicReaderContext instance opened on the index currently searched on. Note, it is likely that the provided reader info does not represent the whole underlying index i.e. if the index has more than one segment the given reader only represents a single segment. The provided context is always an atomic context, so you can call Fields on the context's reader, for example. IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description DocIdSet A DocIdSet that provides the documents which should be permitted or prohibited in search results. NOTE: null should be returned if the filter doesn't accept any documents otherwise internal optimization might not apply in the case an empty DocIdSet is returned. | Improve this Doc View Source NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Creates a new instance with the ability to specify the body of the GetDocIdSet(AtomicReaderContext, IBits) method through the getDocIdSet parameter. Simple example: var filter = Filter.NewAnonymous(getDocIdSet: (context, acceptDocs) => { if (acceptDocs == null) acceptDocs = new Bits.MatchAllBits(5); OpenBitSet bitset = new OpenBitSet(5); if (acceptDocs.Get(1)) bitset.Set(1); if (acceptDocs.Get(3)) bitset.Set(3); return new DocIdBitSet(bitset); }); LUCENENET specific Declaration public static Filter NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet> getDocIdSet) Parameters Type Name Description System.Func < AtomicReaderContext , IBits , DocIdSet > getDocIdSet A delegate method that represents (is called by) the GetDocIdSet(AtomicReaderContext, IBits) method. It accepts a AtomicReaderContext context and a IBits acceptDocs and returns the DocIdSet for this filter. Returns Type Description Filter"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSet.html",
    "title": "Class FilteredDocIdSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteredDocIdSet Abstract decorator class for a DocIdSet implementation that provides on-demand filtering/validation mechanism on a given DocIdSet . Technically, this same functionality could be achieved with ChainedFilter (under queries/), however the benefit of this class is it never materializes the full bitset for the filter. Instead, the Match(Int32) method is invoked on-demand, per docID visited during searching. If you know few docIDs will be visited, and the logic behind Match(Int32) is relatively costly, this may be a better way to filter than ChainedFilter. Inheritance System.Object DocIdSet FilteredDocIdSet BitsFilteredDocIdSet Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilteredDocIdSet : DocIdSet Constructors | Improve this Doc View Source FilteredDocIdSet(DocIdSet) Constructor. Declaration public FilteredDocIdSet(DocIdSet innerSet) Parameters Type Name Description DocIdSet innerSet Underlying DocIdSet Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable if the inner set is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source GetIterator() Implementation of the contract to build a DocIdSetIterator . Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() See Also DocIdSetIterator FilteredDocIdSetIterator | Improve this Doc View Source Match(Int32) Validation method to determine whether a docid should be in the result set. Declaration protected abstract bool Match(int docid) Parameters Type Name Description System.Int32 docid docid to be tested Returns Type Description System.Boolean true if input docid should be in the result set, false otherwise. See Also DocIdSet"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSetIterator.html",
    "title": "Class FilteredDocIdSetIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteredDocIdSetIterator Abstract decorator class of a DocIdSetIterator implementation that provides on-demand filter/validation mechanism on an underlying DocIdSetIterator . See DocIdSetIterator . Inheritance System.Object DocIdSetIterator FilteredDocIdSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilteredDocIdSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source FilteredDocIdSetIterator(DocIdSetIterator) Constructor. Declaration public FilteredDocIdSetIterator(DocIdSetIterator innerIter) Parameters Type Name Description DocIdSetIterator innerIter Underlying DocIdSetIterator . Fields | Improve this Doc View Source m_innerIter Declaration protected DocIdSetIterator m_innerIter Field Value Type Description DocIdSetIterator Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source Match(Int32) Validation method to determine whether a docid should be in the result set. Declaration protected abstract bool Match(int doc) Parameters Type Name Description System.Int32 doc docid to be tested Returns Type Description System.Boolean true if input docid should be in the result set, false otherwise. See Also FilteredDocIdSetIterator(DocIdSetIterator) | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.FilterStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.FilterStrategy.html",
    "title": "Class FilteredQuery.FilterStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteredQuery.FilterStrategy Abstract class that defines how the filter ( DocIdSet ) applied during document collection. Inheritance System.Object FilteredQuery.FilterStrategy FilteredQuery.RandomAccessFilterStrategy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilterStrategy Methods | Improve this Doc View Source FilteredBulkScorer(AtomicReaderContext, Weight, Boolean, DocIdSet) Returns a filtered BulkScorer based on this strategy. this is an optional method: the default implementation just calls FilteredScorer(AtomicReaderContext, Weight, DocIdSet) and wraps that into a BulkScorer . Declaration public virtual BulkScorer FilteredBulkScorer(AtomicReaderContext context, Weight weight, bool scoreDocsInOrder, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context the AtomicReaderContext for which to return the Scorer . Weight weight the FilteredQuery Weight to create the filtered scorer. System.Boolean scoreDocsInOrder true to score docs in order DocIdSet docIdSet the filter DocIdSet to apply Returns Type Description BulkScorer a filtered top scorer | Improve this Doc View Source FilteredScorer(AtomicReaderContext, Weight, DocIdSet) Returns a filtered Scorer based on this strategy. Declaration public abstract Scorer FilteredScorer(AtomicReaderContext context, Weight weight, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context the AtomicReaderContext for which to return the Scorer . Weight weight the FilteredQuery Weight to create the filtered scorer. DocIdSet docIdSet the filter DocIdSet to apply Returns Type Description Scorer a filtered scorer Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.html",
    "title": "Class FilteredQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteredQuery A query that applies a filter to the results of another query. Note: the bits are retrieved from the filter each time this query is used in a search - use a CachingWrapperFilter to avoid regenerating the bits every time. @since 1.4 Inheritance System.Object Query FilteredQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FilteredQuery : Query Constructors | Improve this Doc View Source FilteredQuery(Query, Filter) Constructs a new query which applies a filter to the results of the original query. GetDocIdSet(AtomicReaderContext, IBits) will be called every time this query is used in a search. Declaration public FilteredQuery(Query query, Filter filter) Parameters Type Name Description Query query Query to be filtered, cannot be null . Filter filter Filter to apply to query results, cannot be null . | Improve this Doc View Source FilteredQuery(Query, Filter, FilteredQuery.FilterStrategy) Expert: Constructs a new query which applies a filter to the results of the original query. GetDocIdSet(AtomicReaderContext, IBits) will be called every time this query is used in a search. Declaration public FilteredQuery(Query query, Filter filter, FilteredQuery.FilterStrategy strategy) Parameters Type Name Description Query query Query to be filtered, cannot be null . Filter filter Filter to apply to query results, cannot be null . FilteredQuery.FilterStrategy strategy A filter strategy used to create a filtered scorer. See Also FilteredQuery.FilterStrategy Fields | Improve this Doc View Source LEAP_FROG_FILTER_FIRST_STRATEGY A filter strategy that uses a \"leap-frog\" approach (also called \"zig-zag join\"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected. Note: this strategy uses the filter to lead the iteration. Declaration public static readonly FilteredQuery.FilterStrategy LEAP_FROG_FILTER_FIRST_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source LEAP_FROG_QUERY_FIRST_STRATEGY A filter strategy that uses a \"leap-frog\" approach (also called \"zig-zag join\"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected. Note: this strategy uses the query to lead the iteration. Declaration public static readonly FilteredQuery.FilterStrategy LEAP_FROG_QUERY_FIRST_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source QUERY_FIRST_FILTER_STRATEGY A filter strategy that advances the Query or rather its Scorer first and consults the filter DocIdSet for each matched document. Note: this strategy requires a Bits to return a non-null value. Otherwise this strategy falls back to LEAP_FROG_QUERY_FIRST_STRATEGY Use this strategy if the filter computation is more expensive than document scoring or if the filter has a linear running time to compute the next matching doc like exact geo distances. Declaration public static readonly FilteredQuery.FilterStrategy QUERY_FIRST_FILTER_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source RANDOM_ACCESS_FILTER_STRATEGY A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy. Note: this strategy is the default strategy in FilteredQuery Declaration public static readonly FilteredQuery.FilterStrategy RANDOM_ACCESS_FILTER_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy Properties | Improve this Doc View Source Filter Returns this FilteredQuery 's filter Declaration public Filter Filter { get; } Property Value Type Description Filter | Improve this Doc View Source Query Returns this FilteredQuery 's (unfiltered) Query Declaration public Query Query { get; } Property Value Type Description Query | Improve this Doc View Source Strategy Returns this FilteredQuery 's FilteredQuery.FilterStrategy Declaration public virtual FilteredQuery.FilterStrategy Strategy { get; } Property Value Type Description FilteredQuery.FilterStrategy Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Returns a Weight that applies the filter to the enclosed query's Weight . this is accomplished by overriding the Scorer returned by the Weight . Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Rewrites the query. If the wrapped is an instance of MatchAllDocsQuery it returns a ConstantScoreQuery . Otherwise it returns a new FilteredQuery wrapping the rewritten query. Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string s) Parameters Type Name Description System.String s Returns Type Description System.String Overrides Query.ToString(String) See Also CachingWrapperFilter"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.RandomAccessFilterStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.RandomAccessFilterStrategy.html",
    "title": "Class FilteredQuery.RandomAccessFilterStrategy | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilteredQuery.RandomAccessFilterStrategy A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy . Inheritance System.Object FilteredQuery.FilterStrategy FilteredQuery.RandomAccessFilterStrategy Inherited Members FilteredQuery.FilterStrategy.FilteredBulkScorer(AtomicReaderContext, Weight, Boolean, DocIdSet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class RandomAccessFilterStrategy : FilteredQuery.FilterStrategy Methods | Improve this Doc View Source FilteredScorer(AtomicReaderContext, Weight, DocIdSet) Declaration public override Scorer FilteredScorer(AtomicReaderContext context, Weight weight, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context Weight weight DocIdSet docIdSet Returns Type Description Scorer Overrides FilteredQuery.FilterStrategy.FilteredScorer(AtomicReaderContext, Weight, DocIdSet) | Improve this Doc View Source UseRandomAccess(IBits, Int32) Expert: decides if a filter should be executed as \"random-access\" or not. Random-access means the filter \"filters\" in a similar way as deleted docs are filtered in Lucene. This is faster when the filter accepts many documents. However, when the filter is very sparse, it can be faster to execute the query+filter as a conjunction in some cases. The default implementation returns true if the first document accepted by the filter is < 100. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual bool UseRandomAccess(IBits bits, int firstFilterDoc) Parameters Type Name Description IBits bits System.Int32 firstFilterDoc Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyQuery.html",
    "title": "Class FuzzyQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyQuery Implements the fuzzy search query. The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false to the transpositions parameter. this query uses MultiTermQuery.TopTermsScoringBooleanQueryRewrite as default. So terms will be collected and scored according to their edit distance. Only the top terms are used for building the BooleanQuery . It is not recommended to change the rewrite mode for fuzzy queries. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances (especially with transpositions enabled), are generally not useful and will match a significant amount of the term dictionary. If you really want this, consider using an n-gram indexing technique (such as the SpellChecker in the suggest module ) instead. NOTE: terms of length 1 or 2 will sometimes not match because of how the scaled distance between two terms is computed. For a term to match, the edit distance between the terms must be less than the minimum length term (either the input term, or the candidate term). For example, FuzzyQuery on term \"abcd\" with maxEdits=2 will not match an indexed term \"ab\", and FuzzyQuery on term \"a\" with maxEdits=2 will not match an indexed term \"abc\". Inheritance System.Object Query MultiTermQuery FuzzyQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FuzzyQuery : MultiTermQuery Constructors | Improve this Doc View Source FuzzyQuery(Term) Calls FuzzyQuery(Term, Int32) . Declaration public FuzzyQuery(Term term) Parameters Type Name Description Term term | Improve this Doc View Source FuzzyQuery(Term, Int32) Calls FuzzyQuery(Term, Int32, Int32) . Declaration public FuzzyQuery(Term term, int maxEdits) Parameters Type Name Description Term term System.Int32 maxEdits | Improve this Doc View Source FuzzyQuery(Term, Int32, Int32) Calls FuzzyQuery(Term, Int32, Int32, Int32, Boolean) . Declaration public FuzzyQuery(Term term, int maxEdits, int prefixLength) Parameters Type Name Description Term term System.Int32 maxEdits System.Int32 prefixLength | Improve this Doc View Source FuzzyQuery(Term, Int32, Int32, Int32, Boolean) Create a new FuzzyQuery that will match terms with an edit distance of at most maxEdits to term . If a prefixLength > 0 is specified, a common prefix of that length is also required. Declaration public FuzzyQuery(Term term, int maxEdits, int prefixLength, int maxExpansions, bool transpositions) Parameters Type Name Description Term term The term to search for System.Int32 maxEdits Must be >= 0 and <= MAXIMUM_SUPPORTED_DISTANCE . System.Int32 prefixLength Length of common (non-fuzzy) prefix System.Int32 maxExpansions The maximum number of terms to match. If this number is greater than MaxClauseCount when the query is rewritten, then the maxClauseCount will be used instead. System.Boolean transpositions true if transpositions should be treated as a primitive edit operation. If this is false , comparisons will implement the classic Levenshtein algorithm. Fields | Improve this Doc View Source DefaultMaxEdits Declaration public const int DefaultMaxEdits = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DefaultMaxExpansions Declaration public const int DefaultMaxExpansions = 50 Field Value Type Description System.Int32 | Improve this Doc View Source DefaultMinSimilarity Declaration [Obsolete(\"pass integer edit distances instead.\")] public const float DefaultMinSimilarity = 2F Field Value Type Description System.Single | Improve this Doc View Source DefaultPrefixLength Declaration public const int DefaultPrefixLength = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DefaultTranspositions Declaration public const bool DefaultTranspositions = true Field Value Type Description System.Boolean Properties | Improve this Doc View Source MaxEdits Declaration public virtual int MaxEdits { get; } Property Value Type Description System.Int32 The maximum number of edit distances allowed for this query to match. | Improve this Doc View Source PrefixLength Returns the non-fuzzy prefix length. This is the number of characters at the start of a term that must be identical (not fuzzy) to the query term if the query is to match that term. Declaration public virtual int PrefixLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Term Returns the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term | Improve this Doc View Source Transpositions Returns true if transpositions should be treated as a primitive edit operation. If this is false , comparisons will implement the classic Levenshtein algorithm. Declaration public virtual bool Transpositions { get; } Property Value Type Description System.Boolean Methods | 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 MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source SingleToEdits(Single, Int32) Helper function to convert from deprecated \"minimumSimilarity\" fractions to raw edit distances. NOTE: this was floatToEdits() in Lucene Declaration [Obsolete(\"pass integer edit distances instead.\")] public static int SingleToEdits(float minimumSimilarity, int termLen) Parameters Type Name Description System.Single minimumSimilarity Scaled similarity System.Int32 termLen Length (in unicode codepoints) of the term. Returns Type Description System.Int32 Equivalent number of maxEdits | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.html",
    "title": "Class FuzzyTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyTermsEnum Subclass of TermsEnum for enumerating all terms that are similar to the specified filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FuzzyTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Attributes TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FuzzyTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FuzzyTermsEnum(Terms, AttributeSource, Term, Single, Int32, Boolean) Constructor for enumeration of all terms from specified reader which share a prefix of length prefixLength with term and which have a fuzzy similarity > minSimilarity . After calling the constructor the enumeration is already pointing to the first valid term if such a term exists. Declaration public FuzzyTermsEnum(Terms terms, AttributeSource atts, Term term, float minSimilarity, int prefixLength, bool transpositions) Parameters Type Name Description Terms terms Delivers terms. AttributeSource atts AttributeSource created by the rewrite method of MultiTermQuery thats contains information about competitive boosts during rewrite. It is also used to cache DFAs between segment transitions. Term term Pattern term. System.Single minSimilarity Minimum required similarity for terms from the reader. Pass an integer value representing edit distance. Passing a fraction is deprecated. System.Int32 prefixLength Length of required common prefix. Default value is 0. System.Boolean transpositions Transpositions Exceptions Type Condition System.IO.IOException if there is a low-level IO error Fields | Improve this Doc View Source m_maxEdits Declaration protected int m_maxEdits Field Value Type Description System.Int32 | Improve this Doc View Source m_minSimilarity Declaration protected readonly float m_minSimilarity Field Value Type Description System.Single | Improve this Doc View Source m_raw Declaration protected readonly bool m_raw Field Value Type Description System.Boolean | Improve this Doc View Source m_realPrefixLength Declaration protected readonly int m_realPrefixLength Field Value Type Description System.Int32 | Improve this Doc View Source m_scaleFactor Declaration protected readonly float m_scaleFactor Field Value Type Description System.Single | Improve this Doc View Source m_termLength Declaration protected readonly int m_termLength Field Value Type Description System.Int32 | Improve this Doc View Source m_terms Declaration protected readonly Terms m_terms Field Value Type Description Terms | Improve this Doc View Source m_termText Declaration protected readonly int[] m_termText Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source MinSimilarity This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual float MinSimilarity { get; } Property Value Type Description System.Single | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source ScaleFactor This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual float ScaleFactor { get; } Property Value Type Description System.Single | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source GetAutomatonEnum(Int32, BytesRef) Return an automata-based enum for matching up to editDistance from lastTerm , if possible Declaration protected virtual TermsEnum GetAutomatonEnum(int editDistance, BytesRef lastTerm) Parameters Type Name Description System.Int32 editDistance BytesRef lastTerm Returns Type Description TermsEnum | Improve this Doc View Source GetTermState() Declaration public override TermState GetTermState() Returns Type Description TermState Overrides TermsEnum.GetTermState() | Improve this Doc View Source MaxEditDistanceChanged(BytesRef, Int32, Boolean) Declaration protected virtual void MaxEditDistanceChanged(BytesRef lastTerm, int maxEdits, bool init) Parameters Type Name Description BytesRef lastTerm System.Int32 maxEdits System.Boolean init | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(BytesRef) Declaration public override bool SeekExact(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) | Improve this Doc View Source SeekExact(BytesRef, TermState) Declaration public override void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term TermState state Overrides TermsEnum.SeekExact(BytesRef, TermState) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) | Improve this Doc View Source SetEnum(TermsEnum) Swap in a new actual enum to proxy to Declaration protected virtual void SetEnum(TermsEnum actualEnum) Parameters Type Name Description TermsEnum actualEnum Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.ILevenshteinAutomataAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.ILevenshteinAutomataAttribute.html",
    "title": "Interface FuzzyTermsEnum.ILevenshteinAutomataAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface FuzzyTermsEnum.ILevenshteinAutomataAttribute Reuses compiled automata across different segments, because they are independent of the index This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ILevenshteinAutomataAttribute : IAttribute Properties | Improve this Doc View Source Automata Declaration IList<CompiledAutomaton> Automata { get; } Property Value Type Description System.Collections.Generic.IList < CompiledAutomaton >"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.LevenshteinAutomataAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.LevenshteinAutomataAttribute.html",
    "title": "Class FuzzyTermsEnum.LevenshteinAutomataAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FuzzyTermsEnum.LevenshteinAutomataAttribute Stores compiled automata as a list (indexed by edit distance) This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute FuzzyTermsEnum.LevenshteinAutomataAttribute Implements FuzzyTermsEnum.ILevenshteinAutomataAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class LevenshteinAutomataAttribute : Attribute, FuzzyTermsEnum.ILevenshteinAutomataAttribute, IAttribute Properties | Improve this Doc View Source Automata Declaration public IList<CompiledAutomaton> Automata { get; } Property Value Type Description System.Collections.Generic.IList < CompiledAutomaton > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | 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() Implements FuzzyTermsEnum.ILevenshteinAutomataAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Search.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.html",
    "title": "Namespace Lucene.Net.Search | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.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. --> Code to search indices. Table Of Contents Search Basics 2. The Query Classes 3. Scoring: Introduction 4. Scoring: Basics 5. Changing the Scoring 6. Appendix: Search Algorithm Search Basics Lucene offers a wide variety of Query implementations, most of which are in this package, its subpackages ( spans , payloads ), or the queries module . These implementations can be combined in a wide variety of ways to provide complex querying capabilities along with information about where matches took place in the document collection. The Query Classes section below highlights some of the more important Query classes. For details on implementing your own Query class, see Custom Queries -- Expert Level below. To perform a search, applications usually call #search(Query,int) or #search(Query,Filter,int) . Once a Query has been created and submitted to the IndexSearcher , the scoring process begins. After some infrastructure setup, control finally passes to the Weight implementation and its Scorer or BulkScore instances. See the Algorithm section for more notes on the process. <!-- TODO: this page over-links the same things too many times --> Query Classes [TermQuery](xref:Lucene.Net.Search.TermQuery) Of the various implementations of Query , the TermQuery is the easiest to understand and the most often used in applications. A TermQuery matches all the documents that contain the specified Term , which is a word that occurs in a certain Field . Thus, a TermQuery identifies and scores all Document s that have a Field with the specified string in it. Constructing a TermQuery is as simple as: TermQuery tq = new TermQuery(new Term(\"fieldName\", \"term\")); In this example, the Query identifies all Document s that have the Field named \"fieldName\" containing the word \"term\" . [BooleanQuery](xref:Lucene.Net.Search.BooleanQuery) Things start to get interesting when one combines multiple TermQuery instances into a BooleanQuery . A BooleanQuery contains multiple BooleanClause s, where each clause contains a sub-query ( Query instance) and an operator (from BooleanClause.Occur ) describing how that sub-query is combined with the other clauses: 1. SHOULD — Use this operator when a clause can occur in the result set, but is not required. If a query is made up of all SHOULD clauses, then every document in the result set matches at least one of these clauses. 2. MUST — Use this operator when a clause is required to occur in the result set. Every document in the result set will match all such clauses. 3. NOT — Use this operator when a clause must not occur in the result set. No document in the result set will match any such clauses. Boolean queries are constructed by adding two or more BooleanClause instances. If too many clauses are added, a TooManyClauses exception will be thrown during searching. This most often occurs when a Query is rewritten into a BooleanQuery with many TermQuery clauses, for example by WildcardQuery . The default setting for the maximum number of clauses 1024, but this can be changed via the static method #setMaxClauseCount(int) . Phrases Another common search is to find documents containing certain phrases. This is handled three different ways: PhraseQuery — Matches a sequence of Term s. PhraseQuery uses a slop factor to determine how many positions may occur between any two terms in the phrase and still be considered a match. The slop is 0 by default, meaning the phrase must match exactly. MultiPhraseQuery — A more general form of PhraseQuery that accepts multiple Terms for a position in the phrase. For example, this can be used to perform phrase queries that also incorporate synonyms. 3. SpanNearQuery — Matches a sequence of other SpanQuery instances. SpanNearQuery allows for much more complicated phrase queries since it is constructed from other SpanQuery instances, instead of only TermQuery instances. [TermRangeQuery](xref:Lucene.Net.Search.TermRangeQuery) The TermRangeQuery matches all documents that occur in the exclusive range of a lower Term and an upper Term according to TermsEnum.getComparator . It is not intended for numerical ranges; use NumericRangeQuery instead. For example, one could find all documents that have terms beginning with the letters a through c . [NumericRangeQuery](xref:Lucene.Net.Search.NumericRangeQuery) The NumericRangeQuery matches all documents that occur in a numeric range. For NumericRangeQuery to work, you must index the values using a one of the numeric fields ( IntField , LongField , FloatField , or DoubleField ). [PrefixQuery](xref:Lucene.Net.Search.PrefixQuery), [WildcardQuery](xref:Lucene.Net.Search.WildcardQuery), [RegexpQuery](xref:Lucene.Net.Search.RegexpQuery) While the PrefixQuery has a different implementation, it is essentially a special case of the WildcardQuery . The PrefixQuery allows an application to identify all documents with terms that begin with a certain string. The WildcardQuery generalizes this by allowing for the use of (matches 0 or more characters) and ? (matches exactly one character) wildcards. Note that the WildcardQuery can be quite slow. Also note that WildcardQuery should not start with and ? , as these are extremely slow. Some QueryParsers may not allow this by default, but provide a setAllowLeadingWildcard method to remove that protection. The RegexpQuery is even more general than WildcardQuery, allowing an application to identify all documents with terms that match a regular expression pattern. [FuzzyQuery](xref:Lucene.Net.Search.FuzzyQuery) A FuzzyQuery matches documents that contain terms similar to the specified term. Similarity is determined using Levenshtein (edit) distance . This type of query can be useful when accounting for spelling variations in the collection. Scoring — Introduction Lucene scoring is the heart of why we all love Lucene. It is blazingly fast and it hides almost all of the complexity from the user. In a nutshell, it works. At least, that is, until it doesn't work, or doesn't work as one would expect it to work. Then we are left digging into Lucene internals or asking for help on java-user@lucene.apache.org to figure out why a document with five of our query terms scores lower than a different document with only one of the query terms. While this document won't answer your specific scoring issues, it will, hopefully, point you to the places that can help you figure out the what and why of Lucene scoring. Lucene scoring supports a number of pluggable information retrieval models , including: * Vector Space Model (VSM) * Probablistic Models such as Okapi BM25 and DFR * Language models These models can be plugged in via the Similarity API , and offer extension hooks and parameters for tuning. In general, Lucene first finds the documents that need to be scored based on boolean logic in the Query specification, and then ranks this subset of matching documents via the retrieval model. For some valuable references on VSM and IR in general refer to Lucene Wiki IR references . The rest of this document will cover Scoring basics and explain how to change your Similarity . Next, it will cover ways you can customize the lucene internals in Custom Queries -- Expert Level , which gives details on implementing your own Query class and related functionality. Finally, we will finish up with some reference material in the Appendix . Scoring — Basics Scoring is very much dependent on the way documents are indexed, so it is important to understand indexing. (see Lucene overview before continuing on with this section) Be sure to use the useful Doc) to understand how the score for a certain matching document was computed. Generally, the Query determines which documents match (a binary decision), while the Similarity determines how to assign scores to the matching documents. Fields and Documents In Lucene, the objects we are scoring are Document s. A Document is a collection of Field s. Each Field has semantics about how it is created and stored ( Tokenized , Stored , etc). It is important to note that Lucene scoring works on Fields and then combines the results to return Documents. This is important because two Documents with the exact same content, but one having the content in two Fields and the other in one Field may return different scores for the same query due to length normalization. Score Boosting Lucene allows influencing search results by \"boosting\" at different times: * Index-time boost by calling Field.setBoost before a document is added to the index. * Query-time boost by setting a boost on a query clause, calling Query.setBoost . Indexing time boosts are pre-processed for storage efficiency and written to storage for a field as follows: * All boosts of that field (i.e. all boosts under the same field name in that doc) are multiplied. * The boost is then encoded into a normalization value by the Similarity object at index-time: ComputeNorm . The actual encoding depends upon the Similarity implementation, but note that most use a lossy encoding (such as multiplying the boost with document length or similar, packed into a single byte!). * Decoding of any index-time normalization values and integration into the document's score is also performed at search time by the Similarity. Changing Scoring — Similarity Changing Similarity is an easy way to influence scoring, this is done at index-time with IndexWriterConfig.setSimilarity and at query-time with IndexSearcher.setSimilarity . Be sure to use the same Similarity at query-time as at index-time (so that norms are encoded/decoded correctly); Lucene makes no effort to verify this. You can influence scoring by configuring a different built-in Similarity implementation, or by tweaking its parameters, subclassing it to override behavior. Some implementations also offer a modular API which you can extend by plugging in a different component (e.g. term frequency normalizer). Finally, you can extend the low level Similarity directly to implement a new retrieval model, or to use external scoring factors particular to your application. For example, a custom Similarity can access per-document values via FieldCache or NumericDocValues and integrate them into the score. See the Lucene.Net.Search.Similarities package documentation for information on the built-in available scoring models and extending or changing Similarity. Custom Queries — Expert Level Custom queries are an expert level task, so tread carefully and be prepared to share your code if you want help. With the warning out of the way, it is possible to change a lot more than just the Similarity when it comes to matching and scoring in Lucene. Lucene's search is a complex mechanism that is grounded by three main classes : 1. Query — The abstract object representation of the user's information need. 2. Weight — The internal interface representation of the user's Query, so that Query objects may be reused. This is global (across all segments of the index) and generally will require global statistics (such as docFreq for a given term across all segments). 3. Scorer — An abstract class containing common functionality for scoring. Provides both scoring and explanation capabilities. This is created per-segment. 4. BulkScorer — An abstract class that scores a range of documents. A default implementation simply iterates through the hits from Scorer , but some queries such as BooleanQuery have more efficient implementations. Details on each of these classes, and their children, can be found in the subsections below. The Query Class In some sense, the Query class is where it all begins. Without a Query, there would be nothing to score. Furthermore, the Query class is the catalyst for the other scoring classes as it is often responsible for creating them or coordinating the functionality between them. The Query class has several methods that are important for derived classes: 1. Searcher) — A Weight is the internal representation of the Query, so each Query implementation must provide an implementation of Weight. See the subsection on The Weight Interface below for details on implementing the Weight interface. 2. Reader) — Rewrites queries into primitive queries. Primitive queries are: TermQuery , BooleanQuery , and other queries that implement Searcher) The Weight Interface The Weight interface provides an internal representation of the Query so that it can be reused. Any IndexSearcher dependent state should be stored in the Weight implementation, not in the Query class. The interface defines five methods that must be implemented: 1. GetQuery — Pointer to the Query that this Weight represents. 2. GetValueForNormalization — A weight can return a floating point value to indicate its magnitude for query normalization. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#getValueForNormalization . For example, with Lucene's classic vector-space formula , this is implemented as the sum of squared weights: ` 3. [TopLevelBoost)](xref:Lucene.Net.Search.Weight#methods) — Performs query normalization: * topLevelBoost : A query-boost factor from any wrapping queries that should be multiplied into every document's score. For example, a TermQuery that is wrapped within a BooleanQuery with a boost of 5 would receive this value at this time. This allows the TermQuery (the leaf node in this case) to compute this up-front a single time (e.g. by multiplying into the IDF), rather than for every document. * norm`: Passes in a a normalization factor which may allow for comparing scores between queries. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#normalize . 4. AcceptDocs) — Construct a new Scorer for this Weight. See The Scorer Class below for help defining a Scorer. As the name implies, the Scorer is responsible for doing the actual scoring of documents given the Query. 5. AcceptDocs) — Construct a new BulkScorer for this Weight. See The BulkScorer Class below for help defining a BulkScorer. This is an optional method, and most queries do not implement it. 6. Doc) — Provide a means for explaining why a given document was scored the way it was. Typically a weight such as TermWeight that scores via a Similarity will make use of the Similarity's implementation: Freq) . The Scorer Class The Scorer abstract class provides common scoring functionality for all Scorer implementations and is the heart of the Lucene scoring process. The Scorer defines the following abstract (some of them are not yet abstract, but will be in future versions and should be considered as such now) methods which must be implemented (some of them inherited from DocIdSetIterator ): 1. NextDoc — Advances to the next document that matches this Query, returning true if and only if there is another document that matches. 2. DocID — Returns the id of the Document that contains the match. 3. Score — Return the score of the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the configured Similarity: Freq) . 4. Freq — Returns the number of matches for the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the term frequency from the inverted index: DocsEnum.freq . 5. Advance — Skip ahead in the document matches to the document whose id is greater than or equal to the passed in value. In many instances, advance can be implemented more efficiently than simply looping through all the matching documents until the target document is identified. 6. GetChildren — Returns any child subscorers underneath this scorer. This allows for users to navigate the scorer hierarchy and receive more fine-grained details on the scoring process. The BulkScorer Class The BulkScorer scores a range of documents. There is only one abstract method: 1. Score — Score all documents up to but not including the specified max document. Why would I want to add my own Query? In a nutshell, you want to add your own custom Query implementation when you think that Lucene's aren't appropriate for the task that you want to do. You might be doing some cutting edge research or you need more information back out of Lucene (similar to Doug adding SpanQuery functionality). Appendix: Search Algorithm This section is mostly notes on stepping through the Scoring process and serves as fertilizer for the earlier sections. In the typical search application, a Query is passed to the IndexSearcher , beginning the scoring process. Once inside the IndexSearcher, a Collector is used for the scoring and sorting of the search results. These important objects are involved in a search: 1. The Weight object of the Query. The Weight object is an internal representation of the Query that allows the Query to be reused by the IndexSearcher. 2. The IndexSearcher that initiated the call. 3. A Filter for limiting the result set. Note, the Filter may be null. 4. A Sort object for specifying how to sort the results if the standard score-based sort method is not desired. Assuming we are not sorting (since sorting doesn't affect the raw Lucene score), we call one of the search methods of the IndexSearcher, passing in the Weight object created by IndexSearcher.createNormalizedWeight , Filter and the number of results we want. This method returns a TopDocs object, which is an internal collection of search results. The IndexSearcher creates a TopScoreDocCollector and passes it along with the Weight, Filter to another expert search method (for more on the Collector mechanism, see IndexSearcher ). The TopScoreDocCollector uses a PriorityQueue to collect the top results for the search. If a Filter is being used, some initial setup is done to determine which docs to include. Otherwise, we ask the Weight for a Scorer for each IndexReader segment and proceed by calling BulkScorer.score . At last, we are actually going to score some documents. The score method takes in the Collector (most likely the TopScoreDocCollector or TopFieldCollector) and does its business.Of course, here is where things get involved. The Scorer that is returned by the Weight object depends on what type of Query was submitted. In most real world applications with multiple query terms, the Scorer is going to be a BooleanScorer2 created from BooleanWeight (see the section on custom queries for info on changing this). Assuming a BooleanScorer2, we first initialize the Coordinator, which is used to apply the coord() factor. We then get a internal Scorer based on the required, optional and prohibited parts of the query. Using this internal Scorer, the BooleanScorer2 then proceeds into a while loop based on the Scorer.nextDoc method. The nextDoc() method advances to the next document matching the query. This is an abstract method in the Scorer class and is thus overridden by all derived implementations. If you have a simple OR query your internal Scorer is most likely a DisjunctionSumScorer, which essentially combines the scorers from the sub scorers of the OR'd terms. Classes AutomatonQuery A Query that will match terms against a finite-state machine. This query will match documents that contain terms accepted by a given finite-state machine. The automaton can be constructed with the Lucene.Net.Util.Automaton API. Alternatively, it can be created from a regular expression with RegexpQuery or from the standard Lucene wildcard syntax with WildcardQuery . When the query is executed, it will create an equivalent DFA of the finite-state machine, and will enumerate the term dictionary in an intelligent way to reduce the number of comparisons. For example: the regular expression of [dl]og? will make approximately four comparisons: do, dog, lo, and log. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BitsFilteredDocIdSet This implementation supplies a filtered DocIdSet , that excludes all docids which are not in a IBits instance. This is especially useful in Filter to apply the Lucene.Net.Search.BitsFilteredDocIdSet.acceptDocs passed to GetDocIdSet(AtomicReaderContext, IBits) before returning the final DocIdSet . BooleanClause A clause in a BooleanQuery . BooleanQuery A Query that matches documents matching boolean combinations of other queries, e.g. TermQuery s, PhraseQuery s or other BooleanQuery s. Collection initializer note: To create and populate a BooleanQuery in a single statement, you can use the following example as a guide: var booleanQuery = new BooleanQuery() { { new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD }, { new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD } }; // or var booleanQuery = new BooleanQuery() { new BooleanClause(new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD), new BooleanClause(new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD) }; BooleanQuery.BooleanWeight Expert: the Weight for BooleanQuery , used to normalize, score and explain these queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BooleanQuery.TooManyClausesException Thrown when an attempt is made to add more than MaxClauseCount clauses. This typically happens if a PrefixQuery , FuzzyQuery , WildcardQuery , or TermRangeQuery is expanded to many terms during search. BoostAttribute Implementation class for IBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk BulkScorer This class is used to score a range of documents at once, and is returned by GetBulkScorer(AtomicReaderContext, Boolean, IBits) . Only queries that have a more optimized means of scoring across a range of documents need to override this. Otherwise, a default implementation is wrapped around the Scorer returned by GetScorer(AtomicReaderContext, IBits) . CachingCollector Caches all docs, and optionally also scores, coming from a search, and is then able to replay them to another collector. You specify the max RAM this class may use. Once the collection is done, call IsCached . If this returns true , you can use Replay(ICollector) against a new collector. If it returns false , this means too much RAM was required and you must instead re-run the original search. NOTE : this class consumes 4 (or 8 bytes, if scoring is cached) per collected document. If the result set is large this can easily be a very substantial amount of RAM! NOTE : this class caches at least 128 documents before checking RAM limits. See the Lucene modules/grouping module for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CachingWrapperFilter Wraps another Filter 's result and caches it. The purpose is to allow filters to simply filter, and then wrap with this class to add caching. CollectionStatistics Contains statistics for a collection (field) This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollectionTerminatedException Throw this exception in Collect(Int32) to prematurely terminate collection of the current leaf. Note: IndexSearcher swallows this exception and never re-throws it. As a consequence, you should not catch it when calling any overload of Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) as it is unnecessary and might hide misuse of this exception. Collector LUCENENET specific class used to hold the NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) static method. ComplexExplanation Expert: Describes the score computation for document and query, and can distinguish a match independent of a positive value. ConstantScoreAutoRewrite A rewrite method that tries to pick the best constant-score rewrite method based on term and document counts from the query. If both the number of terms and documents is small enough, then CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE is used. Otherwise, CONSTANT_SCORE_FILTER_REWRITE is used. ConstantScoreQuery A query that wraps another query or a filter and simply returns a constant score equal to the query boost for every document that matches the filter or query. For queries it therefore simply strips of all scores and returns a constant one. ConstantScoreQuery.ConstantBulkScorer We return this as our BulkScorer so that if the CSQ wraps a query with its own optimized top-level scorer (e.g. Lucene.Net.Search.BooleanScorer ) we can use that top-level scorer. ConstantScoreQuery.ConstantScorer ConstantScoreQuery.ConstantWeight ControlledRealTimeReopenThread<T> Utility class that runs a thread to manage periodic reopens of a ReferenceManager<G> , with methods to wait for a specific index changes to become visible. To use this class you must first wrap your IndexWriter with a TrackingIndexWriter and always use it to make changes to the index, saving the returned generation. Then, when a given search request needs to see a specific index change, call the WaitForGeneration(Int64) to wait for that change to be visible. Note that this will only scale well if most searches do not need to wait for a specific index generation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DisjunctionMaxQuery A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. This is useful when searching for a word in multiple fields with different boost factors (so that the fields cannot be combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, not the sum of the field scores (as BooleanQuery would give). If the query is \"albino elephant\" this ensures that \"albino\" matching one field and \"elephant\" matching another gets a higher score than \"albino\" matching both fields. To get this result, use both BooleanQuery and DisjunctionMaxQuery : for each term a DisjunctionMaxQuery searches for it in each field, while the set of these DisjunctionMaxQuery 's is combined into a BooleanQuery . The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that include this term in only the best of those multiple fields, without confusing this with the better case of two different terms in the multiple fields. Collection initializer note: To create and populate a DisjunctionMaxQuery in a single statement, you can use the following example as a guide: var disjunctionMaxQuery = new DisjunctionMaxQuery(0.1f) { new TermQuery(new Term(\"field1\", \"albino\")), new TermQuery(new Term(\"field2\", \"elephant\")) }; DisjunctionMaxQuery.DisjunctionMaxWeight Expert: the Weight for DisjunctionMaxQuery, used to normalize, score and explain these queries. NOTE: this API and implementation is subject to change suddenly in the next release. DocIdSet A DocIdSet contains a set of doc ids. Implementing classes must only implement GetIterator() to provide access to the set. DocIdSetIterator This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to System.Int32.MaxValue in order to be used as a sentinel object. Implementations of this class are expected to consider System.Int32.MaxValue as an invalid value. DocTermOrdsRangeFilter A range filter built on top of a cached multi-valued term field (in IFieldCache ). Like FieldCacheRangeFilter , this is just a specialized range query versus using a TermRangeQuery with DocTermOrdsRewriteMethod : it will only do two ordinal to term lookups. DocTermOrdsRewriteMethod Rewrites MultiTermQuery s into a filter, using DocTermOrds for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Explanation Expert: Describes the score computation for document and query. FieldCache FieldCache.Bytes Field values as 8-bit signed bytes FieldCache.CacheEntry EXPERT: A unique Identifier/Description for each item in the IFieldCache . Can be useful for logging/debugging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldCache.CreationPlaceholder Placeholder indicating creation of this cache is currently in-progress. FieldCache.Doubles Field values as 64-bit doubles FieldCache.Int16s Field values as 16-bit signed shorts NOTE: This was Shorts in Lucene FieldCache.Int32s Field values as 32-bit signed integers NOTE: This was Ints in Lucene FieldCache.Int64s Field values as 64-bit signed long integers NOTE: This was Longs in Lucene FieldCache.Singles Field values as 32-bit floats NOTE: This was Floats in Lucene FieldCacheDocIdSet Base class for DocIdSet to be used with IFieldCache . The implementation of its iterator is very stupid and slow if the implementation of the MatchDoc(Int32) method is not optimized, as iterators simply increment the document id until MatchDoc(Int32) returns true . Because of this MatchDoc(Int32) must be as fast as possible and in no case do any I/O. This is a Lucene.NET INTERNAL API, use at your own risk FieldCacheRangeFilter A range filter built on top of a cached single term field (in IFieldCache ). FieldCacheRangeFilter builds a single cache for the field the first time it is used. Each subsequent FieldCacheRangeFilter on the same field then reuses this cache, even if the range itself changes. this means that FieldCacheRangeFilter is much faster (sometimes more than 100x as fast) as building a TermRangeFilter , if using a NewStringRange(String, String, String, Boolean, Boolean) . However, if the range never changes it is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single TermRangeFilter . For numeric data types, this filter may be significantly faster than NumericRangeFilter . Furthermore, it does not need the numeric values encoded by Int32Field , SingleField , Int64Field or DoubleField . But it has the problem that it only works with exact one value/document (see below). As with all IFieldCache based functionality, FieldCacheRangeFilter is only valid for fields which exact one term for each document (except for NewStringRange(String, String, String, Boolean, Boolean) where 0 terms are also allowed). Due to a restriction of IFieldCache , for numeric ranges all terms that do not have a numeric value, 0 is assumed. Thus it works on dates, prices and other single value fields but will not work on regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that there is only a single term. This class does not have an constructor, use one of the static factory methods available, that create a correct instance for different data types supported by IFieldCache . FieldCacheRangeFilter<T> FieldCacheRewriteMethod Rewrites MultiTermQuery s into a filter, using the IFieldCache for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldCacheTermsFilter A Filter that only accepts documents whose single term value in the specified field is contained in the provided set of allowed terms. This is the same functionality as TermsFilter (from queries/), except this filter requires that the field contains only a single term for all documents. Because of drastically different implementations, they also have different performance characteristics, as described below. The first invocation of this filter on a given field will be slower, since a SortedDocValues must be created. Subsequent invocations using the same field will re-use this cache. However, as with all functionality based on IFieldCache , persistent RAM is consumed to hold the cache, and is not freed until the IndexReader is disposed. In contrast, TermsFilter has no persistent RAM consumption. With each search, this filter translates the specified set of Terms into a private FixedBitSet keyed by term number per unique IndexReader (normally one reader per segment). Then, during matching, the term number for each docID is retrieved from the cache and then checked for inclusion using the FixedBitSet . Since all testing is done using RAM resident data structures, performance should be very fast, most likely fast enough to not require further caching of the DocIdSet for each possible combination of terms. However, because docIDs are simply scanned linearly, an index with a great many small documents may find this linear scan too costly. In contrast, TermsFilter builds up a FixedBitSet , keyed by docID, every time it's created, by enumerating through all matching docs using DocsEnum to seek and scan through each term's docID list. While there is no linear scan of all docIDs, besides the allocation of the underlying array in the FixedBitSet , this approach requires a number of \"disk seeks\" in proportion to the number of terms, which can be exceptionally costly when there are cache misses in the OS's IO cache. Generally, this filter will be slower on the first invocation for a given field, but subsequent invocations, even if you change the allowed set of Terms , should be faster than TermsFilter, especially as the number of Terms being matched increases. If you are matching only a very small number of terms, and those terms in turn match a very small number of documents, TermsFilter may perform faster. Which filter is best is very application dependent. FieldComparer FieldComparer.ByteComparer Parses field's values as System.Byte (using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) and sorts by ascending value FieldComparer.DocComparer Sorts by ascending docID FieldComparer.DoubleComparer Parses field's values as System.Double (using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and sorts by ascending value FieldComparer.Int16Comparer Parses field's values as System.Int16 (using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and sorts by ascending value NOTE: This was ShortComparator in Lucene FieldComparer.Int32Comparer Parses field's values as System.Int32 (using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and sorts by ascending value NOTE: This was IntComparator in Lucene FieldComparer.Int64Comparer Parses field's values as System.Int64 (using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and sorts by ascending value NOTE: This was LongComparator in Lucene FieldComparer.NumericComparer<T> Base FieldComparer class for numeric types FieldComparer.RelevanceComparer Sorts by descending relevance. NOTE: if you are sorting only by descending relevance and then secondarily by ascending docID, performance is faster using TopScoreDocCollector directly (which all overloads of Search(Query, Int32) use when no Sort is specified). FieldComparer.SingleComparer Parses field's values as System.Single (using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and sorts by ascending value NOTE: This was FloatComparator in Lucene FieldComparer.TermOrdValComparer Sorts by field's natural Term sort order, using ordinals. This is functionally equivalent to FieldComparer.TermValComparer , but it first resolves the string to their relative ordinal positions (using the index returned by GetTermsIndex(AtomicReader, String, Single) ), and does most comparisons using the ordinals. For medium to large results, this comparer will be much faster than FieldComparer.TermValComparer . For very small result sets it may be slower. FieldComparer.TermValComparer Sorts by field's natural Term sort order. All comparisons are done using CompareTo(BytesRef) , which is slow for medium to large result sets but possibly very fast for very small results sets. FieldComparer<T> Expert: a FieldComparer compares hits so as to determine their sort order when collecting the top results with TopFieldCollector . The concrete public FieldComparer classes here correspond to the SortField types. This API is designed to achieve high performance sorting, by exposing a tight interaction with FieldValueHitQueue as it visits hits. Whenever a hit is competitive, it's enrolled into a virtual slot, which is an System.Int32 ranging from 0 to numHits-1. The FieldComparer is made aware of segment transitions during searching in case any internal state it's tracking needs to be recomputed during these transitions. A comparer must define these functions: Compare(Int32, Int32) Compare a hit at 'slot a' with hit 'slot b'. SetBottom(Int32) This method is called by FieldValueHitQueue to notify the FieldComparer of the current weakest (\"bottom\") slot. Note that this slot may not hold the weakest value according to your comparer, in cases where your comparer is not the primary one (ie, is only used to break ties from the comparers before it). CompareBottom(Int32) Compare a new hit (docID) against the \"weakest\" (bottom) entry in the queue. SetTopValue(Object) This method is called by TopFieldCollector to notify the FieldComparer of the top most value, which is used by future calls to CompareTop(Int32) . CompareTop(Int32) Compare a new hit (docID) against the top value previously set by a call to SetTopValue(Object) . Copy(Int32, Int32) Installs a new hit into the priority queue. The FieldValueHitQueue calls this method when a new hit is competitive. SetNextReader(AtomicReaderContext) Invoked when the search is switching to the next segment. You may need to update internal state of the comparer, for example retrieving new values from the IFieldCache . Item[Int32] Return the sort value stored in the specified slot. This is only called at the end of the search, in order to populate Fields when returning the top results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldComparerSource Provides a FieldComparer for custom field sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldDoc Expert: A ScoreDoc which also contains information about how to sort the referenced document. In addition to the document number and score, this object contains an array of values for the document from the field(s) used to sort. For example, if the sort criteria was to sort by fields \"a\", \"b\" then \"c\", the fields object array will have three elements, corresponding respectively to the term values for the document in fields \"a\", \"b\" and \"c\". The class of each element in the array will be either System.Int32 , System.Single or System.String depending on the type of values in the terms of each field. Created: Feb 11, 2004 1:23:38 PM @since lucene 1.4 FieldValueFilter A Filter that accepts all documents that have one or more values in a given field. this Filter request IBits from the IFieldCache and build the bits if not present. FieldValueHitQueue FieldValueHitQueue.Entry FieldValueHitQueue<T> Expert: A hit queue for sorting by hits by terms in more than one field. Uses FieldCache.DEFAULT for maintaining internal term lookup tables. This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 2.9 Filter Abstract base class for restricting which documents may be returned during searching. FilteredDocIdSet Abstract decorator class for a DocIdSet implementation that provides on-demand filtering/validation mechanism on a given DocIdSet . Technically, this same functionality could be achieved with ChainedFilter (under queries/), however the benefit of this class is it never materializes the full bitset for the filter. Instead, the Match(Int32) method is invoked on-demand, per docID visited during searching. If you know few docIDs will be visited, and the logic behind Match(Int32) is relatively costly, this may be a better way to filter than ChainedFilter. FilteredDocIdSetIterator Abstract decorator class of a DocIdSetIterator implementation that provides on-demand filter/validation mechanism on an underlying DocIdSetIterator . See DocIdSetIterator . FilteredQuery A query that applies a filter to the results of another query. Note: the bits are retrieved from the filter each time this query is used in a search - use a CachingWrapperFilter to avoid regenerating the bits every time. @since 1.4 FilteredQuery.FilterStrategy Abstract class that defines how the filter ( DocIdSet ) applied during document collection. FilteredQuery.RandomAccessFilterStrategy A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy . FuzzyQuery Implements the fuzzy search query. The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false to the transpositions parameter. this query uses MultiTermQuery.TopTermsScoringBooleanQueryRewrite as default. So terms will be collected and scored according to their edit distance. Only the top terms are used for building the BooleanQuery . It is not recommended to change the rewrite mode for fuzzy queries. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances (especially with transpositions enabled), are generally not useful and will match a significant amount of the term dictionary. If you really want this, consider using an n-gram indexing technique (such as the SpellChecker in the suggest module ) instead. NOTE: terms of length 1 or 2 will sometimes not match because of how the scaled distance between two terms is computed. For a term to match, the edit distance between the terms must be less than the minimum length term (either the input term, or the candidate term). For example, FuzzyQuery on term \"abcd\" with maxEdits=2 will not match an indexed term \"ab\", and FuzzyQuery on term \"a\" with maxEdits=2 will not match an indexed term \"abc\". FuzzyTermsEnum Subclass of TermsEnum for enumerating all terms that are similar to the specified filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. FuzzyTermsEnum.LevenshteinAutomataAttribute Stores compiled automata as a list (indexed by edit distance) This is a Lucene.NET INTERNAL API, use at your own risk IndexSearcher Implements search over a single IndexReader . Applications usually need only call the inherited Search(Query, Int32) or Search(Query, Filter, Int32) methods. For performance reasons, if your index is unchanging, you should share a single IndexSearcher instance across multiple searches instead of creating a new one per-search. If your index has changed and you wish to see the changes reflected in searching, you should use OpenIfChanged(DirectoryReader) to obtain a new reader and then create a new IndexSearcher from that. Also, for low-latency turnaround it's best to use a near-real-time reader ( Open(IndexWriter, Boolean) ). Once you have a new IndexReader , it's relatively cheap to create a new IndexSearcher from it. NOTE : IndexSearcher instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexSearcher instance; use your own (non-Lucene) objects instead. IndexSearcher.LeafSlice A class holding a subset of the IndexSearcher s leaf contexts to be executed within a single thread. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LiveFieldValues<S, T> Tracks live field values across NRT reader reopens. This holds a map for all updated ids since the last reader reopen. Once the NRT reader is reopened, it prunes the map. This means you must reopen your NRT reader periodically otherwise the RAM consumption of this class will grow unbounded! NOTE: you must ensure the same id is never updated at the same time by two threads, because in this case you cannot in general know which thread \"won\". MatchAllDocsQuery A query that matches all documents. MaxNonCompetitiveBoostAttribute Implementation class for IMaxNonCompetitiveBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk MultiCollector A ICollector which allows running a search with several ICollector s. It offers a static Wrap(ICollector[]) method which accepts a list of collectors and wraps them with MultiCollector , while filtering out the null ones. MultiPhraseQuery MultiPhraseQuery is a generalized version of PhraseQuery , with an added method Add(Term[]) . To use this class, to search for the phrase \"Microsoft app*\" first use Add(Term) on the term \"Microsoft\", then find all terms that have \"app\" as prefix using MultiFields.GetFields(IndexReader).GetTerms(string) , and use Add(Term[]) to add them to the query. Collection initializer note: To create and populate a MultiPhraseQuery in a single statement, you can use the following example as a guide: var multiPhraseQuery = new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) , Add(Term[]) , or Add(Term[], Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. MultiTermQuery An abstract Query that matches documents containing a subset of terms provided by a FilteredTermsEnum enumeration. This query cannot be used directly; you must subclass it and define GetTermsEnum(Terms, AttributeSource) to provide a FilteredTermsEnum that iterates through the terms to be matched. NOTE : if MultiTermRewriteMethod is either CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE or SCORING_BOOLEAN_QUERY_REWRITE , you may encounter a BooleanQuery.TooManyClausesException exception during searching, which happens when the number of terms to be searched exceeds MaxClauseCount . Setting MultiTermRewriteMethod to CONSTANT_SCORE_FILTER_REWRITE prevents this. The recommended rewrite method is CONSTANT_SCORE_AUTO_REWRITE_DEFAULT : it doesn't spend CPU computing unhelpful scores, and it tries to pick the most performant rewrite method given the query. If you need scoring (like , use MultiTermQuery.TopTermsScoringBooleanQueryRewrite which uses a priority queue to only collect competitive terms and not hit this limitation. Note that QueryParsers.Classic.QueryParser produces MultiTermQuery s using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT by default. MultiTermQuery.RewriteMethod Abstract class that defines how the query is rewritten. MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , but the scores are only computed as the boost. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. MultiTermQuery.TopTermsScoringBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. It is the default rewrite method for FuzzyQuery . MultiTermQueryWrapperFilter<Q> A wrapper for MultiTermQuery , that exposes its functionality as a Filter . MultiTermQueryWrapperFilter<Q> is not designed to be used by itself. Normally you subclass it to provide a Filter counterpart for a MultiTermQuery subclass. For example, TermRangeFilter and PrefixFilter extend MultiTermQueryWrapperFilter<Q> . This class also provides the functionality behind CONSTANT_SCORE_FILTER_REWRITE ; this is why it is not abstract. NGramPhraseQuery This is a PhraseQuery which is optimized for n-gram phrase query. For example, when you query \"ABCD\" on a 2-gram field, you may want to use NGramPhraseQuery rather than PhraseQuery , because NGramPhraseQuery will Rewrite(IndexReader) the query to \"AB/0 CD/2\", while PhraseQuery will query \"AB/0 BC/1 CD/2\" (where term/position). Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new NGramPhraseQuery(2) { new Term(\"field\", \"ABCD\"), new Term(\"field\", \"EFGH\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. NumericRangeFilter LUCENENET specific static class to provide access to static methods without referring to the NumericRangeFilter<T> 's generic closing type. NumericRangeFilter<T> A Filter that only accepts numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). You create a new NumericRangeFilter with the static factory methods, eg: Filter f = NumericRangeFilter.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); Accepts all documents whose float valued \"weight\" field ranges from 0.03 to 0.10, inclusive. See NumericRangeQuery for details on how Lucene indexes and searches numeric valued fields. @since 2.9 NumericRangeQuery LUCENENET specific class to provide access to static factory metods of NumericRangeQuery<T> without referring to its genereic closing type. NumericRangeQuery<T> A Query that matches numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). If your terms are instead textual, you should use TermRangeQuery . NumericRangeFilter is the filter equivalent of this query. You create a new NumericRangeQuery<T> with the static factory methods, eg: Query q = NumericRangeQuery.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); matches all documents whose System.Single valued \"weight\" field ranges from 0.03 to 0.10, inclusive. The performance of NumericRangeQuery<T> is much better than the corresponding TermRangeQuery because the number of terms that must be searched is usually far fewer, thanks to trie indexing, described below. You can optionally specify a Lucene.Net.Search.NumericRangeQuery`1.precisionStep when creating this query. This is necessary if you've changed this configuration from its default (4) during indexing. Lower values consume more disk space but speed up searching. Suitable values are between 1 and 8 . A good starting point to test is 4 , which is the default value for all Numeric* classes. See below for details. This query defaults to CONSTANT_SCORE_AUTO_REWRITE_DEFAULT . With precision steps of <=4, this query can be run with one of the BooleanQuery rewrite methods without changing BooleanQuery 's default max clause count. How it works See the publication about panFMP , where this algorithm was described (referred to as TrieRangeQuery ): Schindler, U, Diepenbroek, M , 2008. Generic XML-based Framework for Metadata Portals. Computers & Geosciences 34 (12), 1947-1955. doi:10.1016/j.cageo.2008.02.023 A quote from this paper: Because Apache Lucene is a full-text search engine and not a conventional database, it cannot handle numerical ranges (e.g., field value is inside user defined bounds, even dates are numerical values). We have developed an extension to Apache Lucene that stores the numerical values in a special string-encoded format with variable precision (all numerical values like System.Double s, System.Int64 s, System.Single s, and System.Int32 s are converted to lexicographic sortable string representations and stored with different precisions (for a more detailed description of how the values are stored, see NumericUtils ). A range is then divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie , while the boundaries are matched more exactly. This reduces the number of terms dramatically. For the variant that stores long values in 8 different precisions (each reduced by 8 bits) that uses a lowest precision of 1 byte, the index contains only a maximum of 256 distinct values in the lowest precision. Overall, a range could consist of a theoretical maximum of 7*255*2 + 255 = 3825 distinct terms (when there is a term for every distinct value of an 8-byte-number in the index and the range covers almost all of them; a maximum of 255 distinct values is used because it would always be possible to reduce the full 256 values to one term with degraded precision). In practice, we have seen up to 300 terms in most cases (index with 500,000 metadata records and a uniform value distribution). Precision Step You can choose any Lucene.Net.Search.NumericRangeQuery`1.precisionStep when encoding values. Lower step values mean more precisions and so more terms in index (and index gets larger). The number of indexed terms per value is (those are generated by NumericTokenStream ): indexedTermsPerValue = ceil ( bitsPerValue / precisionStep ) As the lower precision terms are shared by many values, the additional terms only slightly grow the term dictionary (approx. 7% for precisionStep=4 ), but have a larger impact on the postings (the postings file will have more entries, as every document is linked to indexedTermsPerValue terms instead of one). The formula to estimate the growth of the term dictionary in comparison to one term per value: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> On the other hand, if the Lucene.Net.Search.NumericRangeQuery`1.precisionStep is smaller, the maximum number of terms to match reduces, which optimizes query speed. The formula to calculate the maximum number of terms that will be visited while executing the query is: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> For longs stored using a precision step of 4, maxQueryTerms = 15 15 2 + 15 = 465 , and for a precision step of 2, maxQueryTerms = 31 3 2 + 3 = 189 . But the faster search speed is reduced by more seeking in the term enum of the index. Because of this, the ideal Lucene.Net.Search.NumericRangeQuery`1.precisionStep value can only be found out by testing. Important: You can index with a lower precision step value and test search speed using a multiple of the original step value. Good values for Lucene.Net.Search.NumericRangeQuery`1.precisionStep are depending on usage and data type: The default for all data types is 4 , which is used, when no precisionStep is given. Ideal value in most cases for 64 bit data types (long, double) is 6 or 8 . Ideal value in most cases for 32 bit data types (int, float) is 4 . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue (see below). Steps >=64 for long/double and >=32 for int/float produces one token per value in the index and querying is as slow as a conventional TermRangeQuery . But it can be used to produce fields, that are solely used for sorting (in this case simply use System.Int32.MaxValue as Lucene.Net.Search.NumericRangeQuery`1.precisionStep ). Using Int32Field , Int64Field , SingleField or DoubleField for sorting is ideal, because building the field cache is much faster than with text-only numbers. These fields have one term per value and therefore also work with term enumeration for building distinct lists (e.g. facets / preselected values to search for). Sorting is also possible with range query optimized fields using one of the above Lucene.Net.Search.NumericRangeQuery`1.precisionStep s. Comparisons of the different types of RangeQueries on an index with about 500,000 docs showed that TermRangeQuery in boolean rewrite mode (with raised BooleanQuery clause count) took about 30-40 secs to complete, TermRangeQuery in constant score filter rewrite mode took 5 secs and executing this class took <100ms to complete (on an Opteron64 machine, Java 1.5, 8 bit precision step). This query type was developed for a geographic portal, where the performance for e.g. bounding boxes or exact date/time stamps is important. @since 2.9 PhraseQuery A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by QueryParser for input like \"new york\" . This query may be combined with other terms or queries with a BooleanQuery . Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new PhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. PositiveScoresOnlyCollector A ICollector implementation which wraps another ICollector and makes sure only documents with scores > 0 are collected. PrefixFilter A Filter that restricts search results to values that have a matching prefix in a given field. PrefixQuery A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by QueryParser for input like app* . This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. PrefixTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified prefix filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Query The abstract base class for queries. Instantiable subclasses are: TermQuery BooleanQuery WildcardQuery PhraseQuery PrefixQuery MultiPhraseQuery FuzzyQuery RegexpQuery TermRangeQuery NumericRangeQuery ConstantScoreQuery DisjunctionMaxQuery MatchAllDocsQuery See also the family of Span Queries ( Lucene.Net.Search.Spans ) and additional queries available in the Queries module QueryRescorer A Rescorer that uses a provided Query to assign scores to the first-pass hits. This is a Lucene.NET EXPERIMENTAL API, use at your own risk QueryWrapperFilter Constrains search results to only match those which also match a provided query. This could be used, for example, with a NumericRangeQuery on a suitably formatted date field to implement date filtering. One could re-use a single CachingWrapperFilter(QueryWrapperFilter) that matches, e.g., only documents modified within the last week. This would only need to be reconstructed once per day. ReferenceContext<T> ReferenceContext<T> holds a reference instance and ensures it is properly de-referenced from its corresponding ReferenceManager<G> when Dispose() is called. This class is primarily intended to be used with a using block. LUCENENET specific ReferenceManager LUCENENET specific class used to provide static access to ReferenceManager.IRefreshListener without having to specifiy the generic closing type of ReferenceManager<G> . ReferenceManager<G> Utility class to safely share instances of a certain type across multiple threads, while periodically refreshing them. This class ensures each reference is closed only once all threads have finished using it. It is recommended to consult the documentation of ReferenceManager<G> implementations for their MaybeRefresh() semantics. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ReferenceManagerExtensions RegexpQuery A fast regular expression query based on the Lucene.Net.Util.Automaton package. Comparisons are fast The term dictionary is enumerated in an intelligent way, to avoid comparisons. See AutomatonQuery for more details. The supported syntax is documented in the RegExp class. Note this might be different than other regular expression implementations. For some alternatives with different syntax, look under the sandbox. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow RegexpQuery s, a RegExp term should not start with the expression .* This is a Lucene.NET EXPERIMENTAL API, use at your own risk Rescorer Re-scores the topN results ( TopDocs ) from an original query. See QueryRescorer for an actual implementation. Typically, you run a low-cost first-pass query across the entire index, collecting the top few hundred hits perhaps, and then use this class to mix in a more costly second pass scoring. See Rescore(IndexSearcher, TopDocs, Query, Double, Int32) for a simple static method to call to rescore using a 2nd pass Query . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ScoreCachingWrappingScorer A Scorer which wraps another scorer and caches the score of the current document. Successive calls to GetScore() will return the same result and will not invoke the wrapped Scorer's GetScore() method, unless the current document has changed. This class might be useful due to the changes done to the ICollector interface, in which the score is not computed for a document by default, only if the collector requests it. Some collectors may need to use the score in several places, however all they have in hand is a Scorer object, and might end up computing the score of a document more than once. ScoreDoc Holds one hit in TopDocs . Scorer Expert: Common scoring functionality for different types of queries. A Scorer iterates over documents matching a query in increasing order of doc Id. Document scores are computed using a given Similarity implementation. NOTE : The values System.Single.NaN , System.Single.NegativeInfinity and System.Single.PositiveInfinity are not valid scores. Certain collectors (eg TopScoreDocCollector ) will not properly collect hits with these scores. Scorer.ChildScorer A child Scorer and its relationship to its parent. The meaning of the relationship depends upon the parent query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ScoringRewrite<Q> Base rewrite method that translates each term into a query, and keeps the scores as computed by the query. This is a Lucene.NET INTERNAL API, use at your own risk Only public to be accessible by spans package. SearcherFactory Factory class used by SearcherManager to create new IndexSearcher s. The default implementation just creates an IndexSearcher with no custom behavior: public IndexSearcher NewSearcher(IndexReader r) { return new IndexSearcher(r); } You can pass your own factory instead if you want custom behavior, such as: Setting a custom scoring model: Similarity Parallel per-segment search: IndexSearcher(IndexReader, TaskScheduler) Return custom subclasses of IndexSearcher (for example that implement distributed scoring) Run queries to warm your IndexSearcher before it is used. Note: when using near-realtime search you may want to also set MergedSegmentWarmer to warm newly merged segments in the background, outside of the reopen path. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SearcherLifetimeManager Keeps track of current plus old IndexSearcher s, disposing the old ones once they have timed out. Use it like this: SearcherLifetimeManager mgr = new SearcherLifetimeManager(); Per search-request, if it's a \"new\" search request, then obtain the latest searcher you have (for example, by using SearcherManager ), and then record this searcher: // Record the current searcher, and save the returend // token into user's search results (eg as a hidden // HTML form field): long token = mgr.Record(searcher); When a follow-up search arrives, for example the user clicks next page, drills down/up, etc., take the token that you saved from the previous search and: // If possible, obtain the same searcher as the last // search: IndexSearcher searcher = mgr.Acquire(token); if (searcher != null) { // Searcher is still here try { // do searching... } finally { mgr.Release(searcher); // Do not use searcher after this! searcher = null; } } else { // Searcher was pruned -- notify user session timed // out, or, pull fresh searcher again } Finally, in a separate thread, ideally the same thread that's periodically reopening your searchers, you should periodically prune old searchers: mgr.Prune(new PruneByAge(600.0)); NOTE : keeping many searchers around means you'll use more resources (open files, RAM) than a single searcher. However, as long as you are using OpenIfChanged(DirectoryReader) , the searchers will usually share almost all segments and the added resource usage is contained. When a large merge has completed, and you reopen, because that is a large change, the new searcher will use higher additional RAM than other searchers; but large merges don't complete very often and it's unlikely you'll hit two of them in your expiration window. Still you should budget plenty of heap in the runtime to have a good safety margin. SearcherLifetimeManager.PruneByAge Simple pruner that drops any searcher older by more than the specified seconds, than the newest searcher. SearcherManager Utility class to safely share IndexSearcher instances across multiple threads, while periodically reopening. This class ensures each searcher is disposed only once all threads have finished using it. Use Acquire() to obtain the current searcher, and Release(G) to release it, like this: IndexSearcher s = manager.Acquire(); try { // Do searching, doc retrieval, etc. with s } finally { manager.Release(s); // Do not use s after this! s = null; } In addition you should periodically call MaybeRefresh() . While it's possible to call this just before running each query, this is discouraged since it penalizes the unlucky queries that do the reopen. It's better to use a separate background thread, that periodically calls MaybeRefresh() . Finally, be sure to call Dispose() once you are done. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Sort Encapsulates sort criteria for returned hits. The fields used to determine sort order must be carefully chosen. Document s must contain a single term in such a field, and the value of the term should indicate the document's relative position in a given sort order. The field must be indexed, but should not be tokenized, and does not need to be stored (unless you happen to want it back with the rest of your document data). In other words: document.Add(new Field(\"byNumber\", x.ToString(CultureInfo.InvariantCulture), Field.Store.NO, Field.Index.NOT_ANALYZED)); Valid Types of Values There are four possible kinds of term values which may be put into sorting fields: System.Int32 s, System.Int64 s, System.Single s, or System.String s. Unless SortField objects are specified, the type of value in the field is determined by parsing the first term in the field. System.Int32 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int32.MinValue and System.Int32.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values (i.e. the documents should be numbered 1..n where 1 is the first and n the last). System.Int64 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int64.MinValue and System.Int64.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values. System.Single term values should conform to values accepted by System.Single (except that NaN and Infinity are not supported). Document s which should appear first in the sort should have low values, later documents high values. System.String term values can contain any valid System.String , but should not be tokenized. The values are sorted according to their comparable natural order ( System.StringComparer.Ordinal ). Note that using this type of term value has higher memory requirements than the other two types. Object Reuse One of these objects can be used multiple times and the sort order changed between usages. This class is thread safe. Memory Usage Sorting uses of caches of term values maintained by the internal HitQueue(s). The cache is static and contains an System.Int32 or System.Single array of length IndexReader.MaxDoc for each field name for which a sort is performed. In other words, the size of the cache in bytes is: 4 * IndexReader.MaxDoc * (# of different fields actually used to sort) For System.String fields, the cache is larger: in addition to the above array, the value of every term in the field is kept in memory. If there are many unique terms in the field, this could be quite large. Note that the size of the cache is not affected by how many fields are in the index and might be used to sort - only by the ones actually used to sort a result set. Created: Feb 12, 2004 10:53:57 AM @since lucene 1.4 SortField Stores information about how to sort documents by terms in an individual field. Fields must be indexed in order to sort by them. Created: Feb 11, 2004 1:25:29 PM @since lucene 1.4 SortRescorer A Rescorer that re-sorts according to a provided Sort. TermCollectingRewrite<Q> TermQuery A Query that matches documents containing a term. this may be combined with other terms with a BooleanQuery . TermRangeFilter A Filter that restricts search results to a range of term values in a given field. This filter matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) , It is not intended for numerical ranges; use NumericRangeFilter instead. If you construct a large number of range filters with different ranges but on the same field, FieldCacheRangeFilter may have significantly better performance. @since 2.9 TermRangeQuery A Query that matches documents within an range of terms. This query matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) . It is not intended for numerical ranges; use NumericRangeQuery instead. This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. @since 2.9 TermRangeTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified range parameters. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. TermStatistics Contains statistics for a specific term This is a Lucene.NET EXPERIMENTAL API, use at your own risk TimeLimitingCollector The TimeLimitingCollector is used to timeout search requests that take longer than the maximum allowed search time limit. After this time is exceeded, the search thread is stopped by throwing a TimeLimitingCollector.TimeExceededException . TimeLimitingCollector.TimeExceededException Thrown when elapsed search time exceeds allowed search time. TimeLimitingCollector.TimerThread Thread used to timeout search requests. Can be stopped completely with StopTimer() This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopDocs Represents hits returned by Search(Query, Filter, Int32) and Search(Query, Int32) . TopDocsCollector<T> A base class for all collectors that return a TopDocs output. This collector allows easy extension by providing a single constructor which accepts a PriorityQueue<T> as well as protected members for that priority queue and a counter of the number of total hits. Extending classes can override any of the methods to provide their own implementation, as well as avoid the use of the priority queue entirely by passing null to TopDocsCollector(PriorityQueue<T>) . In that case however, you might want to consider overriding all methods, in order to avoid a System.NullReferenceException . TopFieldCollector A ICollector that sorts by SortField using FieldComparer s. See the Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) method for instantiating a TopFieldCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopFieldDocs Represents hits returned by Search(Query, Filter, Int32, Sort) . TopScoreDocCollector A ICollector implementation that collects the top-scoring hits, returning them as a TopDocs . this is used by IndexSearcher to implement TopDocs -based search. Hits are sorted by score descending and then (when the scores are tied) docID ascending. When you create an instance of this collector you should know in advance whether documents are going to be collected in doc Id order or not. NOTE : The values System.Single.NaN and System.Single.NegativeInfinity are not valid scores. This collector will not properly collect hits with such scores. TopTermsRewrite<Q> Base rewrite method for collecting only the top terms via a priority queue. This is a Lucene.NET INTERNAL API, use at your own risk Only public to be accessible by spans package. TotalHitCountCollector Just counts the total number of hits. Weight Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching does not modify a Query , so that a Query instance can be reused. IndexSearcher dependent state of the query should reside in the Weight . AtomicReader dependent state should reside in the Scorer . Since Weight creates Scorer instances for a given AtomicReaderContext ( GetScorer(AtomicReaderContext, IBits) ) callers must maintain the relationship between the searcher's top-level IndexReaderContext and the context used to create a Scorer . A Weight is used in the following way: A Weight is constructed by a top-level query, given a IndexSearcher ( CreateWeight(IndexSearcher) ). The GetValueForNormalization() method is called on the Weight to compute the query normalization factor QueryNorm(Single) of the query clauses contained in the query. The query normalization factor is passed to Normalize(Single, Single) . At this point the weighting is complete. A Scorer is constructed by GetScorer(AtomicReaderContext, IBits) . @since 2.9 WildcardQuery Implements the wildcard search query. Supported wildcards are , which matches any character sequence (including the empty one), and ? , which matches any single character. '&apos; is the escape character. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, a Wildcard term should not start with the wildcard This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Interfaces FieldCache.IByteParser Interface to parse bytes from document fields. FieldCache.IDoubleParser Interface to parse System.Double s from document fields. FieldCache.IInt16Parser Interface to parse System.Int16 s from document fields. NOTE: This was ShortParser in Lucene FieldCache.IInt32Parser Interface to parse System.Int32 s from document fields. NOTE: This was IntParser in Lucene FieldCache.IInt64Parser Interface to parse System.Int64 from document fields. NOTE: This was LongParser in Lucene FieldCache.IParser Marker interface as super-interface to all parsers. It is used to specify a custom parser to SortField(String, FieldCache.IParser) . FieldCache.ISingleParser Interface to parse System.Single s from document fields. NOTE: This was FloatParser in Lucene FuzzyTermsEnum.ILevenshteinAutomataAttribute Reuses compiled automata across different segments, because they are independent of the index This is a Lucene.NET INTERNAL API, use at your own risk IBoostAttribute Add this IAttribute to a TermsEnum returned by GetTermsEnum(Terms, AttributeSource) and update the boost on each returned term. This enables to control the boost factor for each matching term in SCORING_BOOLEAN_QUERY_REWRITE or TopTermsRewrite<Q> mode. FuzzyQuery is using this to take the edit distance into account. Please note: this attribute is intended to be added only by the TermsEnum to itself in its constructor and consumed by the MultiTermQuery.RewriteMethod . This is a Lucene.NET INTERNAL API, use at your own risk ICollector Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. Lucene's core collectors are derived from Collector. Likely your application can use one of these classes, or subclass TopDocsCollector<T> , instead of implementing ICollector directly: TopDocsCollector<T> is an abstract base class that assumes you will retrieve the top N docs, according to some criteria, after collection is done. TopScoreDocCollector is a concrete subclass TopDocsCollector<T> and sorts according to score + docID. This is used internally by the IndexSearcher search methods that do not take an explicit Sort . It is likely the most frequently used collector. TopFieldCollector subclasses TopDocsCollector<T> and sorts according to a specified Sort object (sort by field). This is used internally by the IndexSearcher search methods that take an explicit Sort . TimeLimitingCollector , which wraps any other Collector and aborts the search if it's taken too much time. PositiveScoresOnlyCollector wraps any other ICollector and prevents collection of hits whose score is <= 0.0 ICollector decouples the score from the collected doc: the score computation is skipped entirely if it's not needed. Collectors that do need the score should implement the SetScorer(Scorer) method, to hold onto the passed Scorer instance, and call GetScore() within the collect method to compute the current hit's score. If your collector may request the score for a single hit multiple times, you should use ScoreCachingWrappingScorer . NOTE: The doc that is passed to the collect method is relative to the current reader. If your collector needs to resolve this to the docID space of the Multi*Reader, you must re-base it by recording the docBase from the most recent SetNextReader(AtomicReaderContext) call. Here's a simple example showing how to collect docIDs into an OpenBitSet : private class MySearchCollector : ICollector { private readonly OpenBitSet bits; private int docBase; public MySearchCollector(OpenBitSet bits) { if (bits == null) throw new ArgumentNullException(\"bits\"); this.bits = bits; } // ignore scorer public void SetScorer(Scorer scorer) { } // accept docs out of order (for a BitSet it doesn't matter) public bool AcceptDocsOutOfOrder { get { return true; } } public void Collect(int doc) { bits.Set(doc + docBase); } public void SetNextReader(AtomicReaderContext context) { this.docBase = context.DocBase; } } IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); searcher.Search(query, new MySearchCollector(bits)); Not all collectors will need to rebase the docID. For example, a collector that simply counts the total number of hits would skip it. NOTE: Prior to 2.9, Lucene silently filtered out hits with score <= 0. As of 2.9, the core ICollector s no longer do that. It's very unusual to have such hits (a negative query boost, or function query returning negative custom scores, could cause it to happen). If you need that behavior, use PositiveScoresOnlyCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 2.9 IFieldCache Expert: Maintains caches of term values. Created: May 19, 2004 11:13:14 AM This is a Lucene.NET INTERNAL API, use at your own risk @since lucene 1.4 IMaxNonCompetitiveBoostAttribute Add this IAttribute to a fresh AttributeSource before calling GetTermsEnum(Terms, AttributeSource) . FuzzyQuery is using this to control its internal behaviour to only return competitive terms. Please note: this attribute is intended to be added by the MultiTermQuery.RewriteMethod to an empty AttributeSource that is shared for all segments during query rewrite. This attribute source is passed to all segment enums on GetTermsEnum(Terms, AttributeSource) . TopTermsRewrite<Q> uses this attribute to inform all enums about the current boost, that is not competitive. This is a Lucene.NET INTERNAL API, use at your own risk ITopDocsCollector LUCENENET specific interface used to reference TopDocsCollector<T> without referencing its generic type. ReferenceManager.IRefreshListener Use to receive notification when a refresh has finished. See AddListener(ReferenceManager.IRefreshListener) . SearcherLifetimeManager.IPruner See Prune(SearcherLifetimeManager.IPruner) . Enums Occur Specifies how clauses are to occur in matching documents. SortFieldType Specifies the type of the terms to be sorted, or special types such as CUSTOM"
  },
  "api/Lucene.Net/Lucene.Net.Search.IBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IBoostAttribute.html",
    "title": "Interface IBoostAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IBoostAttribute Add this IAttribute to a TermsEnum returned by GetTermsEnum(Terms, AttributeSource) and update the boost on each returned term. This enables to control the boost factor for each matching term in SCORING_BOOLEAN_QUERY_REWRITE or TopTermsRewrite<Q> mode. FuzzyQuery is using this to take the edit distance into account. Please note: this attribute is intended to be added only by the TermsEnum to itself in its constructor and consumed by the MultiTermQuery.RewriteMethod . This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IBoostAttribute : IAttribute Properties | Improve this Doc View Source Boost Gets or Sets the boost in this attribute. Default is 1.0f . Declaration float Boost { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.ICollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ICollector.html",
    "title": "Interface ICollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ICollector Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. Lucene's core collectors are derived from Collector. Likely your application can use one of these classes, or subclass TopDocsCollector<T> , instead of implementing ICollector directly: TopDocsCollector<T> is an abstract base class that assumes you will retrieve the top N docs, according to some criteria, after collection is done. TopScoreDocCollector is a concrete subclass TopDocsCollector<T> and sorts according to score + docID. This is used internally by the IndexSearcher search methods that do not take an explicit Sort . It is likely the most frequently used collector. TopFieldCollector subclasses TopDocsCollector<T> and sorts according to a specified Sort object (sort by field). This is used internally by the IndexSearcher search methods that take an explicit Sort . TimeLimitingCollector , which wraps any other Collector and aborts the search if it's taken too much time. PositiveScoresOnlyCollector wraps any other ICollector and prevents collection of hits whose score is <= 0.0 ICollector decouples the score from the collected doc: the score computation is skipped entirely if it's not needed. Collectors that do need the score should implement the SetScorer(Scorer) method, to hold onto the passed Scorer instance, and call GetScore() within the collect method to compute the current hit's score. If your collector may request the score for a single hit multiple times, you should use ScoreCachingWrappingScorer . NOTE: The doc that is passed to the collect method is relative to the current reader. If your collector needs to resolve this to the docID space of the Multi*Reader, you must re-base it by recording the docBase from the most recent SetNextReader(AtomicReaderContext) call. Here's a simple example showing how to collect docIDs into an OpenBitSet : private class MySearchCollector : ICollector { private readonly OpenBitSet bits; private int docBase; public MySearchCollector(OpenBitSet bits) { if (bits == null) throw new ArgumentNullException(\"bits\"); this.bits = bits; } // ignore scorer public void SetScorer(Scorer scorer) { } // accept docs out of order (for a BitSet it doesn't matter) public bool AcceptDocsOutOfOrder { get { return true; } } public void Collect(int doc) { bits.Set(doc + docBase); } public void SetNextReader(AtomicReaderContext context) { this.docBase = context.DocBase; } } IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); searcher.Search(query, new MySearchCollector(bits)); Not all collectors will need to rebase the docID. For example, a collector that simply counts the total number of hits would skip it. NOTE: Prior to 2.9, Lucene silently filtered out hits with score <= 0. As of 2.9, the core ICollector s no longer do that. It's very unusual to have such hits (a negative query boost, or function query returning negative custom scores, could cause it to happen). If you need that behavior, use PositiveScoresOnlyCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk @since 2.9 Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to Collect(Int32) ), should save the passed-in Scorer and call scorer.GetScore() when needed. Declaration void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer"
  },
  "api/Lucene.Net/Lucene.Net.Search.IFieldCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IFieldCache.html",
    "title": "Interface IFieldCache | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IFieldCache Expert: Maintains caches of term values. Created: May 19, 2004 11:13:14 AM This is a Lucene.NET INTERNAL API, use at your own risk @since lucene 1.4 Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IFieldCache Properties | Improve this Doc View Source InfoStream If non-null, Lucene.Net.Search.FieldCacheImpl will warn whenever entries are created that are not sane according to FieldCacheSanityChecker . Declaration TextWriter InfoStream { get; set; } Property Value Type Description System.IO.TextWriter Methods | Improve this Doc View Source GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as bytes and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Bytes GetBytes(AtomicReader reader, string field, FieldCache.IByteParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Byte s. FieldCache.IByteParser parser Computes System.Byte for string values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Bytes The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetBytes(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as a single System.Byte and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Bytes GetBytes(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the single System.Byte values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Bytes The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetCacheEntries() EXPERT: Generates an array of FieldCache.CacheEntry objects representing all items currently in the IFieldCache . NOTE: These FieldCache.CacheEntry objects maintain a strong reference to the Cached Values. Maintaining references to a FieldCache.CacheEntry the AtomicReader associated with it has garbage collected will prevent the Value itself from being garbage collected when the Cache drops the System.WeakReference . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration FieldCache.CacheEntry[] GetCacheEntries() Returns Type Description FieldCache.CacheEntry [] | Improve this Doc View Source GetDocsWithField(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field and returns a bit set at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field. Declaration IBits GetDocsWithField(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader System.String field Returns Type Description IBits | Improve this Doc View Source GetDocTermOrds(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a SortedSetDocValues instance, providing a method to retrieve the terms (as ords) per document. Declaration SortedSetDocValues GetDocTermOrds(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader Used to build a SortedSetDocValues instance System.String field Which field contains the strings. Returns Type Description SortedSetDocValues a SortedSetDocValues instance Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) Returns a FieldCache.Doubles over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Double s and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration FieldCache.Doubles GetDoubles(AtomicReader reader, string field, FieldCache.IDoubleParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Double s. FieldCache.IDoubleParser parser Computes System.Double for string values. May be null if the requested field was indexed as NumericDocValuesField or DoubleField . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Doubles The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetDoubles(AtomicReader, String, Boolean) Returns a FieldCache.Doubles over the values found in documents in the given field. Declaration FieldCache.Doubles GetDoubles(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Doubles See Also GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) | Improve this Doc View Source GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as shorts and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getShorts() in Lucene Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Int16s GetInt16s(AtomicReader reader, string field, FieldCache.IInt16Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int16 s. FieldCache.IInt16Parser parser Computes System.Int16 for string values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int16s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt16s(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Int16 s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getShorts() in Lucene Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Int16s GetInt16s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int16 s. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int16s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) Returns an FieldCache.Int32s over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Int32 s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getInts() in Lucene Declaration FieldCache.Int32s GetInt32s(AtomicReader reader, string field, FieldCache.IInt32Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int32 s. FieldCache.IInt32Parser parser Computes System.Int32 for string values. May be null if the requested field was indexed as NumericDocValuesField or Int32Field . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int32s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt32s(AtomicReader, String, Boolean) Returns an FieldCache.Int32s over the values found in documents in the given field. NOTE: this was getInts() in Lucene Declaration FieldCache.Int32s GetInt32s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Int32s See Also GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) | Improve this Doc View Source GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) Returns a FieldCache.Int64s over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Int64 s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getLongs() in Lucene Declaration FieldCache.Int64s GetInt64s(AtomicReader reader, string field, FieldCache.IInt64Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int64 s. FieldCache.IInt64Parser parser Computes System.Int64 for string values. May be null if the requested field was indexed as NumericDocValuesField or Int64Field . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int64s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt64s(AtomicReader, String, Boolean) Returns a FieldCache.Int64s over the values found in documents in the given field. NOTE: this was getLongs() in Lucene Declaration FieldCache.Int64s GetInt64s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Int64s See Also GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) | Improve this Doc View Source GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) Returns a FieldCache.Singles over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Single s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getFloats() in Lucene Declaration FieldCache.Singles GetSingles(AtomicReader reader, string field, FieldCache.ISingleParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Single s. FieldCache.ISingleParser parser Computes System.Single for string values. May be null if the requested field was indexed as NumericDocValuesField or SingleField . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Singles The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetSingles(AtomicReader, String, Boolean) Returns a FieldCache.Singles over the values found in documents in the given field. NOTE: this was getFloats() in Lucene Declaration FieldCache.Singles GetSingles(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Singles See Also GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) | Improve this Doc View Source GetTerms(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a BinaryDocValues instance, providing a method to retrieve the term (as a BytesRef ) per document. Declaration BinaryDocValues GetTerms(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the strings. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description BinaryDocValues The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetTerms(AtomicReader, String, Boolean, Single) Expert: just like GetTerms(AtomicReader, String, Boolean) , but you can specify whether more RAM should be consumed in exchange for faster lookups (default is \"true\"). Note that the first call for a given reader and field \"wins\", subsequent calls will share the same cache entry. Declaration BinaryDocValues GetTerms(AtomicReader reader, string field, bool setDocsWithField, float acceptableOverheadRatio) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField System.Single acceptableOverheadRatio Returns Type Description BinaryDocValues | Improve this Doc View Source GetTermsIndex(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a SortedDocValues instance, providing methods to retrieve sort ordinals and terms (as a BytesRef ) per document. Declaration SortedDocValues GetTermsIndex(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the strings. Returns Type Description SortedDocValues The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetTermsIndex(AtomicReader, String, Single) Expert: just like GetTermsIndex(AtomicReader, String) , but you can specify whether more RAM should be consumed in exchange for faster lookups (default is \"true\"). Note that the first call for a given reader and field \"wins\", subsequent calls will share the same cache entry. Declaration SortedDocValues GetTermsIndex(AtomicReader reader, string field, float acceptableOverheadRatio) Parameters Type Name Description AtomicReader reader System.String field System.Single acceptableOverheadRatio Returns Type Description SortedDocValues | Improve this Doc View Source PurgeAllCaches() EXPERT: Instructs the FieldCache to forcibly expunge all entries from the underlying caches. This is intended only to be used for test methods as a way to ensure a known base state of the Cache (with out needing to rely on GC to free System.WeakReference s). It should not be relied on for \"Cache maintenance\" in general application code. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration void PurgeAllCaches() | Improve this Doc View Source PurgeByCacheKey(Object) Expert: drops all cache entries associated with this reader CoreCacheKey . NOTE: this cache key must precisely match the reader that the cache entry is keyed on. If you pass a top-level reader, it usually will have no effect as Lucene now caches at the segment reader level. Declaration void PurgeByCacheKey(object coreCacheKey) Parameters Type Name Description System.Object coreCacheKey See Also FieldCacheSanityChecker"
  },
  "api/Lucene.Net/Lucene.Net.Search.IMaxNonCompetitiveBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IMaxNonCompetitiveBoostAttribute.html",
    "title": "Interface IMaxNonCompetitiveBoostAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IMaxNonCompetitiveBoostAttribute Add this IAttribute to a fresh AttributeSource before calling GetTermsEnum(Terms, AttributeSource) . FuzzyQuery is using this to control its internal behaviour to only return competitive terms. Please note: this attribute is intended to be added by the MultiTermQuery.RewriteMethod to an empty AttributeSource that is shared for all segments during query rewrite. This attribute source is passed to all segment enums on GetTermsEnum(Terms, AttributeSource) . TopTermsRewrite<Q> uses this attribute to inform all enums about the current boost, that is not competitive. This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IMaxNonCompetitiveBoostAttribute : IAttribute Properties | Improve this Doc View Source CompetitiveTerm This is the term or null of the term that triggered the boost change. Declaration BytesRef CompetitiveTerm { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source MaxNonCompetitiveBoost This is the maximum boost that would not be competitive. Declaration float MaxNonCompetitiveBoost { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.html",
    "title": "Class IndexSearcher | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexSearcher Implements search over a single IndexReader . Applications usually need only call the inherited Search(Query, Int32) or Search(Query, Filter, Int32) methods. For performance reasons, if your index is unchanging, you should share a single IndexSearcher instance across multiple searches instead of creating a new one per-search. If your index has changed and you wish to see the changes reflected in searching, you should use OpenIfChanged(DirectoryReader) to obtain a new reader and then create a new IndexSearcher from that. Also, for low-latency turnaround it's best to use a near-real-time reader ( Open(IndexWriter, Boolean) ). Once you have a new IndexReader , it's relatively cheap to create a new IndexSearcher from it. NOTE : IndexSearcher instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexSearcher instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexSearcher 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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class IndexSearcher Constructors | Improve this Doc View Source IndexSearcher(IndexReader) Creates a searcher searching the provided index. Declaration public IndexSearcher(IndexReader r) Parameters Type Name Description IndexReader r | Improve this Doc View Source IndexSearcher(IndexReader, TaskScheduler) Runs searches for each segment separately, using the provided System.Threading.Tasks.TaskScheduler . IndexSearcher will not shutdown/awaitTermination this System.Threading.Tasks.TaskScheduler on dispose; you must do so, eventually, on your own. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public IndexSearcher(IndexReader r, TaskScheduler executor) Parameters Type Name Description IndexReader r System.Threading.Tasks.TaskScheduler executor | Improve this Doc View Source IndexSearcher(IndexReaderContext) Creates a searcher searching the provided top-level IndexReaderContext . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public IndexSearcher(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context See Also IndexReaderContext Context | Improve this Doc View Source IndexSearcher(IndexReaderContext, TaskScheduler) Creates a searcher searching the provided top-level IndexReaderContext . Given a non- null System.Threading.Tasks.TaskScheduler this method runs searches for each segment separately, using the provided System.Threading.Tasks.TaskScheduler . IndexSearcher will not shutdown/awaitTermination this System.Threading.Tasks.TaskScheduler on close; you must do so, eventually, on your own. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public IndexSearcher(IndexReaderContext context, TaskScheduler executor) Parameters Type Name Description IndexReaderContext context System.Threading.Tasks.TaskScheduler executor See Also IndexReaderContext Context Fields | Improve this Doc View Source m_leafContexts Declaration protected readonly IList<AtomicReaderContext> m_leafContexts Field Value Type Description System.Collections.Generic.IList < AtomicReaderContext > | Improve this Doc View Source m_leafSlices Used with executor - each slice holds a set of leafs executed within one thread Declaration protected readonly IndexSearcher.LeafSlice[] m_leafSlices Field Value Type Description IndexSearcher.LeafSlice [] | Improve this Doc View Source m_readerContext Declaration protected readonly IndexReaderContext m_readerContext Field Value Type Description IndexReaderContext Properties | Improve this Doc View Source DefaultSimilarity Expert: returns a default Similarity instance. In general, this method is only called to initialize searchers and writers. User code and query implementations should respect Similarity . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static Similarity DefaultSimilarity { get; } Property Value Type Description Similarity | Improve this Doc View Source IndexReader Return the IndexReader this searches. Declaration public virtual IndexReader IndexReader { get; } Property Value Type Description IndexReader | Improve this Doc View Source Similarity Expert: Set the Similarity implementation used by this IndexSearcher. Declaration public virtual Similarity Similarity { get; set; } Property Value Type Description Similarity | Improve this Doc View Source TopReaderContext Returns this searchers the top-level IndexReaderContext . Declaration public virtual IndexReaderContext TopReaderContext { get; } Property Value Type Description IndexReaderContext See Also Context Methods | Improve this Doc View Source CollectionStatistics(String) Returns CollectionStatistics for a field. This can be overridden for example, to return a field's statistics across a distributed collection. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual CollectionStatistics CollectionStatistics(string field) Parameters Type Name Description System.String field Returns Type Description CollectionStatistics | Improve this Doc View Source CreateNormalizedWeight(Query) Creates a normalized weight for a top-level Query . The query is rewritten by this method and CreateWeight(IndexSearcher) called, afterwards the Weight is normalized. The returned Weight can then directly be used to get a Scorer . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual Weight CreateNormalizedWeight(Query query) Parameters Type Name Description Query query Returns Type Description Weight | Improve this Doc View Source Doc(Int32) Sugar for .IndexReader.Document(docID) Declaration public virtual Document Doc(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Document See Also Document ( System.Int32 ) | Improve this Doc View Source Doc(Int32, StoredFieldVisitor) Sugar for .IndexReader.Document(docID, fieldVisitor) Declaration public virtual void Doc(int docID, StoredFieldVisitor fieldVisitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor fieldVisitor See Also Document ( System.Int32 , StoredFieldVisitor ) | Improve this Doc View Source Doc(Int32, ISet<String>) Sugar for .IndexReader.Document(docID, fieldsToLoad) Declaration public virtual Document Doc(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID System.Collections.Generic.ISet < System.String > fieldsToLoad Returns Type Description Document See Also Document ( System.Int32 , System.Collections.Generic.ISet < System.String >) | Improve this Doc View Source Document(Int32, ISet<String>) Declaration [Obsolete(\"Use <seealso cref=#doc(int, java.util.Set)/> instead.\")] public Document Document(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID System.Collections.Generic.ISet < System.String > fieldsToLoad Returns Type Description Document | Improve this Doc View Source Explain(Query, Int32) Returns an Explanation that describes how doc scored against query . This is intended to be used in developing Similarity implementations, and, for good performance, should not be displayed with every hit. Computing an explanation is as expensive as executing the query over the entire index. Declaration public virtual Explanation Explain(Query query, int doc) Parameters Type Name Description Query query System.Int32 doc Returns Type Description Explanation | Improve this Doc View Source Explain(Weight, Int32) Expert: low-level implementation method Returns an Explanation that describes how doc scored against weight . This is intended to be used in developing Similarity implementations, and, for good performance, should not be displayed with every hit. Computing an explanation is as expensive as executing the query over the entire index. Applications should call Explain(Query, Int32) . Declaration protected virtual Explanation Explain(Weight weight, int doc) Parameters Type Name Description Weight weight System.Int32 doc Returns Type Description Explanation Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Rewrite(Query) Expert: called to re-write queries into primitive queries. Declaration public virtual Query Rewrite(Query original) Parameters Type Name Description Query original Returns Type Description Query Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, ICollector) Lower-level search API. Collect(Int32) is called for every matching document. Declaration public virtual void Search(Query query, Filter filter, ICollector results) Parameters Type Name Description Query query To match documents Filter filter Ef non-null, used to permit documents to be collected. ICollector results To receive hits Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32) Finds the top n hits for query , applying filter if non-null. Declaration public virtual TopDocs Search(Query query, Filter filter, int n) Parameters Type Name Description Query query Filter filter System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32, Sort) Search implementation with arbitrary sorting. Finds the top n hits for query , applying filter if non-null, and sorting the hits by the criteria in sort . NOTE: this does not compute scores by default; use Search(Query, Filter, Int32, Sort, Boolean, Boolean) to control scoring. Declaration public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32, Sort, Boolean, Boolean) Search implementation with arbitrary sorting, plus control over whether hit scores and max score should be computed. Finds the top n hits for query , applying filter if non-null, and sorting the hits by the criteria in sort . If doDocScores is true then the score of each hit will be computed and returned. If doMaxScore is true then the maximum score over all collected hits will be computed. Declaration public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, ICollector) Lower-level search API. Collect(Int32) is called for every matching document. Declaration public virtual void Search(Query query, ICollector results) Parameters Type Name Description Query query ICollector results Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Int32) Finds the top n hits for query . Declaration public virtual TopDocs Search(Query query, int n) Parameters Type Name Description Query query System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Int32, Sort) Search implementation with arbitrary sorting and no filter. Declaration public virtual TopFieldDocs Search(Query query, int n, Sort sort) Parameters Type Name Description Query query The query to search for System.Int32 n Return only the top n results Sort sort The Sort object Returns Type Description TopFieldDocs The top docs, sorted according to the supplied Sort instance Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) Just like Search(Weight, Int32, Sort, Boolean, Boolean) , but you choose whether or not the fields in the returned FieldDoc instances should be set by specifying fillFields . Declaration protected virtual TopFieldDocs Search(Weight weight, FieldDoc after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore) Parameters Type Name Description Weight weight FieldDoc after System.Int32 nDocs Sort sort System.Boolean fillFields System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs | Improve this Doc View Source Search(Weight, ScoreDoc, Int32) Expert: Low-level search implementation. Finds the top nDocs hits for query , applying filter if non-null. Applications should usually call Search(Query, Int32) or Search(Query, Filter, Int32) instead. Declaration protected virtual TopDocs Search(Weight weight, ScoreDoc after, int nDocs) Parameters Type Name Description Weight weight ScoreDoc after System.Int32 nDocs Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Weight, Int32, Sort, Boolean, Boolean) Expert: Low-level search implementation with arbitrary sorting and control over whether hit scores and max score should be computed. Finds the top nDocs hits for query and sorting the hits by the criteria in sort . Applications should usually call Search(Query, Filter, Int32, Sort) instead. Declaration protected virtual TopFieldDocs Search(Weight weight, int nDocs, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description Weight weight System.Int32 nDocs Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) Just like Search(Weight, Int32, Sort, Boolean, Boolean) , but you choose whether or not the fields in the returned FieldDoc instances should be set by specifying fillFields . Declaration protected virtual TopFieldDocs Search(IList<AtomicReaderContext> leaves, Weight weight, FieldDoc after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves Weight weight FieldDoc after System.Int32 nDocs Sort sort System.Boolean fillFields System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ICollector) Lower-level search API. Collect(Int32) is called for every document. NOTE: this method executes the searches on all given leaves exclusively. To search across all the searchers leaves use m_leafContexts . Declaration protected virtual void Search(IList<AtomicReaderContext> leaves, Weight weight, ICollector collector) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves The searchers leaves to execute the searches on Weight weight To match documents ICollector collector To receive hits Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ScoreDoc, Int32) Expert: Low-level search implementation. Finds the top n hits for query . Applications should usually call Search(Query, Int32) or Search(Query, Filter, Int32) instead. Declaration protected virtual TopDocs Search(IList<AtomicReaderContext> leaves, Weight weight, ScoreDoc after, int nDocs) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves Weight weight ScoreDoc after System.Int32 nDocs Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32) Finds the top n hits for query , applying filter if non-null, where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) Finds the top n hits for query , applying filter if non-null, where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n, Sort sort) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Sort sort Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean) Finds the top n hits for query where all results are after a previous result ( after ), allowing control over whether hit scores and max score should be computed. By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. If doDocScores is true then the score of each hit will be computed and returned. If doMaxScore is true then the maximum score over all collected hits will be computed. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32) Finds the top n hits for top query where all results are after a previous result (top after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, int n) Parameters Type Name Description ScoreDoc after Query query System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32, Sort) Finds the top n hits for query where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, int n, Sort sort) Parameters Type Name Description ScoreDoc after Query query System.Int32 n Sort sort Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Slices(IList<AtomicReaderContext>) Expert: Creates an array of leaf slices each holding a subset of the given leaves. Each IndexSearcher.LeafSlice is executed in a single thread. By default there will be one IndexSearcher.LeafSlice per leaf ( AtomicReaderContext ). Declaration protected virtual IndexSearcher.LeafSlice[] Slices(IList<AtomicReaderContext> leaves) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves Returns Type Description IndexSearcher.LeafSlice [] | Improve this Doc View Source TermStatistics(Term, TermContext) Returns TermStatistics for a term. This can be overridden for example, to return a term's statistics across a distributed collection. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual TermStatistics TermStatistics(Term term, TermContext context) Parameters Type Name Description Term term TermContext context Returns Type Description TermStatistics | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source WrapFilter(Query, Filter) This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual Query WrapFilter(Query query, Filter filter) Parameters Type Name Description Query query Filter filter Returns Type Description Query"
  },
  "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.LeafSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.LeafSlice.html",
    "title": "Class IndexSearcher.LeafSlice | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexSearcher.LeafSlice A class holding a subset of the IndexSearcher s leaf contexts to be executed within a single thread. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexSearcher.LeafSlice Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class LeafSlice Constructors | Improve this Doc View Source LeafSlice(AtomicReaderContext[]) Declaration public LeafSlice(params AtomicReaderContext[] leaves) Parameters Type Name Description AtomicReaderContext [] leaves"
  },
  "api/Lucene.Net/Lucene.Net.Search.ITopDocsCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ITopDocsCollector.html",
    "title": "Interface ITopDocsCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ITopDocsCollector LUCENENET specific interface used to reference TopDocsCollector<T> without referencing its generic type. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ITopDocsCollector : ICollector Properties | Improve this Doc View Source TotalHits The total number of documents that matched this query. Declaration int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetTopDocs() Returns the top docs that were collected by this collector. Declaration TopDocs GetTopDocs() Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32) Returns the documents in the rage [ start .. pq.Count) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned. This method is convenient to call if the application always asks for the last results, starting from the last 'page'. NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different start , you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration TopDocs GetTopDocs(int start) Parameters Type Name Description System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32, Int32) Returns the documents in the rage [ start .. start + howMany ) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned, and if pq.Count - start < howMany , then only the available documents in [ start .. pq.Count) are returned. This method is useful to call in case pagination of search results is allowed by the search application, as well as it attempts to optimize the memory used by allocating only as much as requested by howMany . NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different range, you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration TopDocs GetTopDocs(int start, int howMany) Parameters Type Name Description System.Int32 start System.Int32 howMany Returns Type Description TopDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.LiveFieldValues-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.LiveFieldValues-2.html",
    "title": "Class LiveFieldValues<S, T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LiveFieldValues<S, T> Tracks live field values across NRT reader reopens. This holds a map for all updated ids since the last reader reopen. Once the NRT reader is reopened, it prunes the map. This means you must reopen your NRT reader periodically otherwise the RAM consumption of this class will grow unbounded! NOTE: you must ensure the same id is never updated at the same time by two threads, because in this case you cannot in general know which thread \"won\". Inheritance System.Object LiveFieldValues<S, T> Implements ReferenceManager.IRefreshListener 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.Search Assembly : Lucene.Net.dll Syntax public abstract class LiveFieldValues<S, T> : ReferenceManager.IRefreshListener, IDisposable where S : class Type Parameters Name Description S T Constructors | Improve this Doc View Source LiveFieldValues(ReferenceManager<S>, T) Declaration public LiveFieldValues(ReferenceManager<S> mgr, T missingValue) Parameters Type Name Description ReferenceManager <S> mgr T missingValue Properties | Improve this Doc View Source Count Returns the [approximate] number of id/value pairs buffered in RAM. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(String, T) Call this after you've successfully added a document to the index, to record what value you just set the field to. Declaration public virtual void Add(string id, T value) Parameters Type Name Description System.String id T value | Improve this Doc View Source AfterRefresh(Boolean) Declaration public virtual void AfterRefresh(bool didRefresh) Parameters Type Name Description System.Boolean didRefresh | Improve this Doc View Source BeforeRefresh() Declaration public virtual void BeforeRefresh() | Improve this Doc View Source Delete(String) Call this after you've successfully deleted a document from the index. Declaration public virtual void Delete(string id) Parameters Type Name Description System.String id | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Get(String) Returns the current value for this id, or null if the id isn't in the index or was deleted. Declaration public virtual T Get(string id) Parameters Type Name Description System.String id Returns Type Description T | Improve this Doc View Source LookupFromSearcher(S, String) This is called when the id/value was already flushed & opened in an NRT IndexSearcher. You must implement this to go look up the value (eg, via doc values, field cache, stored fields, etc.). Declaration protected abstract T LookupFromSearcher(S s, string id) Parameters Type Name Description S s System.String id Returns Type Description T Implements ReferenceManager.IRefreshListener System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.MatchAllDocsQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MatchAllDocsQuery.html",
    "title": "Class MatchAllDocsQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MatchAllDocsQuery A query that matches all documents. Inheritance System.Object Query MatchAllDocsQuery Inherited Members Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MatchAllDocsQuery : Query Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | 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 Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MaxNonCompetitiveBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MaxNonCompetitiveBoostAttribute.html",
    "title": "Class MaxNonCompetitiveBoostAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MaxNonCompetitiveBoostAttribute Implementation class for IMaxNonCompetitiveBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute MaxNonCompetitiveBoostAttribute Implements IMaxNonCompetitiveBoostAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() 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.Search Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class MaxNonCompetitiveBoostAttribute : Attribute, IMaxNonCompetitiveBoostAttribute, IAttribute Properties | Improve this Doc View Source CompetitiveTerm Declaration public BytesRef CompetitiveTerm { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source MaxNonCompetitiveBoost Declaration public float MaxNonCompetitiveBoost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements IMaxNonCompetitiveBoostAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiCollector.html",
    "title": "Class MultiCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiCollector A ICollector which allows running a search with several ICollector s. It offers a static Wrap(ICollector[]) method which accepts a list of collectors and wraps them with MultiCollector , while filtering out the null ones. Inheritance System.Object MultiCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer | Improve this Doc View Source Wrap(ICollector[]) Wraps a list of ICollector s with a MultiCollector . This method works as follows: Filters out the null collectors, so they are not used during search time. If the input contains 1 real collector (i.e. non- null ), it is returned. Otherwise the method returns a MultiCollector which wraps the non- null ones. Declaration public static ICollector Wrap(params ICollector[] collectors) Parameters Type Name Description ICollector [] collectors Returns Type Description ICollector Exceptions Type Condition System.ArgumentException if either 0 collectors were input, or all collectors are null . Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiPhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiPhraseQuery.html",
    "title": "Class MultiPhraseQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiPhraseQuery MultiPhraseQuery is a generalized version of PhraseQuery , with an added method Add(Term[]) . To use this class, to search for the phrase \"Microsoft app*\" first use Add(Term) on the term \"Microsoft\", then find all terms that have \"app\" as prefix using MultiFields.GetFields(IndexReader).GetTerms(string) , and use Add(Term[]) to add them to the query. Collection initializer note: To create and populate a MultiPhraseQuery in a single statement, you can use the following example as a guide: var multiPhraseQuery = new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) , Add(Term[]) , or Add(Term[], Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query MultiPhraseQuery Implements System.Collections.Generic.IEnumerable < Term []> System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiPhraseQuery : Query, IEnumerable<Term[]>, IEnumerable Properties | Improve this Doc View Source Slop Sets the phrase slop for this query. Declaration public virtual int Slop { get; set; } Property Value Type Description System.Int32 See Also Slop Methods | Improve this Doc View Source Add(Term) Add a single term at the next position in the phrase. Declaration public virtual void Add(Term term) Parameters Type Name Description Term term See Also Add ( Term ) | Improve this Doc View Source Add(Term[]) Add multiple terms at the next position in the phrase. Any of the terms may match. Declaration public virtual void Add(Term[] terms) Parameters Type Name Description Term [] terms See Also Add ( Term ) | Improve this Doc View Source Add(Term[], Int32) Allows to specify the relative position of terms within the phrase. Declaration public virtual void Add(Term[] terms, int position) Parameters Type Name Description Term [] terms System.Int32 position See Also Add ( Term , System.Int32 ) | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. Declaration public IEnumerator<Term[]> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Term []> An enumerator that can be used to iterate through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetPositions() Returns the relative positions of terms in this phrase. Declaration public virtual int[] GetPositions() Returns Type Description System.Int32 [] | Improve this Doc View Source GetTermArrays() Returns a List of the terms in the multiphrase. Do not modify the List or its contents. Declaration public virtual IList<Term[]> GetTermArrays() Returns Type Description System.Collections.Generic.IList < Term []> | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override sealed string ToString(string f) Parameters Type Name Description System.String f Returns Type Description System.String Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.MultiPhraseQuery.termArrays . Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator An enumerator that can be used to iterate through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.html",
    "title": "Class MultiTermQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermQuery An abstract Query that matches documents containing a subset of terms provided by a FilteredTermsEnum enumeration. This query cannot be used directly; you must subclass it and define GetTermsEnum(Terms, AttributeSource) to provide a FilteredTermsEnum that iterates through the terms to be matched. NOTE : if MultiTermRewriteMethod is either CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE or SCORING_BOOLEAN_QUERY_REWRITE , you may encounter a BooleanQuery.TooManyClausesException exception during searching, which happens when the number of terms to be searched exceeds MaxClauseCount . Setting MultiTermRewriteMethod to CONSTANT_SCORE_FILTER_REWRITE prevents this. The recommended rewrite method is CONSTANT_SCORE_AUTO_REWRITE_DEFAULT : it doesn't spend CPU computing unhelpful scores, and it tries to pick the most performant rewrite method given the query. If you need scoring (like , use MultiTermQuery.TopTermsScoringBooleanQueryRewrite which uses a priority queue to only collect competitive terms and not hit this limitation. Note that QueryParsers.Classic.QueryParser produces MultiTermQuery s using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT by default. Inheritance System.Object Query MultiTermQuery AutomatonQuery FuzzyQuery NumericRangeQuery<T> PrefixQuery TermRangeQuery Inherited Members Query.Boost Query.ToString(String) Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class MultiTermQuery : Query Constructors | Improve this Doc View Source MultiTermQuery(String) Constructs a query matching terms that cannot be represented with a single Term . Declaration public MultiTermQuery(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source CONSTANT_SCORE_AUTO_REWRITE_DEFAULT Read-only default instance of ConstantScoreAutoRewrite , with TermCountCutoff set to DEFAULT_TERM_COUNT_CUTOFF and DocCountPercent set to DEFAULT_DOC_COUNT_PERCENT . Note that you cannot alter the configuration of this instance; you'll need to create a private instance instead. Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_AUTO_REWRITE_DEFAULT Field Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Like SCORING_BOOLEAN_QUERY_REWRITE except scores are not computed. Instead, each matching document receives a constant score equal to the query's boost. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source CONSTANT_SCORE_FILTER_REWRITE A rewrite method that first creates a private Filter , by visiting each term in sequence and marking all docs for that term. Matching documents are assigned a constant score equal to the query's boost. This method is faster than the BooleanQuery rewrite methods when the number of matched terms or matched documents is non-trivial. Also, it will never hit an errant BooleanQuery.TooManyClausesException exception. Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_FILTER_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_rewriteMethod Declaration protected MultiTermQuery.RewriteMethod m_rewriteMethod Field Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source SCORING_BOOLEAN_QUERY_REWRITE A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Note that typically such scores are meaningless to the user, and require non-trivial CPU to compute, so it's almost always better to use CONSTANT_SCORE_AUTO_REWRITE_DEFAULT instead. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod SCORING_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod Properties | Improve this Doc View Source Field Returns the field name for this query Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MultiTermRewriteMethod Gets or Sets the rewrite method to be used when executing the query. You can use one of the four core methods, or implement your own subclass of MultiTermQuery.RewriteMethod . Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod Methods | 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 Query.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms) Convenience method, if no attributes are needed: this simply passes empty attributes and is equal to: GetTermsEnum(terms, new AttributeSource()) Declaration public TermsEnum GetTermsEnum(Terms terms) Parameters Type Name Description Terms terms Returns Type Description TermsEnum | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Construct the enumeration to be used, expanding the pattern term. this method should only be called if the field exists (ie, implementations can assume the field does exist). this method should not return null (should instead return EMPTY if no terms match). The TermsEnum must already be positioned to the first matching term. The given AttributeSource is passed by the MultiTermQuery.RewriteMethod to provide attributes, the rewrite method uses to inform about e.g. maximum competitive boosts. this is currently only used by TopTermsRewrite<Q> . Declaration protected abstract TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum | Improve this Doc View Source Rewrite(IndexReader) To rewrite to a simpler form, instead return a simpler enum from GetTermsEnum(Terms, AttributeSource) . For example, to rewrite to a single term, return a SingleTermsEnum . Declaration public override sealed Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.RewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.RewriteMethod.html",
    "title": "Class MultiTermQuery.RewriteMethod | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermQuery.RewriteMethod Abstract class that defines how the query is rewritten. Inheritance System.Object MultiTermQuery.RewriteMethod DocTermOrdsRewriteMethod FieldCacheRewriteMethod SpanRewriteMethod TermCollectingRewrite<Q> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class RewriteMethod Methods | Improve this Doc View Source GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Returns the MultiTermQuery s TermsEnum Declaration protected virtual TermsEnum GetTermsEnum(MultiTermQuery query, Terms terms, AttributeSource atts) Parameters Type Name Description MultiTermQuery query Terms terms AttributeSource atts Returns Type Description TermsEnum See Also GetTermsEnum ( Terms , AttributeSource ) | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public abstract Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite.html",
    "title": "Class MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , but the scores are only computed as the boost. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > TopTermsRewrite < BooleanQuery > MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite Inherited Members TopTermsRewrite<BooleanQuery>.Count TopTermsRewrite<BooleanQuery>.Rewrite(IndexReader, MultiTermQuery) TopTermsRewrite<BooleanQuery>.GetHashCode() TopTermsRewrite<BooleanQuery>.Equals(Object) TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) 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.Search Assembly : Lucene.Net.dll Syntax public sealed class TopTermsBoostOnlyBooleanQueryRewrite : TopTermsRewrite<BooleanQuery>, ITopTermsRewrite Constructors | Improve this Doc View Source TopTermsBoostOnlyBooleanQueryRewrite(Int32) Create a MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite for at most size terms. NOTE: if MaxClauseCount is smaller than size , then it will be used instead. Declaration public TopTermsBoostOnlyBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source MaxSize Declaration protected override int MaxSize { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Search.TopTermsRewrite<Lucene.Net.Search.BooleanQuery>.MaxSize Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docFreq, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docFreq System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsScoringBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsScoringBooleanQueryRewrite.html",
    "title": "Class MultiTermQuery.TopTermsScoringBooleanQueryRewrite | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermQuery.TopTermsScoringBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. It is the default rewrite method for FuzzyQuery . Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > TopTermsRewrite < BooleanQuery > MultiTermQuery.TopTermsScoringBooleanQueryRewrite Inherited Members TopTermsRewrite<BooleanQuery>.Count TopTermsRewrite<BooleanQuery>.Rewrite(IndexReader, MultiTermQuery) TopTermsRewrite<BooleanQuery>.GetHashCode() TopTermsRewrite<BooleanQuery>.Equals(Object) TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) 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.Search Assembly : Lucene.Net.dll Syntax public sealed class TopTermsScoringBooleanQueryRewrite : TopTermsRewrite<BooleanQuery>, ITopTermsRewrite Constructors | Improve this Doc View Source TopTermsScoringBooleanQueryRewrite(Int32) Create a MultiTermQuery.TopTermsScoringBooleanQueryRewrite for at most size terms. NOTE: if MaxClauseCount is smaller than size , then it will be used instead. Declaration public TopTermsScoringBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source MaxSize Declaration protected override int MaxSize { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Search.TopTermsRewrite<Lucene.Net.Search.BooleanQuery>.MaxSize Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docCount, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docCount System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQueryWrapperFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQueryWrapperFilter-1.html",
    "title": "Class MultiTermQueryWrapperFilter<Q> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiTermQueryWrapperFilter<Q> A wrapper for MultiTermQuery , that exposes its functionality as a Filter . MultiTermQueryWrapperFilter<Q> is not designed to be used by itself. Normally you subclass it to provide a Filter counterpart for a MultiTermQuery subclass. For example, TermRangeFilter and PrefixFilter extend MultiTermQueryWrapperFilter<Q> . This class also provides the functionality behind CONSTANT_SCORE_FILTER_REWRITE ; this is why it is not abstract. Inheritance System.Object Filter MultiTermQueryWrapperFilter<Q> NumericRangeFilter<T> PrefixFilter TermRangeFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiTermQueryWrapperFilter<Q> : Filter where Q : MultiTermQuery Type Parameters Name Description Q Constructors | Improve this Doc View Source MultiTermQueryWrapperFilter(Q) Wrap a MultiTermQuery as a Filter . Declaration protected MultiTermQueryWrapperFilter(Q query) Parameters Type Name Description Q query Fields | Improve this Doc View Source m_query Declaration protected readonly Q m_query Field Value Type Description Q Properties | Improve this Doc View Source Field Returns the field name for this query Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Returns a DocIdSet with documents that should be permitted in search results. Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed 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()"
  },
  "api/Lucene.Net/Lucene.Net.Search.NGramPhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NGramPhraseQuery.html",
    "title": "Class NGramPhraseQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NGramPhraseQuery This is a PhraseQuery which is optimized for n-gram phrase query. For example, when you query \"ABCD\" on a 2-gram field, you may want to use NGramPhraseQuery rather than PhraseQuery , because NGramPhraseQuery will Rewrite(IndexReader) the query to \"AB/0 CD/2\", while PhraseQuery will query \"AB/0 BC/1 CD/2\" (where term/position). Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new NGramPhraseQuery(2) { new Term(\"field\", \"ABCD\"), new Term(\"field\", \"EFGH\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query PhraseQuery NGramPhraseQuery Implements System.Collections.Generic.IEnumerable < Term > System.Collections.IEnumerable Inherited Members PhraseQuery.Slop PhraseQuery.Add(Term) PhraseQuery.Add(Term, Int32) PhraseQuery.GetTerms() PhraseQuery.GetPositions() PhraseQuery.CreateWeight(IndexSearcher) PhraseQuery.ExtractTerms(ISet<Term>) PhraseQuery.ToString(String) PhraseQuery.GetEnumerator() PhraseQuery.IEnumerable.GetEnumerator() Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class NGramPhraseQuery : PhraseQuery, IEnumerable<Term>, IEnumerable Constructors | Improve this Doc View Source NGramPhraseQuery(Int32) Constructor that takes gram size. Declaration public NGramPhraseQuery(int n) Parameters Type Name Description System.Int32 n n-gram size Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides PhraseQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PhraseQuery.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides PhraseQuery.Rewrite(IndexReader) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter.html",
    "title": "Class NumericRangeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeFilter LUCENENET specific static class to provide access to static methods without referring to the NumericRangeFilter<T> 's generic closing type. Inheritance System.Object NumericRangeFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class NumericRangeFilter Methods | Improve this Doc View Source NewDoubleRange(String, Int32, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Double range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeFilter<double> NewDoubleRange(string field, int precisionStep, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Double > | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Double range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeFilter<double> NewDoubleRange(string field, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Double > | Improve this Doc View Source NewInt32Range(String, Int32, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Int32 range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeFilter<int> NewInt32Range(string field, int precisionStep, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int32 > | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Int32 range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeFilter<int> NewInt32Range(string field, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int32 > | Improve this Doc View Source NewInt64Range(String, Int32, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Int64 range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeFilter<long> NewInt64Range(string field, int precisionStep, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int64 > | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Int64 range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeFilter<long> NewInt64Range(string field, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int64 > | Improve this Doc View Source NewSingleRange(String, Int32, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Single range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeFilter<float> NewSingleRange(string field, int precisionStep, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Single > | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Single range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeFilter<float> NewSingleRange(string field, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Single >"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter-1.html",
    "title": "Class NumericRangeFilter<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeFilter<T> A Filter that only accepts numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). You create a new NumericRangeFilter with the static factory methods, eg: Filter f = NumericRangeFilter.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); Accepts all documents whose float valued \"weight\" field ranges from 0.03 to 0.10, inclusive. See NumericRangeQuery for details on how Lucene indexes and searches numeric valued fields. @since 2.9 Inheritance System.Object Filter MultiTermQueryWrapperFilter < NumericRangeQuery <T>> NumericRangeFilter<T> Inherited Members MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.m_query MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.ToString() MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.Equals(Object) MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.GetHashCode() MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.Field MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class NumericRangeFilter<T> : MultiTermQueryWrapperFilter<NumericRangeQuery<T>> where T : struct, IComparable<T> Type Parameters Name Description T Properties | Improve this Doc View Source IncludesMax Returns true if the upper endpoint is inclusive Declaration public bool IncludesMax { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesMin Returns true if the lower endpoint is inclusive Declaration public bool IncludesMin { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Max Returns the upper value of this range filter Declaration public T? Max { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source Min Returns the lower value of this range filter Declaration public T? Min { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery.html",
    "title": "Class NumericRangeQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeQuery LUCENENET specific class to provide access to static factory metods of NumericRangeQuery<T> without referring to its genereic closing type. Inheritance System.Object NumericRangeQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class NumericRangeQuery Methods | Improve this Doc View Source NewDoubleRange(String, Int32, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Double range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeQuery<double> NewDoubleRange(string field, int precisionStep, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Double > | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Double range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeQuery<double> NewDoubleRange(string field, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Double > | Improve this Doc View Source NewInt32Range(String, Int32, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int32 range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeQuery<int> NewInt32Range(string field, int precisionStep, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int32 > | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int32 range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeQuery<int> NewInt32Range(string field, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int32 > | Improve this Doc View Source NewInt64Range(String, Int32, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int64 range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeQuery<long> NewInt64Range(string field, int precisionStep, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int64 > | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int64 range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeQuery<long> NewInt64Range(string field, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int64 > | Improve this Doc View Source NewSingleRange(String, Int32, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Single range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeQuery<float> NewSingleRange(string field, int precisionStep, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Single > | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Single range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeQuery<float> NewSingleRange(string field, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Single >"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery-1.html",
    "title": "Class NumericRangeQuery<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericRangeQuery<T> A Query that matches numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). If your terms are instead textual, you should use TermRangeQuery . NumericRangeFilter is the filter equivalent of this query. You create a new NumericRangeQuery<T> with the static factory methods, eg: Query q = NumericRangeQuery.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); matches all documents whose System.Single valued \"weight\" field ranges from 0.03 to 0.10, inclusive. The performance of NumericRangeQuery<T> is much better than the corresponding TermRangeQuery because the number of terms that must be searched is usually far fewer, thanks to trie indexing, described below. You can optionally specify a Lucene.Net.Search.NumericRangeQuery`1.precisionStep when creating this query. This is necessary if you've changed this configuration from its default (4) during indexing. Lower values consume more disk space but speed up searching. Suitable values are between 1 and 8 . A good starting point to test is 4 , which is the default value for all Numeric* classes. See below for details. This query defaults to CONSTANT_SCORE_AUTO_REWRITE_DEFAULT . With precision steps of <=4, this query can be run with one of the BooleanQuery rewrite methods without changing BooleanQuery 's default max clause count. How it works See the publication about panFMP , where this algorithm was described (referred to as TrieRangeQuery ): Schindler, U, Diepenbroek, M , 2008. Generic XML-based Framework for Metadata Portals. Computers & Geosciences 34 (12), 1947-1955. doi:10.1016/j.cageo.2008.02.023 A quote from this paper: Because Apache Lucene is a full-text search engine and not a conventional database, it cannot handle numerical ranges (e.g., field value is inside user defined bounds, even dates are numerical values). We have developed an extension to Apache Lucene that stores the numerical values in a special string-encoded format with variable precision (all numerical values like System.Double s, System.Int64 s, System.Single s, and System.Int32 s are converted to lexicographic sortable string representations and stored with different precisions (for a more detailed description of how the values are stored, see NumericUtils ). A range is then divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie , while the boundaries are matched more exactly. This reduces the number of terms dramatically. For the variant that stores long values in 8 different precisions (each reduced by 8 bits) that uses a lowest precision of 1 byte, the index contains only a maximum of 256 distinct values in the lowest precision. Overall, a range could consist of a theoretical maximum of 7*255*2 + 255 = 3825 distinct terms (when there is a term for every distinct value of an 8-byte-number in the index and the range covers almost all of them; a maximum of 255 distinct values is used because it would always be possible to reduce the full 256 values to one term with degraded precision). In practice, we have seen up to 300 terms in most cases (index with 500,000 metadata records and a uniform value distribution). Precision Step You can choose any Lucene.Net.Search.NumericRangeQuery`1.precisionStep when encoding values. Lower step values mean more precisions and so more terms in index (and index gets larger). The number of indexed terms per value is (those are generated by NumericTokenStream ): indexedTermsPerValue = ceil ( bitsPerValue / precisionStep ) As the lower precision terms are shared by many values, the additional terms only slightly grow the term dictionary (approx. 7% for precisionStep=4 ), but have a larger impact on the postings (the postings file will have more entries, as every document is linked to indexedTermsPerValue terms instead of one). The formula to estimate the growth of the term dictionary in comparison to one term per value: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> On the other hand, if the Lucene.Net.Search.NumericRangeQuery`1.precisionStep is smaller, the maximum number of terms to match reduces, which optimizes query speed. The formula to calculate the maximum number of terms that will be visited while executing the query is: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> For longs stored using a precision step of 4, maxQueryTerms = 15 15 2 + 15 = 465 , and for a precision step of 2, maxQueryTerms = 31 3 2 + 3 = 189 . But the faster search speed is reduced by more seeking in the term enum of the index. Because of this, the ideal Lucene.Net.Search.NumericRangeQuery`1.precisionStep value can only be found out by testing. Important: You can index with a lower precision step value and test search speed using a multiple of the original step value. Good values for Lucene.Net.Search.NumericRangeQuery`1.precisionStep are depending on usage and data type: The default for all data types is 4 , which is used, when no precisionStep is given. Ideal value in most cases for 64 bit data types (long, double) is 6 or 8 . Ideal value in most cases for 32 bit data types (int, float) is 4 . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue (see below). Steps >=64 for long/double and >=32 for int/float produces one token per value in the index and querying is as slow as a conventional TermRangeQuery . But it can be used to produce fields, that are solely used for sorting (in this case simply use System.Int32.MaxValue as Lucene.Net.Search.NumericRangeQuery`1.precisionStep ). Using Int32Field , Int64Field , SingleField or DoubleField for sorting is ideal, because building the field cache is much faster than with text-only numbers. These fields have one term per value and therefore also work with term enumeration for building distinct lists (e.g. facets / preselected values to search for). Sorting is also possible with range query optimized fields using one of the above Lucene.Net.Search.NumericRangeQuery`1.precisionStep s. Comparisons of the different types of RangeQueries on an index with about 500,000 docs showed that TermRangeQuery in boolean rewrite mode (with raised BooleanQuery clause count) took about 30-40 secs to complete, TermRangeQuery in constant score filter rewrite mode took 5 secs and executing this class took <100ms to complete (on an Opteron64 machine, Java 1.5, 8 bit precision step). This query type was developed for a geographic portal, where the performance for e.g. bounding boxes or exact date/time stamps is important. @since 2.9 Inheritance System.Object Query MultiTermQuery NumericRangeQuery<T> Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class NumericRangeQuery<T> : MultiTermQuery where T : struct, IComparable<T> Type Parameters Name Description T Properties | Improve this Doc View Source IncludesMax Returns true if the upper endpoint is inclusive Declaration public bool IncludesMax { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesMin Returns true if the lower endpoint is inclusive Declaration public bool IncludesMin { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Max Returns the upper value of this range query Declaration public T? Max { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source Min Returns the lower value of this range query Declaration public T? Min { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Occur.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Occur.html",
    "title": "Enum Occur | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum Occur Specifies how clauses are to occur in matching documents. Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public enum Occur Fields Name Description MUST Use this operator for clauses that must appear in the matching documents. MUST_NOT Use this operator for clauses that must not appear in the matching documents. Note that it is not possible to search for queries that only consist of a MUST_NOT clause. SHOULD Use this operator for clauses that should appear in the matching documents. For a BooleanQuery with no MUST clauses one or more SHOULD clauses must match a document for the BooleanQuery to match."
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.AveragePayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.AveragePayloadFunction.html",
    "title": "Class AveragePayloadFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AveragePayloadFunction Calculate the final score as the average score of all payloads seen. Is thread safe and completely reusable. Inheritance System.Object PayloadFunction AveragePayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) 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.Search.Payloads Assembly : Lucene.Net.dll Syntax public class AveragePayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | 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 PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.html",
    "title": "Namespace Lucene.Net.Search.Payloads | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Payloads <!-- 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. --> The payloads package provides Query mechanisms for finding and using payloads. The following Query implementations are provided: 1. PayloadTermQuery -- Boost a term's score based on the value of the payload located at that term. 2. PayloadNearQuery -- A SpanNearQuery that factors in the value of the payloads located at each of the positions where the spans occur. Classes AveragePayloadFunction Calculate the final score as the average score of all payloads seen. Is thread safe and completely reusable. MaxPayloadFunction Returns the maximum payload score seen, else 1 if there are no payloads on the doc. Is thread safe and completely reusable. MinPayloadFunction Calculates the minimum payload seen PayloadFunction An abstract class that defines a way for Payload*Query instances to transform the cumulative effects of payload scores for a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk this class and its derivations are experimental and subject to change PayloadNearQuery This class is very similar to SpanNearQuery except that it factors in the value of the payloads located at each of the positions where the TermSpans occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . PayloadNearQuery.PayloadNearSpanScorer PayloadNearQuery.PayloadNearSpanWeight PayloadSpanUtil Experimental class to get set of payloads for most standard Lucene queries. Operates like Highlighter - IndexReader should only contain doc of interest, best to use MemoryIndex. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PayloadTermQuery This class is very similar to SpanTermQuery except that it factors in the value of the payload located at each of the positions where the Term occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . PayloadTermQuery.PayloadTermWeight PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.MaxPayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.MaxPayloadFunction.html",
    "title": "Class MaxPayloadFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MaxPayloadFunction Returns the maximum payload score seen, else 1 if there are no payloads on the doc. Is thread safe and completely reusable. Inheritance System.Object PayloadFunction MaxPayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) 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.Search.Payloads Assembly : Lucene.Net.dll Syntax public class MaxPayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | 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 PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.MinPayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.MinPayloadFunction.html",
    "title": "Class MinPayloadFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MinPayloadFunction Calculates the minimum payload seen Inheritance System.Object PayloadFunction MinPayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) 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.Search.Payloads Assembly : Lucene.Net.dll Syntax public class MinPayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | 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 PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadFunction.html",
    "title": "Class PayloadFunction | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadFunction An abstract class that defines a way for Payload*Query instances to transform the cumulative effects of payload scores for a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk this class and its derivations are experimental and subject to change Inheritance System.Object PayloadFunction AveragePayloadFunction MaxPayloadFunction MinPayloadFunction 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.Search.Payloads Assembly : Lucene.Net.dll Syntax public abstract class PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Calculate the score up to this point for this doc and field Declaration public abstract float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId The current doc System.String field The field System.Int32 start The start position of the matching Span System.Int32 end The end position of the matching Span System.Int32 numPayloadsSeen The number of payloads seen so far System.Single currentScore The current score so far System.Single currentPayloadScore The score for the current payload Returns Type Description System.Single The new current Score See Also Spans | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Calculate the final score for all the payloads seen so far for this doc/field Declaration public abstract float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId The current doc System.String field The current field System.Int32 numPayloadsSeen The total number of payloads seen on this document System.Single payloadScore The raw score for those payloads Returns Type Description System.Single The final score for the payloads | Improve this Doc View Source Equals(Object) Declaration public abstract override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Explain(Int32, String, Int32, Single) Declaration public virtual Explanation Explain(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description Explanation | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() See Also PayloadTermQuery"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.html",
    "title": "Class PayloadNearQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadNearQuery This class is very similar to SpanNearQuery except that it factors in the value of the payloads located at each of the positions where the TermSpans occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . Inheritance System.Object Query SpanQuery SpanNearQuery PayloadNearQuery Inherited Members SpanNearQuery.m_clauses SpanNearQuery.m_slop SpanNearQuery.m_inOrder SpanNearQuery.m_field SpanNearQuery.GetClauses() SpanNearQuery.Slop SpanNearQuery.IsInOrder SpanNearQuery.Field SpanNearQuery.ExtractTerms(ISet<Term>) SpanNearQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanNearQuery.Rewrite(IndexReader) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearQuery : SpanNearQuery Constructors | Improve this Doc View Source PayloadNearQuery(SpanQuery[], Int32, Boolean) Declaration public PayloadNearQuery(SpanQuery[] clauses, int slop, bool inOrder) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder | Improve this Doc View Source PayloadNearQuery(SpanQuery[], Int32, Boolean, PayloadFunction) Declaration public PayloadNearQuery(SpanQuery[] clauses, int slop, bool inOrder, PayloadFunction function) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder PayloadFunction function Fields | Improve this Doc View Source m_fieldName Declaration protected string m_fieldName Field Value Type Description System.String | Improve this Doc View Source m_function Declaration protected PayloadFunction m_function Field Value Type Description PayloadFunction Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides SpanNearQuery.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | 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 SpanNearQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanNearQuery.GetHashCode() | 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 SpanNearQuery.ToString(String) See Also ComputePayloadFactor(Int32, Int32, Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanScorer.html",
    "title": "Class PayloadNearQuery.PayloadNearSpanScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadNearQuery.PayloadNearSpanScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadNearQuery.PayloadNearSpanScorer Inherited Members SpanScorer.m_spans SpanScorer.m_more SpanScorer.m_doc SpanScorer.m_freq SpanScorer.m_numMatches SpanScorer.m_docScorer SpanScorer.NextDoc() SpanScorer.Advance(Int32) SpanScorer.DocID SpanScorer.Freq SpanScorer.SloppyFreq SpanScorer.GetCost() Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearSpanScorer : SpanScorer Constructors | Improve this Doc View Source PayloadNearSpanScorer(PayloadNearQuery, Spans, Weight, Similarity, Similarity.SimScorer) Declaration protected PayloadNearSpanScorer(PayloadNearQuery outerInstance, Spans spans, Weight weight, Similarity similarity, Similarity.SimScorer docScorer) Parameters Type Name Description PayloadNearQuery outerInstance Spans spans Weight weight Similarity similarity Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_payloadScore Declaration protected float m_payloadScore Field Value Type Description System.Single Methods | Improve this Doc View Source GetPayloads(Spans[]) Declaration public virtual void GetPayloads(Spans[] subSpans) Parameters Type Name Description Spans [] subSpans | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides SpanScorer.GetScore() | Improve this Doc View Source ProcessPayloads(ICollection<Byte[]>, Int32, Int32) By default, uses the PayloadFunction to score the payloads, but can be overridden to do other things. Declaration protected virtual void ProcessPayloads(ICollection<byte[]> payLoads, int start, int end) Parameters Type Name Description System.Collections.Generic.ICollection < System.Byte []> payLoads The payloads System.Int32 start The start position of the span being scored System.Int32 end The end position of the span being scored See Also Lucene.Net.Search.Spans.Spans.#ctor | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected override bool SetFreqCurrentDoc() Returns Type Description System.Boolean Overrides SpanScorer.SetFreqCurrentDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanWeight.html",
    "title": "Class PayloadNearQuery.PayloadNearSpanWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadNearQuery.PayloadNearSpanWeight Inheritance System.Object Weight SpanWeight PayloadNearQuery.PayloadNearSpanWeight Inherited Members SpanWeight.m_similarity SpanWeight.m_termContexts SpanWeight.m_query SpanWeight.m_stats SpanWeight.Query SpanWeight.GetValueForNormalization() SpanWeight.Normalize(Single, Single) Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearSpanWeight : SpanWeight Constructors | Improve this Doc View Source PayloadNearSpanWeight(PayloadNearQuery, SpanQuery, IndexSearcher) Declaration public PayloadNearSpanWeight(PayloadNearQuery outerInstance, SpanQuery query, IndexSearcher searcher) Parameters Type Name Description PayloadNearQuery outerInstance SpanQuery query IndexSearcher searcher Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides SpanWeight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides SpanWeight.GetScorer(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadSpanUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadSpanUtil.html",
    "title": "Class PayloadSpanUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadSpanUtil Experimental class to get set of payloads for most standard Lucene queries. Operates like Highlighter - IndexReader should only contain doc of interest, best to use MemoryIndex. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PayloadSpanUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadSpanUtil Constructors | Improve this Doc View Source PayloadSpanUtil(IndexReaderContext) Declaration public PayloadSpanUtil(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context that contains doc with payloads to extract See Also Context Methods | Improve this Doc View Source GetPayloadsForQuery(Query) Query should be rewritten for wild/fuzzy support. Declaration public virtual ICollection<byte[]> GetPayloadsForQuery(Query query) Parameters Type Name Description Query query rewritten query Returns Type Description System.Collections.Generic.ICollection < System.Byte []> payloads Collection Exceptions Type Condition System.IO.IOException if there is a low-level I/O error"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.html",
    "title": "Class PayloadTermQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadTermQuery This class is very similar to SpanTermQuery except that it factors in the value of the payload located at each of the positions where the Term occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . Inheritance System.Object Query SpanQuery SpanTermQuery PayloadTermQuery Inherited Members SpanTermQuery.m_term SpanTermQuery.Term SpanTermQuery.Field SpanTermQuery.ExtractTerms(ISet<Term>) SpanTermQuery.ToString(String) SpanTermQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadTermQuery : SpanTermQuery Constructors | Improve this Doc View Source PayloadTermQuery(Term, PayloadFunction) Declaration public PayloadTermQuery(Term term, PayloadFunction function) Parameters Type Name Description Term term PayloadFunction function | Improve this Doc View Source PayloadTermQuery(Term, PayloadFunction, Boolean) Declaration public PayloadTermQuery(Term term, PayloadFunction function, bool includeSpanScore) Parameters Type Name Description Term term PayloadFunction function System.Boolean includeSpanScore Fields | Improve this Doc View Source m_function Declaration protected PayloadFunction m_function Field Value Type Description PayloadFunction Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | 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 SpanTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanTermQuery.GetHashCode() See Also ComputePayloadFactor(Int32, Int32, Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.html",
    "title": "Class PayloadTermQuery.PayloadTermWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadTermQuery.PayloadTermWeight Inheritance System.Object Weight SpanWeight PayloadTermQuery.PayloadTermWeight Inherited Members SpanWeight.m_similarity SpanWeight.m_termContexts SpanWeight.m_query SpanWeight.m_stats SpanWeight.Query SpanWeight.GetValueForNormalization() SpanWeight.Normalize(Single, Single) Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax protected class PayloadTermWeight : SpanWeight Constructors | Improve this Doc View Source PayloadTermWeight(PayloadTermQuery, PayloadTermQuery, IndexSearcher) Declaration public PayloadTermWeight(PayloadTermQuery outerInstance, PayloadTermQuery query, IndexSearcher searcher) Parameters Type Name Description PayloadTermQuery outerInstance PayloadTermQuery query IndexSearcher searcher Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides SpanWeight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides SpanWeight.GetScorer(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer.html",
    "title": "Class PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inherited Members SpanScorer.m_spans SpanScorer.m_more SpanScorer.m_doc SpanScorer.m_freq SpanScorer.m_numMatches SpanScorer.m_docScorer SpanScorer.NextDoc() SpanScorer.Advance(Int32) SpanScorer.DocID SpanScorer.Freq SpanScorer.SloppyFreq SpanScorer.GetCost() Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax protected class PayloadTermSpanScorer : SpanScorer Constructors | Improve this Doc View Source PayloadTermSpanScorer(PayloadTermQuery.PayloadTermWeight, TermSpans, Weight, Similarity.SimScorer) Declaration public PayloadTermSpanScorer(PayloadTermQuery.PayloadTermWeight outerInstance, TermSpans spans, Weight weight, Similarity.SimScorer docScorer) Parameters Type Name Description PayloadTermQuery.PayloadTermWeight outerInstance TermSpans spans Weight weight Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_payload Declaration protected BytesRef m_payload Field Value Type Description BytesRef | Improve this Doc View Source m_payloadScore Declaration protected float m_payloadScore Field Value Type Description System.Single | Improve this Doc View Source m_payloadsSeen Declaration protected int m_payloadsSeen Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetPayloadScore() The score for the payload Declaration protected virtual float GetPayloadScore() Returns Type Description System.Single The score, as calculated by DocScore(Int32, String, Int32, Single) | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single GetSpanScore() * GetPayloadScore() Overrides SpanScorer.GetScore() Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetSpanScore() Returns the SpanScorer score only. Should not be overridden without good cause! Declaration protected virtual float GetSpanScore() Returns Type Description System.Single the score for just the Span part w/o the payload Exceptions Type Condition System.IO.IOException if there is a low-level I/O error See Also GetScore() | Improve this Doc View Source ProcessPayload(Similarity) Declaration protected virtual void ProcessPayload(Similarity similarity) Parameters Type Name Description Similarity similarity | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected override bool SetFreqCurrentDoc() Returns Type Description System.Boolean Overrides SpanScorer.SetFreqCurrentDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.PhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PhraseQuery.html",
    "title": "Class PhraseQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PhraseQuery A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by QueryParser for input like \"new york\" . This query may be combined with other terms or queries with a BooleanQuery . Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new PhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query PhraseQuery NGramPhraseQuery Implements System.Collections.Generic.IEnumerable < Term > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PhraseQuery : Query, IEnumerable<Term>, IEnumerable Constructors | Improve this Doc View Source PhraseQuery() Constructs an empty phrase query. Declaration public PhraseQuery() Properties | Improve this Doc View Source Slop Sets the number of other words permitted between words in query phrase. If zero, then this is an exact phrase search. For larger values this works like a WITHIN or NEAR operator. The slop is in fact an edit-distance, where the units correspond to moves of terms in the query phrase out of position. For example, to switch the order of two words requires two moves (the first move places the words atop one another), so to permit re-orderings of phrases, the slop must be at least two. More exact matches are scored higher than sloppier matches, thus search results are sorted by exactness. The slop is zero by default, requiring exact matches. Declaration public virtual int Slop { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Term) Adds a term to the end of the query phrase. The relative position of the term is the one immediately after the last term added. Declaration public virtual void Add(Term term) Parameters Type Name Description Term term | Improve this Doc View Source Add(Term, Int32) Adds a term to the end of the query phrase. The relative position of the term within the phrase is specified explicitly. this allows e.g. phrases with more than one term at the same position or phrases with gaps (e.g. in connection with stopwords). Declaration public virtual void Add(Term term, int position) Parameters Type Name Description Term term System.Int32 position | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> queryTerms) Parameters Type Name Description System.Collections.Generic.ISet < Term > queryTerms Overrides Query.ExtractTerms(ISet<Term>) See Also ExtractTerms ( System.Collections.Generic.ISet < Term >) | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.PhraseQuery.terms collection. Declaration public IEnumerator<Term> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Term > An enumerator that can be used to iterate through the Lucene.Net.Search.PhraseQuery.terms collection. | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetPositions() Returns the relative positions of terms in this phrase. Declaration public virtual int[] GetPositions() Returns Type Description System.Int32 [] | Improve this Doc View Source GetTerms() Returns the set of terms in this phrase. Declaration public virtual Term[] GetTerms() Returns Type Description Term [] | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string f) Parameters Type Name Description System.String f Returns Type Description System.String Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.PhraseQuery.terms collection. Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator An enumerator that can be used to iterate through the Lucene.Net.Search.PhraseQuery.terms collection. Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Search.PositiveScoresOnlyCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PositiveScoresOnlyCollector.html",
    "title": "Class PositiveScoresOnlyCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PositiveScoresOnlyCollector A ICollector implementation which wraps another ICollector and makes sure only documents with scores > 0 are collected. Inheritance System.Object PositiveScoresOnlyCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PositiveScoresOnlyCollector : ICollector Constructors | Improve this Doc View Source PositiveScoresOnlyCollector(ICollector) Declaration public PositiveScoresOnlyCollector(ICollector c) Parameters Type Name Description ICollector c Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixFilter.html",
    "title": "Class PrefixFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixFilter A Filter that restricts search results to values that have a matching prefix in a given field. Inheritance System.Object Filter MultiTermQueryWrapperFilter < PrefixQuery > PrefixFilter Inherited Members MultiTermQueryWrapperFilter<PrefixQuery>.m_query MultiTermQueryWrapperFilter<PrefixQuery>.Equals(Object) MultiTermQueryWrapperFilter<PrefixQuery>.GetHashCode() MultiTermQueryWrapperFilter<PrefixQuery>.Field MultiTermQueryWrapperFilter<PrefixQuery>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixFilter : MultiTermQueryWrapperFilter<PrefixQuery> Constructors | Improve this Doc View Source PrefixFilter(Term) Declaration public PrefixFilter(Term prefix) Parameters Type Name Description Term prefix Properties | Improve this Doc View Source Prefix Declaration public virtual Term Prefix { get; } Property Value Type Description Term Methods | Improve this Doc View Source ToString() Prints a user-readable version of this query. Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Search.MultiTermQueryWrapperFilter<Lucene.Net.Search.PrefixQuery>.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixQuery.html",
    "title": "Class PrefixQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixQuery A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by QueryParser for input like app* . This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Inheritance System.Object Query MultiTermQuery PrefixQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixQuery : MultiTermQuery Constructors | Improve this Doc View Source PrefixQuery(Term) Constructs a query for terms starting with prefix . Declaration public PrefixQuery(Term prefix) Parameters Type Name Description Term prefix Properties | Improve this Doc View Source Prefix Returns the prefix of this query. Declaration public virtual Term Prefix { get; } Property Value Type Description Term Methods | 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 MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixTermsEnum.html",
    "title": "Class PrefixTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrefixTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified prefix filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FilteredTermsEnum PrefixTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source PrefixTermsEnum(TermsEnum, BytesRef) Declaration public PrefixTermsEnum(TermsEnum tenum, BytesRef prefixText) Parameters Type Name Description TermsEnum tenum BytesRef prefixText Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Search.Query.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Query.html",
    "title": "Class Query | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Query The abstract base class for queries. Instantiable subclasses are: TermQuery BooleanQuery WildcardQuery PhraseQuery PrefixQuery MultiPhraseQuery FuzzyQuery RegexpQuery TermRangeQuery NumericRangeQuery ConstantScoreQuery DisjunctionMaxQuery MatchAllDocsQuery See also the family of Span Queries ( Lucene.Net.Search.Spans ) and additional queries available in the Queries module Inheritance System.Object Query BooleanQuery ConstantScoreQuery DisjunctionMaxQuery FilteredQuery MatchAllDocsQuery MultiPhraseQuery MultiTermQuery PhraseQuery SpanQuery TermQuery Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Serializable] public abstract class Query Properties | Improve this Doc View Source Boost Gets or Sets the boost for this query clause. Documents matching this clause will (in addition to the normal weightings) have their score multiplied by Boost . The boost is 1.0 by default. Declaration public virtual float Boost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clone() Returns a clone of this query. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CreateWeight(IndexSearcher) Expert: Constructs an appropriate Weight implementation for this query. Only implemented by primitive queries, which re-write to themselves. Declaration public virtual Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight | 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 ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public virtual void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | 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 Rewrite(IndexReader) Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritten into a BooleanQuery that consists of TermQuery s. Declaration public virtual Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query | Improve this Doc View Source ToString() Prints a query to a string. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(String) Prints a query to a string, with field assumed to be the default field and omitted. Declaration public abstract string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.QueryRescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.QueryRescorer.html",
    "title": "Class QueryRescorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryRescorer A Rescorer that uses a provided Query to assign scores to the first-pass hits. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Rescorer QueryRescorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class QueryRescorer : Rescorer Constructors | Improve this Doc View Source QueryRescorer(Query) Sole constructor, passing the 2nd pass query to assign scores to the 1st pass hits. Declaration public QueryRescorer(Query query) Parameters Type Name Description Query query Methods | Improve this Doc View Source Combine(Single, Boolean, Single) Implement this in a subclass to combine the first pass and second pass scores. If secondPassMatches is false then the second pass query failed to match a hit from the first pass query, and you should ignore the secondPassScore . Declaration protected abstract float Combine(float firstPassScore, bool secondPassMatches, float secondPassScore) Parameters Type Name Description System.Single firstPassScore System.Boolean secondPassMatches System.Single secondPassScore Returns Type Description System.Single | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Declaration public override Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation Overrides Rescorer.Explain(IndexSearcher, Explanation, Int32) | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Query, Double, Int32) Sugar API, calling Rescore(IndexSearcher, TopDocs, Int32) using a simple linear combination of firstPassScore + weight * secondPassScore Declaration public static TopDocs Rescore(IndexSearcher searcher, TopDocs topDocs, Query query, double weight, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs topDocs Query query System.Double weight System.Int32 topN Returns Type Description TopDocs | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Declaration public override TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs firstPassTopDocs System.Int32 topN Returns Type Description TopDocs Overrides Rescorer.Rescore(IndexSearcher, TopDocs, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Search.QueryWrapperFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.QueryWrapperFilter.html",
    "title": "Class QueryWrapperFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryWrapperFilter Constrains search results to only match those which also match a provided query. This could be used, for example, with a NumericRangeQuery on a suitably formatted date field to implement date filtering. One could re-use a single CachingWrapperFilter(QueryWrapperFilter) that matches, e.g., only documents modified within the last week. This would only need to be reconstructed once per day. Inheritance System.Object Filter QueryWrapperFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class QueryWrapperFilter : Filter Constructors | Improve this Doc View Source QueryWrapperFilter(Query) Constructs a filter which only matches documents matching query . Declaration public QueryWrapperFilter(Query query) Parameters Type Name Description Query query Properties | Improve this Doc View Source Query Returns the inner Query Declaration public Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | 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()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceContext-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceContext-1.html",
    "title": "Class ReferenceContext<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReferenceContext<T> ReferenceContext<T> holds a reference instance and ensures it is properly de-referenced from its corresponding ReferenceManager<G> when Dispose() is called. This class is primarily intended to be used with a using block. LUCENENET specific Inheritance System.Object ReferenceContext<T> 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.Search Assembly : Lucene.Net.dll Syntax public sealed class ReferenceContext<T> : IDisposable where T : class Type Parameters Name Description T The reference type Properties | Improve this Doc View Source Reference The reference acquired from the ReferenceManager<G> . Declaration public T Reference { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Ensures the reference is properly de-referenced from its ReferenceManager<G> . After this call, Reference will be null . Declaration public void Dispose() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.html",
    "title": "Class ReferenceManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReferenceManager LUCENENET specific class used to provide static access to ReferenceManager.IRefreshListener without having to specifiy the generic closing type of ReferenceManager<G> . Inheritance System.Object ReferenceManager Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class ReferenceManager"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.IRefreshListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.IRefreshListener.html",
    "title": "Interface ReferenceManager.IRefreshListener | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ReferenceManager.IRefreshListener Use to receive notification when a refresh has finished. See AddListener(ReferenceManager.IRefreshListener) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IRefreshListener Methods | Improve this Doc View Source AfterRefresh(Boolean) Called after the attempted refresh; if the refresh did open a new reference then didRefresh will be true and Acquire() is guaranteed to return the new reference. Declaration void AfterRefresh(bool didRefresh) Parameters Type Name Description System.Boolean didRefresh | Improve this Doc View Source BeforeRefresh() Called right before a refresh attempt starts. Declaration void BeforeRefresh()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager-1.html",
    "title": "Class ReferenceManager<G> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReferenceManager<G> Utility class to safely share instances of a certain type across multiple threads, while periodically refreshing them. This class ensures each reference is closed only once all threads have finished using it. It is recommended to consult the documentation of ReferenceManager<G> implementations for their MaybeRefresh() semantics. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager<G> ReaderManager SearcherManager 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.Search Assembly : Lucene.Net.dll Syntax public abstract class ReferenceManager<G> : IDisposable where G : class Type Parameters Name Description G The concrete type that will be Acquire() d and Release(G) d. Properties | Improve this Doc View Source Current The current reference Declaration protected G Current { get; set; } Property Value Type Description G Methods | Improve this Doc View Source Acquire() Obtain the current reference. You must match every call to acquire with one call to Release(G) ; it's best to do so in a finally clause, and set the reference to null to prevent accidental usage after it has been released. Declaration public G Acquire() Returns Type Description G Exceptions Type Condition System.ObjectDisposedException If the reference manager has been Dispose() d. | Improve this Doc View Source AddListener(ReferenceManager.IRefreshListener) Adds a listener, to be notified when a reference is refreshed/swapped. Declaration public virtual void AddListener(ReferenceManager.IRefreshListener listener) Parameters Type Name Description ReferenceManager.IRefreshListener listener | Improve this Doc View Source AfterMaybeRefresh() Called after a refresh was attempted, regardless of whether a new reference was in fact created. Declaration protected virtual void AfterMaybeRefresh() Exceptions Type Condition System.IO.IOException if a low level I/O exception occurs | Improve this Doc View Source DecRef(G) Decrement reference counting on the given reference. Declaration protected abstract void DecRef(G reference) Parameters Type Name Description G reference Exceptions Type Condition System.IO.IOException If reference decrement on the given resource failed. | Improve this Doc View Source Dispose() Closes this ReferenceManager to prevent future Acquire() ing. A reference manager should be disposed if the reference to the managed resource should be disposed or the application using the ReferenceManager<G> is shutting down. The managed resource might not be released immediately, if the ReferenceManager<G> user is holding on to a previously Acquire() d reference. The resource will be released once when the last reference is Release(G) d. Those references can still be used as if the manager was still active. Applications should not Acquire() new references from this manager once this method has been called. Acquire() ing a resource on a disposed ReferenceManager<G> will throw an System.ObjectDisposedException . Declaration public void Dispose() Exceptions Type Condition System.IO.IOException If the underlying reader of the current reference could not be disposed | Improve this Doc View Source Dispose(Boolean) Called after Dispose() , so subclass can free any resources. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Exceptions Type Condition System.IO.IOException if the after dispose operation in a sub-class throws an System.IO.IOException | Improve this Doc View Source GetRefCount(G) Returns the current reference count of the given reference. Declaration protected abstract int GetRefCount(G reference) Parameters Type Name Description G reference Returns Type Description System.Int32 | Improve this Doc View Source MaybeRefresh() You must call this (or MaybeRefreshBlocking() ), periodically, if you want that Acquire() will return refreshed instances. Threads : it's fine for more than one thread to call this at once. Only the first thread will attempt the refresh; subsequent threads will see that another thread is already handling refresh and will return immediately. Note that this means if another thread is already refreshing then subsequent threads will return right away without waiting for the refresh to complete. If this method returns true it means the calling thread either refreshed or that there were no changes to refresh. If it returns false it means another thread is currently refreshing. Declaration public bool MaybeRefresh() Returns Type Description System.Boolean Exceptions Type Condition System.IO.IOException If refreshing the resource causes an System.IO.IOException System.ObjectDisposedException If the reference manager has been Dispose() d. | Improve this Doc View Source MaybeRefreshBlocking() You must call this (or MaybeRefresh() ), periodically, if you want that Acquire() will return refreshed instances. Threads : unlike MaybeRefresh() , if another thread is currently refreshing, this method blocks until that thread completes. It is useful if you want to guarantee that the next call to Acquire() will return a refreshed instance. Otherwise, consider using the non-blocking MaybeRefresh() . Declaration public void MaybeRefreshBlocking() Exceptions Type Condition System.IO.IOException If refreshing the resource causes an System.IO.IOException System.ObjectDisposedException If the reference manager has been Dispose() d. | Improve this Doc View Source RefreshIfNeeded(G) Refresh the given reference if needed. Returns null if no refresh was needed, otherwise a new refreshed reference. Declaration protected abstract G RefreshIfNeeded(G referenceToRefresh) Parameters Type Name Description G referenceToRefresh Returns Type Description G Exceptions Type Condition System.ObjectDisposedException If the reference manager has been Dispose() d. System.IO.IOException If the refresh operation failed | Improve this Doc View Source Release(G) Release the reference previously obtained via Acquire() . NOTE: it's safe to call this after Dispose() . Declaration public void Release(G reference) Parameters Type Name Description G reference Exceptions Type Condition System.IO.IOException If the release operation on the given resource throws an System.IO.IOException | Improve this Doc View Source RemoveListener(ReferenceManager.IRefreshListener) Remove a listener added with AddListener(ReferenceManager.IRefreshListener) . Declaration public virtual void RemoveListener(ReferenceManager.IRefreshListener listener) Parameters Type Name Description ReferenceManager.IRefreshListener listener | Improve this Doc View Source TryIncRef(G) Try to increment reference counting on the given reference. Returns true if the operation was successful. Declaration protected abstract bool TryIncRef(G reference) Parameters Type Name Description G reference Returns Type Description System.Boolean Exceptions Type Condition System.ObjectDisposedException if the reference manager has been Dispose() d. Implements System.IDisposable Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManagerExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManagerExtensions.html",
    "title": "Class ReferenceManagerExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ReferenceManagerExtensions Inheritance System.Object ReferenceManagerExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class ReferenceManagerExtensions Methods | Improve this Doc View Source GetContext<T>(ReferenceManager<T>) Obtain the current reference. Like Acquire() , but intended for use in a using block so calling Release(G) happens implicitly. For example: var searcherManager = new SearcherManager(indexWriter, true, null); using (var context = searcherManager.GetContext()) { IndexSearcher searcher = context.Reference; // use searcher... } Declaration public static ReferenceContext<T> GetContext<T>(this ReferenceManager<T> referenceManager) where T : class Parameters Type Name Description ReferenceManager <T> referenceManager this ReferenceManager<G> Returns Type Description ReferenceContext <T> A ReferenceContext<T> instance that holds the Reference and ensures it is released properly when Dispose() is called. Type Parameters Name Description T The reference type"
  },
  "api/Lucene.Net/Lucene.Net.Search.RegexpQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.RegexpQuery.html",
    "title": "Class RegexpQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RegexpQuery A fast regular expression query based on the Lucene.Net.Util.Automaton package. Comparisons are fast The term dictionary is enumerated in an intelligent way, to avoid comparisons. See AutomatonQuery for more details. The supported syntax is documented in the RegExp class. Note this might be different than other regular expression implementations. For some alternatives with different syntax, look under the sandbox. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow RegexpQuery s, a RegExp term should not start with the expression .* This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query MultiTermQuery AutomatonQuery RegexpQuery Inherited Members AutomatonQuery.m_automaton AutomatonQuery.m_compiled AutomatonQuery.m_term AutomatonQuery.GetTermsEnum(Terms, AttributeSource) AutomatonQuery.GetHashCode() AutomatonQuery.Equals(Object) AutomatonQuery.Automaton MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class RegexpQuery : AutomatonQuery Constructors | Improve this Doc View Source RegexpQuery(Term) Constructs a query for terms matching term . By default, all regular expression features are enabled. Declaration public RegexpQuery(Term term) Parameters Type Name Description Term term Regular expression. | Improve this Doc View Source RegexpQuery(Term, RegExpSyntax) Constructs a query for terms matching term . Declaration public RegexpQuery(Term term, RegExpSyntax flags) Parameters Type Name Description Term term Regular expression. RegExpSyntax flags Optional RegExp features from RegExpSyntax | Improve this Doc View Source RegexpQuery(Term, RegExpSyntax, IAutomatonProvider) Constructs a query for terms matching term . Declaration public RegexpQuery(Term term, RegExpSyntax flags, IAutomatonProvider provider) Parameters Type Name Description Term term Regular expression. RegExpSyntax flags Optional RegExp features from RegExpSyntax IAutomatonProvider provider Custom IAutomatonProvider for named automata Methods | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides AutomatonQuery.ToString(String) See Also RegExp"
  },
  "api/Lucene.Net/Lucene.Net.Search.Rescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Rescorer.html",
    "title": "Class Rescorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Rescorer Re-scores the topN results ( TopDocs ) from an original query. See QueryRescorer for an actual implementation. Typically, you run a low-cost first-pass query across the entire index, collecting the top few hundred hits perhaps, and then use this class to mix in a more costly second pass scoring. See Rescore(IndexSearcher, TopDocs, Query, Double, Int32) for a simple static method to call to rescore using a 2nd pass Query . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Rescorer QueryRescorer SortRescorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Rescorer Methods | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Explains how the score for the specified document was computed. Declaration public abstract Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Rescore an initial first-pass TopDocs . Declaration public abstract TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher IndexSearcher used to produce the first pass topDocs TopDocs firstPassTopDocs Hits from the first pass search. It's very important that these hits were produced by the provided searcher; otherwise the doc IDs will not match! System.Int32 topN How many re-scored hits to return Returns Type Description TopDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoreCachingWrappingScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoreCachingWrappingScorer.html",
    "title": "Class ScoreCachingWrappingScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScoreCachingWrappingScorer A Scorer which wraps another scorer and caches the score of the current document. Successive calls to GetScore() will return the same result and will not invoke the wrapped Scorer's GetScore() method, unless the current document has changed. This class might be useful due to the changes done to the ICollector interface, in which the score is not computed for a document by default, only if the collector requests it. Some collectors may need to use the score in several places, however all they have in hand is a Scorer object, and might end up computing the score of a document more than once. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ScoreCachingWrappingScorer Inherited Members Scorer.m_weight Scorer.Weight DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ScoreCachingWrappingScorer : Scorer Constructors | Improve this Doc View Source ScoreCachingWrappingScorer(Scorer) Creates a new instance by wrapping the given scorer. Declaration public ScoreCachingWrappingScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetChildren() Declaration public override ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description System.Collections.Generic.ICollection < Scorer.ChildScorer > Overrides Scorer.GetChildren() | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoreDoc.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoreDoc.html",
    "title": "Class ScoreDoc | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScoreDoc Holds one hit in TopDocs . Inheritance System.Object ScoreDoc FieldDoc FieldValueHitQueue.Entry 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) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ScoreDoc Constructors | Improve this Doc View Source ScoreDoc(Int32, Single) Constructs a ScoreDoc . Declaration public ScoreDoc(int doc, float score) Parameters Type Name Description System.Int32 doc System.Single score | Improve this Doc View Source ScoreDoc(Int32, Single, Int32) Constructs a ScoreDoc . Declaration public ScoreDoc(int doc, float score, int shardIndex) Parameters Type Name Description System.Int32 doc System.Single score System.Int32 shardIndex Properties | Improve this Doc View Source Doc A hit document's number. Declaration public int Doc { get; set; } Property Value Type Description System.Int32 See Also Doc(Int32) | Improve this Doc View Source Score The score of this document for the query. Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source ShardIndex Only set by Merge(Sort, Int32, Int32, TopDocs[]) Declaration public int ShardIndex { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() A convenience method for debugging. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Scorer.ChildScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Scorer.ChildScorer.html",
    "title": "Class Scorer.ChildScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Scorer.ChildScorer A child Scorer and its relationship to its parent. The meaning of the relationship depends upon the parent query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Scorer.ChildScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ChildScorer Constructors | Improve this Doc View Source ChildScorer(Scorer, String) Creates a new Scorer.ChildScorer node with the specified relationship. The relationship can be any be any string that makes sense to the parent Scorer . Declaration public ChildScorer(Scorer child, string relationship) Parameters Type Name Description Scorer child System.String relationship Properties | Improve this Doc View Source Child Child Scorer . (note this is typically a direct child, and may itself also have children). Declaration public Scorer Child { get; } Property Value Type Description Scorer | Improve this Doc View Source Relationship An arbitrary string relating this scorer to the parent. Declaration public string Relationship { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Scorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Scorer.html",
    "title": "Class Scorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Scorer Expert: Common scoring functionality for different types of queries. A Scorer iterates over documents matching a query in increasing order of doc Id. Document scores are computed using a given Similarity implementation. NOTE : The values System.Single.NaN , System.Single.NegativeInfinity and System.Single.PositiveInfinity are not valid scores. Certain collectors (eg TopScoreDocCollector ) will not properly collect hits with these scores. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ConstantScoreQuery.ConstantScorer ScoreCachingWrappingScorer SpanScorer Inherited Members DocsEnum.Freq DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Scorer : DocsEnum Constructors | Improve this Doc View Source Scorer(Weight) Constructs a Scorer Declaration protected Scorer(Weight weight) Parameters Type Name Description Weight weight The scorers Weight . Fields | Improve this Doc View Source m_weight The Scorer 's parent Weight . In some cases this may be null . Declaration protected readonly Weight m_weight Field Value Type Description Weight Properties | Improve this Doc View Source Weight returns parent Weight This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Weight Weight { get; } Property Value Type Description Weight Methods | Improve this Doc View Source GetChildren() Returns child sub-scorers This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description System.Collections.Generic.ICollection < Scorer.ChildScorer > | Improve this Doc View Source GetScore() Returns the score of the current document matching the query. Initially invalid, until NextDoc() or Advance(Int32) is called the first time, or when called from within Collect(Int32) . Declaration public abstract float GetScore() Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoringRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoringRewrite-1.html",
    "title": "Class ScoringRewrite<Q> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ScoringRewrite<Q> Base rewrite method that translates each term into a query, and keeps the scores as computed by the query. This is a Lucene.NET INTERNAL API, use at your own risk Only public to be accessible by spans package. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite <Q> ScoringRewrite<Q> Inherited Members TermCollectingRewrite<Q>.GetTopLevelQuery() TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single) TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single, TermContext) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class ScoringRewrite<Q> : TermCollectingRewrite<Q> where Q : Query Type Parameters Name Description Q Fields | Improve this Doc View Source CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Like SCORING_BOOLEAN_QUERY_REWRITE except scores are not computed. Instead, each matching document receives a constant score equal to the query's boost. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source SCORING_BOOLEAN_QUERY_REWRITE A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Note that typically such scores are meaningless to the user, and require non-trivial CPU to compute, so it's almost always better to use CONSTANT_SCORE_AUTO_REWRITE_DEFAULT instead. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly ScoringRewrite<BooleanQuery> SCORING_BOOLEAN_QUERY_REWRITE Field Value Type Description ScoringRewrite < BooleanQuery > See Also MultiTermRewriteMethod Methods | Improve this Doc View Source CheckMaxClauseCount(Int32) This method is called after every new term to check if the number of max clauses (e.g. in BooleanQuery ) is not exceeded. Throws the corresponding System.Exception . Declaration protected abstract void CheckMaxClauseCount(int count) Parameters Type Name Description System.Int32 count | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherFactory.html",
    "title": "Class SearcherFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearcherFactory Factory class used by SearcherManager to create new IndexSearcher s. The default implementation just creates an IndexSearcher with no custom behavior: public IndexSearcher NewSearcher(IndexReader r) { return new IndexSearcher(r); } You can pass your own factory instead if you want custom behavior, such as: Setting a custom scoring model: Similarity Parallel per-segment search: IndexSearcher(IndexReader, TaskScheduler) Return custom subclasses of IndexSearcher (for example that implement distributed scoring) Run queries to warm your IndexSearcher before it is used. Note: when using near-realtime search you may want to also set MergedSegmentWarmer to warm newly merged segments in the background, outside of the reopen path. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SearcherFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SearcherFactory Methods | Improve this Doc View Source NewSearcher(IndexReader) Returns a new IndexSearcher over the given reader. Declaration public virtual IndexSearcher NewSearcher(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description IndexSearcher"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.html",
    "title": "Class SearcherLifetimeManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearcherLifetimeManager Keeps track of current plus old IndexSearcher s, disposing the old ones once they have timed out. Use it like this: SearcherLifetimeManager mgr = new SearcherLifetimeManager(); Per search-request, if it's a \"new\" search request, then obtain the latest searcher you have (for example, by using SearcherManager ), and then record this searcher: // Record the current searcher, and save the returend // token into user's search results (eg as a hidden // HTML form field): long token = mgr.Record(searcher); When a follow-up search arrives, for example the user clicks next page, drills down/up, etc., take the token that you saved from the previous search and: // If possible, obtain the same searcher as the last // search: IndexSearcher searcher = mgr.Acquire(token); if (searcher != null) { // Searcher is still here try { // do searching... } finally { mgr.Release(searcher); // Do not use searcher after this! searcher = null; } } else { // Searcher was pruned -- notify user session timed // out, or, pull fresh searcher again } Finally, in a separate thread, ideally the same thread that's periodically reopening your searchers, you should periodically prune old searchers: mgr.Prune(new PruneByAge(600.0)); NOTE : keeping many searchers around means you'll use more resources (open files, RAM) than a single searcher. However, as long as you are using OpenIfChanged(DirectoryReader) , the searchers will usually share almost all segments and the added resource usage is contained. When a large merge has completed, and you reopen, because that is a large change, the new searcher will use higher additional RAM than other searchers; but large merges don't complete very often and it's unlikely you'll hit two of them in your expiration window. Still you should budget plenty of heap in the runtime to have a good safety margin. Inheritance System.Object SearcherLifetimeManager 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.Search Assembly : Lucene.Net.dll Syntax public class SearcherLifetimeManager : IDisposable Methods | Improve this Doc View Source Acquire(Int64) Retrieve a previously recorded IndexSearcher , if it has not yet been closed. NOTE : this may return null when the requested searcher has already timed out. When this happens you should notify your user that their session timed out and that they'll have to restart their search. If this returns a non-null result, you must match later call Release(IndexSearcher) on this searcher, best from a finally clause. Declaration public virtual IndexSearcher Acquire(long version) Parameters Type Name Description System.Int64 version Returns Type Description IndexSearcher | Improve this Doc View Source Dispose() Close this to future searching; any searches still in process in other threads won't be affected, and they should still call Release(IndexSearcher) after they are done. NOTE : you must ensure no other threads are calling Record(IndexSearcher) while you call Dispose(); otherwise it's possible not all searcher references will be freed. Declaration public virtual void Dispose() | Improve this Doc View Source Prune(SearcherLifetimeManager.IPruner) Calls provided SearcherLifetimeManager.IPruner to prune entries. The entries are passed to the SearcherLifetimeManager.IPruner in sorted (newest to oldest IndexSearcher ) order. NOTE : you must peridiocally call this, ideally from the same background thread that opens new searchers. Declaration public virtual void Prune(SearcherLifetimeManager.IPruner pruner) Parameters Type Name Description SearcherLifetimeManager.IPruner pruner | Improve this Doc View Source Record(IndexSearcher) Records that you are now using this IndexSearcher . Always call this when you've obtained a possibly new IndexSearcher , for example from SearcherManager . It's fine if you already passed the same searcher to this method before. This returns the System.Int64 token that you can later pass to Acquire(Int64) to retrieve the same IndexSearcher . You should record this System.Int64 token in the search results sent to your user, such that if the user performs a follow-on action (clicks next page, drills down, etc.) the token is returned. Declaration public virtual long Record(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description System.Int64 | Improve this Doc View Source Release(IndexSearcher) Release a searcher previously obtained from Acquire(Int64) . NOTE : it's fine to call this after Dispose(). Declaration public virtual void Release(IndexSearcher s) Parameters Type Name Description IndexSearcher s Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.IPruner.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.IPruner.html",
    "title": "Interface SearcherLifetimeManager.IPruner | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface SearcherLifetimeManager.IPruner See Prune(SearcherLifetimeManager.IPruner) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IPruner Methods | Improve this Doc View Source DoPrune(Double, IndexSearcher) Return true if this searcher should be removed. Declaration bool DoPrune(double ageSec, IndexSearcher searcher) Parameters Type Name Description System.Double ageSec How much time has passed since this searcher was the current (live) searcher IndexSearcher searcher Searcher Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.PruneByAge.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.PruneByAge.html",
    "title": "Class SearcherLifetimeManager.PruneByAge | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearcherLifetimeManager.PruneByAge Simple pruner that drops any searcher older by more than the specified seconds, than the newest searcher. Inheritance System.Object SearcherLifetimeManager.PruneByAge Implements SearcherLifetimeManager.IPruner Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class PruneByAge : SearcherLifetimeManager.IPruner Constructors | Improve this Doc View Source PruneByAge(Double) Declaration public PruneByAge(double maxAgeSec) Parameters Type Name Description System.Double maxAgeSec Methods | Improve this Doc View Source DoPrune(Double, IndexSearcher) Declaration public bool DoPrune(double ageSec, IndexSearcher searcher) Parameters Type Name Description System.Double ageSec IndexSearcher searcher Returns Type Description System.Boolean Implements SearcherLifetimeManager.IPruner"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherManager.html",
    "title": "Class SearcherManager | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SearcherManager Utility class to safely share IndexSearcher instances across multiple threads, while periodically reopening. This class ensures each searcher is disposed only once all threads have finished using it. Use Acquire() to obtain the current searcher, and Release(G) to release it, like this: IndexSearcher s = manager.Acquire(); try { // Do searching, doc retrieval, etc. with s } finally { manager.Release(s); // Do not use s after this! s = null; } In addition you should periodically call MaybeRefresh() . While it's possible to call this just before running each query, this is discouraged since it penalizes the unlucky queries that do the reopen. It's better to use a separate background thread, that periodically calls MaybeRefresh() . Finally, be sure to call Dispose() once you are done. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager < IndexSearcher > SearcherManager Implements System.IDisposable Inherited Members ReferenceManager<IndexSearcher>.Current ReferenceManager<IndexSearcher>.Acquire() ReferenceManager<IndexSearcher>.Dispose() ReferenceManager<IndexSearcher>.Dispose(Boolean) ReferenceManager<IndexSearcher>.MaybeRefresh() ReferenceManager<IndexSearcher>.MaybeRefreshBlocking() ReferenceManager<IndexSearcher>.AfterMaybeRefresh() ReferenceManager<IndexSearcher>.Release(IndexSearcher) ReferenceManager<IndexSearcher>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<IndexSearcher>.RemoveListener(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.Search Assembly : Lucene.Net.dll Syntax public sealed class SearcherManager : ReferenceManager<IndexSearcher>, IDisposable Constructors | Improve this Doc View Source SearcherManager(IndexWriter, Boolean, SearcherFactory) Creates and returns a new SearcherManager from the given IndexWriter . Declaration public SearcherManager(IndexWriter writer, bool applyAllDeletes, SearcherFactory searcherFactory) Parameters Type Name Description IndexWriter writer The IndexWriter to open the IndexReader from. System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the IndexSearcher / DirectoryReader . If false , the deletes may or may not be applied, but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . See OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . SearcherFactory searcherFactory An optional SearcherFactory . Pass null if you don't require the searcher to be warmed before going live or other custom behavior. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SearcherManager(Directory, SearcherFactory) Creates and returns a new SearcherManager from the given Directory . Declaration public SearcherManager(Directory dir, SearcherFactory searcherFactory) Parameters Type Name Description Directory dir The directory to open the DirectoryReader on. SearcherFactory searcherFactory An optional SearcherFactory . Pass null if you don't require the searcher to be warmed before going live or other custom behavior. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error Methods | Improve this Doc View Source DecRef(IndexSearcher) Declaration protected override void DecRef(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.DecRef(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source GetRefCount(IndexSearcher) Declaration protected override int GetRefCount(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.GetRefCount(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source GetSearcher(SearcherFactory, IndexReader) Expert: creates a searcher from the provided IndexReader using the provided SearcherFactory . NOTE: this decRefs incoming reader on throwing an exception. Declaration public static IndexSearcher GetSearcher(SearcherFactory searcherFactory, IndexReader reader) Parameters Type Name Description SearcherFactory searcherFactory IndexReader reader Returns Type Description IndexSearcher | Improve this Doc View Source IsSearcherCurrent() Returns true if no changes have occured since this searcher ie. reader was opened, otherwise false . Declaration public bool IsSearcherCurrent() Returns Type Description System.Boolean See Also IsCurrent () | Improve this Doc View Source RefreshIfNeeded(IndexSearcher) Declaration protected override IndexSearcher RefreshIfNeeded(IndexSearcher referenceToRefresh) Parameters Type Name Description IndexSearcher referenceToRefresh Returns Type Description IndexSearcher Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.RefreshIfNeeded(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source TryIncRef(IndexSearcher) Declaration protected override bool TryIncRef(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.TryIncRef(Lucene.Net.Search.IndexSearcher) Implements System.IDisposable Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>) See Also SearcherFactory"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.html",
    "title": "Class AfterEffect | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AfterEffect This class acts as the base class for the implementations of the first normalization of the informative content in the DFR framework. This component is also called the after effect and is defined by the formula Inf 2 = 1 - Prob 2 , where Prob 2 measures the information gain . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AfterEffect AfterEffect.NoAfterEffect AfterEffectB AfterEffectL 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class AfterEffect Constructors | Improve this Doc View Source AfterEffect() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public AfterEffect() Methods | Improve this Doc View Source Explain(BasicStats, Single) Returns an explanation for the score. Declaration public abstract Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single) Returns the aftereffect score. Declaration public abstract float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the after effect formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.NoAfterEffect.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.NoAfterEffect.html",
    "title": "Class AfterEffect.NoAfterEffect | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AfterEffect.NoAfterEffect Implementation used when there is no aftereffect. Inheritance System.Object AfterEffect AfterEffect.NoAfterEffect 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public sealed class NoAfterEffect : AfterEffect Constructors | Improve this Doc View Source NoAfterEffect() Sole constructor: parameter-free Declaration public NoAfterEffect() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectB.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectB.html",
    "title": "Class AfterEffectB | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AfterEffectB Model of the information gain based on the ratio of two Bernoulli processes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AfterEffect AfterEffectB 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class AfterEffectB : AfterEffect Constructors | Improve this Doc View Source AfterEffectB() Sole constructor: parameter-free Declaration public AfterEffectB() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectL.html",
    "title": "Class AfterEffectL | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AfterEffectL Model of the information gain based on Laplace's law of succession. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AfterEffect AfterEffectL 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class AfterEffectL : AfterEffect Constructors | Improve this Doc View Source AfterEffectL() Sole constructor: parameter-free Declaration public AfterEffectL() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModel.html",
    "title": "Class BasicModel | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModel This class acts as the base class for the specific basic model implementations in the DFR framework. Basic models compute the informative content Inf 1 = -log 2 Prob 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelBE BasicModelD BasicModelG BasicModelIF BasicModelIn BasicModelIne BasicModelP 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class BasicModel Constructors | Improve this Doc View Source BasicModel() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public BasicModel() Methods | Improve this Doc View Source Explain(BasicStats, Single) Returns an explanation for the score. Most basic models use the number of documents and the total term frequency to compute Inf 1 . this method provides a generic explanation for such models. Subclasses that use other statistics must override this method. Declaration public virtual Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single) Returns the informative content score. Declaration public abstract float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the basic model formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelBE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelBE.html",
    "title": "Class BasicModelBE | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModelBE Limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by tfn+1 and N is increased by F This is a Lucene.NET EXPERIMENTAL API, use at your own risk NOTE: in some corner cases this model may give poor performance with Normalizations that return large values for tfn such as NormalizationH3 . Consider using the geometric approximation ( BasicModelG ) instead, which provides the same relevance but with less practical problems. Inheritance System.Object BasicModel BasicModelBE Inherited Members BasicModel.Explain(BasicStats, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelBE : BasicModel Constructors | Improve this Doc View Source BasicModelBE() Sole constructor: parameter-free Declaration public BasicModelBE() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelD.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelD.html",
    "title": "Class BasicModelD | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModelD Implements the approximation of the binomial model with the divergence for DFR. The formula used in Lucene differs slightly from the one in the original paper: to avoid underflow for small values of N and F , N is increased by 1 and F is always increased by tfn+1 . WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelD Inherited Members BasicModel.Explain(BasicStats, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelD : BasicModel Constructors | Improve this Doc View Source BasicModelD() Sole constructor: parameter-free Declaration public BasicModelD() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelG.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelG.html",
    "title": "Class BasicModelG | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModelG Geometric as limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by 1 and N is increased by F . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelG Inherited Members BasicModel.Explain(BasicStats, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelG : BasicModel Constructors | Improve this Doc View Source BasicModelG() Sole constructor: parameter-free Declaration public BasicModelG() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIF.html",
    "title": "Class BasicModelIF | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModelIF An approximation of the I(n e ) model. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIF Inherited Members BasicModel.Explain(BasicStats, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIF : BasicModel Constructors | Improve this Doc View Source BasicModelIF() Sole constructor: parameter-free Declaration public BasicModelIF() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIn.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIn.html",
    "title": "Class BasicModelIn | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModelIn The basic tf-idf model of randomness. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIn 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIn : BasicModel Constructors | Improve this Doc View Source BasicModelIn() Sole constructor: parameter-free Declaration public BasicModelIn() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides BasicModel.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIne.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIne.html",
    "title": "Class BasicModelIne | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModelIne Tf-idf model of randomness, based on a mixture of Poisson and inverse document frequency. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIne Inherited Members BasicModel.Explain(BasicStats, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIne : BasicModel Constructors | Improve this Doc View Source BasicModelIne() Sole constructor: parameter-free Declaration public BasicModelIne() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelP.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelP.html",
    "title": "Class BasicModelP | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicModelP Implements the Poisson approximation for the binomial model for DFR. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. Inheritance System.Object BasicModel BasicModelP Inherited Members BasicModel.Explain(BasicStats, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelP : BasicModel Constructors | Improve this Doc View Source BasicModelP() Sole constructor: parameter-free Declaration public BasicModelP() Fields | Improve this Doc View Source LOG2_E log2(Math.E) , precomputed. Declaration protected static double LOG2_E Field Value Type Description System.Double Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicStats.html",
    "title": "Class BasicStats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicStats Stores all statistics commonly used ranking methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity.SimWeight BasicStats LMSimilarity.LMStats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicStats : Similarity.SimWeight Constructors | Improve this Doc View Source BasicStats(String, Single) Constructor. Sets the query boost. Declaration public BasicStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Fields | Improve this Doc View Source m_avgFieldLength The average field length. Declaration protected float m_avgFieldLength Field Value Type Description System.Single | Improve this Doc View Source m_docFreq The document frequency. Declaration protected long m_docFreq Field Value Type Description System.Int64 | Improve this Doc View Source m_numberOfDocuments The number of documents. Declaration protected long m_numberOfDocuments Field Value Type Description System.Int64 | Improve this Doc View Source m_numberOfFieldTokens The total number of tokens in the field. Declaration protected long m_numberOfFieldTokens Field Value Type Description System.Int64 | Improve this Doc View Source m_queryBoost Query's inner boost. Declaration protected readonly float m_queryBoost Field Value Type Description System.Single | Improve this Doc View Source m_topLevelBoost Any outer query's boost. Declaration protected float m_topLevelBoost Field Value Type Description System.Single | Improve this Doc View Source m_totalBoost For most Similarities, the immediate and the top level query boosts are not handled differently. Hence, this field is just the product of the other two. Declaration protected float m_totalBoost Field Value Type Description System.Single | Improve this Doc View Source m_totalTermFreq The total number of occurrences of this term across all documents. Declaration protected long m_totalTermFreq Field Value Type Description System.Int64 Properties | Improve this Doc View Source AvgFieldLength Returns the average field length. Declaration public virtual float AvgFieldLength { get; set; } Property Value Type Description System.Single | Improve this Doc View Source DocFreq Returns the document frequency. Declaration public virtual long DocFreq { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source Field The field. Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source NumberOfDocuments Gets or Sets the number of documents. Declaration public virtual long NumberOfDocuments { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source NumberOfFieldTokens Returns the total number of tokens in the field. Declaration public virtual long NumberOfFieldTokens { get; set; } Property Value Type Description System.Int64 See Also SumTotalTermFreq | Improve this Doc View Source TotalBoost Returns the total boost. Declaration public virtual float TotalBoost { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term across all documents. Declaration public virtual long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetValueForNormalization() The square of the raw normalization value. Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Similarity.SimWeight.GetValueForNormalization() See Also RawNormalizationValue() | Improve this Doc View Source Normalize(Single, Single) No normalization is done. topLevelBoost is saved in the object, however. Declaration public override void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost Overrides Similarity.SimWeight.Normalize(Single, Single) | Improve this Doc View Source RawNormalizationValue() Computes the raw normalization value. This basic implementation returns the query boost. Subclasses may override this method to include other factors (such as idf), or to save the value for inclusion in Normalize(Single, Single) , etc. Declaration protected virtual float RawNormalizationValue() Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BM25Similarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BM25Similarity.html",
    "title": "Class BM25Similarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BM25Similarity BM25 Similarity. Introduced in Stephen E. Robertson, Steve Walker, Susan Jones, Micheline Hancock-Beaulieu, and Mike Gatford. Okapi at TREC-3. In Proceedings of the Third T ext RE trieval C onference (TREC 1994). Gaithersburg, USA, November 1994. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity BM25Similarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BM25Similarity : Similarity Constructors | Improve this Doc View Source BM25Similarity() BM25 with these default values: k1 = 1.2 , b = 0.75 . Declaration public BM25Similarity() | Improve this Doc View Source BM25Similarity(Single, Single) BM25 with the supplied parameter values. Declaration public BM25Similarity(float k1, float b) Parameters Type Name Description System.Single k1 Controls non-linear term frequency normalization (saturation). System.Single b Controls to what degree document length normalizes tf values. Properties | Improve this Doc View Source B Returns the b parameter Declaration public virtual float B { get; } Property Value Type Description System.Single See Also BM25Similarity(Single, Single) | Improve this Doc View Source DiscountOverlaps Gets or Sets whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true, meaning overlap tokens do not count when computing norms. Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source K1 Returns the k1 parameter Declaration public virtual float K1 { get; } Property Value Type Description System.Single See Also BM25Similarity(Single, Single) Methods | Improve this Doc View Source AvgFieldLength(CollectionStatistics) The default implementation computes the average as sumTotalTermFreq / maxDoc , or returns 1 if the index does not store sumTotalTermFreq (Lucene 3.x indexes or any field that omits frequency information). Declaration protected virtual float AvgFieldLength(CollectionStatistics collectionStats) Parameters Type Name Description CollectionStatistics collectionStats Returns Type Description System.Single | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source DecodeNormValue(Byte) The default implementation returns 1 / f 2 where f is Byte315ToSingle(Byte) . Declaration protected virtual float DecodeNormValue(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single, Int32) The default implementation encodes boost / sqrt(length) with SingleToByte315(Single) . This is compatible with Lucene's default implementation. If you change this, then you should change DecodeNormValue(Byte) to match. Declaration protected virtual byte EncodeNormValue(float boost, int fieldLength) Parameters Type Name Description System.Single boost System.Int32 fieldLength Returns Type Description System.Byte | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Idf(Int64, Int64) Implemented as log(1 + (numDocs - docFreq + 0.5)/(docFreq + 0.5)) . Declaration protected virtual float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq System.Int64 numDocs Returns Type Description System.Single | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics) Computes a score factor for a simple term and returns an explanation for that score factor. The default implementation uses: Idf(docFreq, searcher.MaxDoc); Note that MaxDoc is used instead of NumDocs because also DocFreq is used, and when the latter is inaccurate, so is MaxDoc , and in the same direction. In addition, MaxDoc is more efficient to compute Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description CollectionStatistics collectionStats collection-level statistics TermStatistics termStats term-level statistics for the term Returns Type Description Explanation an Explanation object that includes both an idf score factor and an explanation for the term. | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics[]) Computes a score factor for a phrase. The default implementation sums the idf factor for each term in the phrase. Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics[] termStats) Parameters Type Name Description CollectionStatistics collectionStats collection-level statistics TermStatistics [] termStats term-level statistics for the terms in the phrase Returns Type Description Explanation an Explanation object that includes both an idf score factor for the phrase and an explanation for each term. | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) The default implementation returns 1 Declaration protected virtual float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single | Improve this Doc View Source SloppyFreq(Int32) Implemented as 1 / (distance + 1) . Declaration protected virtual float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DefaultSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DefaultSimilarity.html",
    "title": "Class DefaultSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DefaultSimilarity Expert: Default scoring implementation which encodes ( EncodeNormValue(Single) ) norm values as a single byte before being stored. At search time, the norm byte value is read from the index Directory and decoded ( DecodeNormValue(Int64) ) back to a float norm value. this encoding/decoding, while reducing index size, comes with the price of precision loss - it is not guaranteed that Decode(Encode(x)) = x . For instance, Decode(Encode(0.89)) = 0.75 . Compression of norm values to a single byte saves memory at search time, because once a field is referenced at search time, its norms - for all documents - are maintained in memory. The rationale supporting such lossy compression of norm values is that given the difficulty (and inaccuracy) of users to express their true information need by a query, only big differences matter. Last, note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity Inherited Members TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics) TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics[]) TFIDFSimilarity.ComputeNorm(FieldInvertState) TFIDFSimilarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) TFIDFSimilarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DefaultSimilarity : TFIDFSimilarity Constructors | Improve this Doc View Source DefaultSimilarity() Sole constructor: parameter-free Declaration public DefaultSimilarity() Fields | Improve this Doc View Source m_discountOverlaps True if overlap tokens (tokens with a position of increment of zero) are discounted from the document's length. Declaration protected bool m_discountOverlaps Field Value Type Description System.Boolean Properties | Improve this Doc View Source DiscountOverlaps Determines whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true, meaning overlap tokens do not count when computing norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean See Also ComputeNorm ( FieldInvertState ) Methods | Improve this Doc View Source Coord(Int32, Int32) Implemented as overlap / maxOverlap . Declaration public override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single Overrides TFIDFSimilarity.Coord(Int32, Int32) | Improve this Doc View Source DecodeNormValue(Int64) Decodes the norm value, assuming it is a single byte. Declaration public override sealed float DecodeNormValue(long norm) Parameters Type Name Description System.Int64 norm Returns Type Description System.Single Overrides TFIDFSimilarity.DecodeNormValue(Int64) See Also EncodeNormValue(Single) | Improve this Doc View Source EncodeNormValue(Single) Encodes a normalization factor for storage in an index. The encoding uses a three-bit mantissa, a five-bit exponent, and the zero-exponent point at 15, thus representing values from around 7x10^9 to 2x10^-9 with about one significant decimal digit of accuracy. Zero is also represented. Negative numbers are rounded up to zero. Values too large to represent are rounded down to the largest representable value. Positive values too small to represent are rounded up to the smallest positive representable value. Declaration public override sealed long EncodeNormValue(float f) Parameters Type Name Description System.Single f Returns Type Description System.Int64 Overrides TFIDFSimilarity.EncodeNormValue(Single) See Also Boost SmallSingle | Improve this Doc View Source Idf(Int64, Int64) Implemented as log(numDocs/(docFreq+1)) + 1 . Declaration public override float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq System.Int64 numDocs Returns Type Description System.Single Overrides TFIDFSimilarity.Idf(Int64, Int64) | Improve this Doc View Source LengthNorm(FieldInvertState) Implemented as state.Boost * LengthNorm(numTerms) , where numTerms is Length if DiscountOverlaps is false , else it's Length - NumOverlap . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public override float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Single Overrides TFIDFSimilarity.LengthNorm(FieldInvertState) | Improve this Doc View Source QueryNorm(Single) Implemented as 1/sqrt(sumOfSquaredWeights) . Declaration public override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights Returns Type Description System.Single Overrides TFIDFSimilarity.QueryNorm(Single) | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) The default implementation returns 1 Declaration public override float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single Overrides TFIDFSimilarity.ScorePayload(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source SloppyFreq(Int32) Implemented as 1 / (distance + 1) . Declaration public override float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single Overrides TFIDFSimilarity.SloppyFreq(Int32) | Improve this Doc View Source Tf(Single) Implemented as Math.Sqrt(freq) . Declaration public override float Tf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single Overrides TFIDFSimilarity.Tf(Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DFRSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DFRSimilarity.html",
    "title": "Class DFRSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DFRSimilarity Implements the divergence from randomness (DFR) framework introduced in Gianni Amati and Cornelis Joost Van Rijsbergen. 2002. Probabilistic models of information retrieval based on measuring the divergence from randomness. ACM Trans. Inf. Syst. 20, 4 (October 2002), 357-389. The DFR scoring formula is composed of three separate components: the basic model , the aftereffect and an additional normalization component, represented by the classes BasicModel , AfterEffect and Normalization , respectively. The names of these classes were chosen to match the names of their counterparts in the Terrier IR engine. To construct a DFRSimilarity , you must specify the implementations for all three components of DFR: ComponentImplementations BasicModel : Basic model of information content: BasicModelBE : Limiting form of Bose-Einstein BasicModelG : Geometric approximation of Bose-Einstein BasicModelP : Poisson approximation of the Binomial BasicModelD : Divergence approximation of the Binomial BasicModelIn : Inverse document frequency BasicModelIne : Inverse expected document frequency [mixture of Poisson and IDF] BasicModelIF : Inverse term frequency [approximation of I(ne)] AfterEffect : First normalization of information gain: AfterEffectL : Laplace's law of succession AfterEffectB : Ratio of two Bernoulli processes AfterEffect.NoAfterEffect : no first normalization Normalization : Second (length) normalization: NormalizationH1 : Uniform distribution of term frequency NormalizationH2 : term frequency density inversely related to length NormalizationH3 : term frequency normalization provided by Dirichlet prior NormalizationZ : term frequency normalization provided by a Zipfian relation Normalization.NoNormalization : no second normalization Note that qtf , the multiplicity of term-occurrence in the query, is not handled by this implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase DFRSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.NewStats(String, Single) SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DFRSimilarity : SimilarityBase Constructors | Improve this Doc View Source DFRSimilarity(BasicModel, AfterEffect, Normalization) Creates DFRSimilarity from the three components. Note that null values are not allowed: if you want no normalization or after-effect, instead pass Normalization.NoNormalization or AfterEffect.NoAfterEffect respectively. Declaration public DFRSimilarity(BasicModel basicModel, AfterEffect afterEffect, Normalization normalization) Parameters Type Name Description BasicModel basicModel Basic model of information content AfterEffect afterEffect First normalization of information gain Normalization normalization Second (length) normalization Fields | Improve this Doc View Source m_afterEffect The first normalization of the information content. Declaration protected readonly AfterEffect m_afterEffect Field Value Type Description AfterEffect | Improve this Doc View Source m_basicModel The basic model for information content. Declaration protected readonly BasicModel m_basicModel Field Value Type Description BasicModel | Improve this Doc View Source m_normalization The term frequency normalization. Declaration protected readonly Normalization m_normalization Field Value Type Description Normalization Properties | Improve this Doc View Source AfterEffect Returns the first normalization Declaration public virtual AfterEffect AfterEffect { get; } Property Value Type Description AfterEffect | Improve this Doc View Source BasicModel Returns the basic model of information content Declaration public virtual BasicModel BasicModel { get; } Property Value Type Description BasicModel | Improve this Doc View Source Normalization Returns the second normalization Declaration public virtual Normalization Normalization { get; } Property Value Type Description Normalization Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() See Also BasicModel AfterEffect Normalization"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Distribution.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Distribution.html",
    "title": "Class Distribution | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Distribution The probabilistic distribution used to model term occurrence in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionLL DistributionSPL 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Distribution Constructors | Improve this Doc View Source Distribution() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Distribution() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Explains the score. Returns the name of the model only, since both tfn and lambda are explained elsewhere. Declaration public virtual Explanation Explain(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single, Single) Computes the score. Declaration public abstract float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the name of the distribution. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also IBSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionLL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionLL.html",
    "title": "Class DistributionLL | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DistributionLL Log-logistic distribution. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionLL Inherited Members Distribution.Explain(BasicStats, Single, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DistributionLL : Distribution Constructors | Improve this Doc View Source DistributionLL() Sole constructor: parameter-free Declaration public DistributionLL() Methods | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override sealed float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single Overrides Distribution.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Distribution.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionSPL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionSPL.html",
    "title": "Class DistributionSPL | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DistributionSPL The smoothed power-law (SPL) distribution for the information-based framework that is described in the original paper. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionSPL Inherited Members Distribution.Explain(BasicStats, Single, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DistributionSPL : Distribution Constructors | Improve this Doc View Source DistributionSPL() Sole constructor: parameter-free Declaration public DistributionSPL() Methods | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override sealed float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single Overrides Distribution.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Distribution.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.html",
    "title": "Namespace Lucene.Net.Search.Similarities | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Similarities <!-- 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 package contains the various ranking models that can be used in Lucene. The abstract class Similarity serves as the base for ranking functions. For searching, users can employ the models already implemented or create their own by extending one of the classes in this package. Table Of Contents Summary of the Ranking Methods 2. Changing the Similarity Summary of the Ranking Methods DefaultSimilarity is the original Lucene scoring function. It is based on a highly optimized Vector Space Model . For more information, see TFIDFSimilarity . BM25Similarity is an optimized implementation of the successful Okapi BM25 model. SimilarityBase provides a basic implementation of the Similarity contract and exposes a highly simplified interface, which makes it an ideal starting point for new ranking functions. Lucene ships the following methods built on SimilarityBase : * Amati and Rijsbergen's {@linkplain org.apache.lucene.search.similarities.DFRSimilarity DFR} framework; * Clinchant and Gaussier's {@linkplain org.apache.lucene.search.similarities.IBSimilarity Information-based models} for IR; * The implementation of two {@linkplain org.apache.lucene.search.similarities.LMSimilarity language models} from Zhai and Lafferty's paper. Since SimilarityBase is not optimized to the same extent as DefaultSimilarity and BM25Similarity , a difference in performance is to be expected when using the methods listed above. However, optimizations can always be implemented in subclasses; see below . Changing Similarity Chances are the available Similarities are sufficient for all your searching needs. However, in some applications it may be necessary to customize your Similarity implementation. For instance, some applications do not need to distinguish between shorter and longer documents (see a \"fair\" similarity ). To change Similarity , one must do so for both indexing and searching, and the changes must happen before either of these actions take place. Although in theory there is nothing stopping you from changing mid-stream, it just isn't well-defined what is going to happen. To make this change, implement your own Similarity (likely you'll want to simply subclass an existing method, be it DefaultSimilarity or a descendant of SimilarityBase ), and then register the new class by calling #setSimilarity(Similarity) before indexing and #setSimilarity(Similarity) before searching. Extending {@linkplain org.apache.lucene.search.similarities.SimilarityBase} The easiest way to quickly implement a new ranking method is to extend SimilarityBase , which provides basic implementations for the low level . Subclasses are only required to implement the Float) and #toString() methods. Another option is to extend one of the frameworks based on SimilarityBase . These Similarities are implemented modularly, e.g. DFRSimilarity delegates computation of the three parts of its formula to the classes BasicModel , AfterEffect and Normalization . Instead of subclassing the Similarity, one can simply introduce a new basic model and tell DFRSimilarity to use it. Changing {@linkplain org.apache.lucene.search.similarities.DefaultSimilarity} If you are interested in use cases for changing your similarity, see the Lucene users's mailing list at Overriding Similarity . In summary, here are a few use cases: 1. The SweetSpotSimilarity in org.apache.lucene.misc gives small increases as the frequency increases a small amount and then greater increases when you hit the \"sweet spot\", i.e. where you think the frequency of terms is more significant. 2. Overriding tf — In some applications, it doesn't matter what the score of a document is as long as a matching term occurs. In these cases people have overridden Similarity to return 1 from the tf() method. 3. Changing Length Normalization — By overriding State) , it is possible to discount how the length of a field contributes to a score. In DefaultSimilarity , lengthNorm = 1 / (numTerms in field)^0.5, but if one changes this to be 1 / (numTerms in field), all fields will be treated \"fairly\" . In general, Chris Hostetter sums it up best in saying (from the Lucene users's mailing list ): [One would override the Similarity in] ... any situation where you know more about your data then just that it's \"text\" is a situation where it might make sense to to override your Similarity method. Classes AfterEffect This class acts as the base class for the implementations of the first normalization of the informative content in the DFR framework. This component is also called the after effect and is defined by the formula Inf 2 = 1 - Prob 2 , where Prob 2 measures the information gain . This is a Lucene.NET EXPERIMENTAL API, use at your own risk AfterEffect.NoAfterEffect Implementation used when there is no aftereffect. AfterEffectB Model of the information gain based on the ratio of two Bernoulli processes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AfterEffectL Model of the information gain based on Laplace's law of succession. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModel This class acts as the base class for the specific basic model implementations in the DFR framework. Basic models compute the informative content Inf 1 = -log 2 Prob 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelBE Limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by tfn+1 and N is increased by F This is a Lucene.NET EXPERIMENTAL API, use at your own risk NOTE: in some corner cases this model may give poor performance with Normalizations that return large values for tfn such as NormalizationH3 . Consider using the geometric approximation ( BasicModelG ) instead, which provides the same relevance but with less practical problems. BasicModelD Implements the approximation of the binomial model with the divergence for DFR. The formula used in Lucene differs slightly from the one in the original paper: to avoid underflow for small values of N and F , N is increased by 1 and F is always increased by tfn+1 . WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelG Geometric as limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by 1 and N is increased by F . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIF An approximation of the I(n e ) model. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIn The basic tf-idf model of randomness. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIne Tf-idf model of randomness, based on a mixture of Poisson and inverse document frequency. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelP Implements the Poisson approximation for the binomial model for DFR. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. BasicStats Stores all statistics commonly used ranking methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BM25Similarity BM25 Similarity. Introduced in Stephen E. Robertson, Steve Walker, Susan Jones, Micheline Hancock-Beaulieu, and Mike Gatford. Okapi at TREC-3. In Proceedings of the Third T ext RE trieval C onference (TREC 1994). Gaithersburg, USA, November 1994. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultSimilarity Expert: Default scoring implementation which encodes ( EncodeNormValue(Single) ) norm values as a single byte before being stored. At search time, the norm byte value is read from the index Directory and decoded ( DecodeNormValue(Int64) ) back to a float norm value. this encoding/decoding, while reducing index size, comes with the price of precision loss - it is not guaranteed that Decode(Encode(x)) = x . For instance, Decode(Encode(0.89)) = 0.75 . Compression of norm values to a single byte saves memory at search time, because once a field is referenced at search time, its norms - for all documents - are maintained in memory. The rationale supporting such lossy compression of norm values is that given the difficulty (and inaccuracy) of users to express their true information need by a query, only big differences matter. Last, note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. DFRSimilarity Implements the divergence from randomness (DFR) framework introduced in Gianni Amati and Cornelis Joost Van Rijsbergen. 2002. Probabilistic models of information retrieval based on measuring the divergence from randomness. ACM Trans. Inf. Syst. 20, 4 (October 2002), 357-389. The DFR scoring formula is composed of three separate components: the basic model , the aftereffect and an additional normalization component, represented by the classes BasicModel , AfterEffect and Normalization , respectively. The names of these classes were chosen to match the names of their counterparts in the Terrier IR engine. To construct a DFRSimilarity , you must specify the implementations for all three components of DFR: ComponentImplementations BasicModel : Basic model of information content: BasicModelBE : Limiting form of Bose-Einstein BasicModelG : Geometric approximation of Bose-Einstein BasicModelP : Poisson approximation of the Binomial BasicModelD : Divergence approximation of the Binomial BasicModelIn : Inverse document frequency BasicModelIne : Inverse expected document frequency [mixture of Poisson and IDF] BasicModelIF : Inverse term frequency [approximation of I(ne)] AfterEffect : First normalization of information gain: AfterEffectL : Laplace's law of succession AfterEffectB : Ratio of two Bernoulli processes AfterEffect.NoAfterEffect : no first normalization Normalization : Second (length) normalization: NormalizationH1 : Uniform distribution of term frequency NormalizationH2 : term frequency density inversely related to length NormalizationH3 : term frequency normalization provided by Dirichlet prior NormalizationZ : term frequency normalization provided by a Zipfian relation Normalization.NoNormalization : no second normalization Note that qtf , the multiplicity of term-occurrence in the query, is not handled by this implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Distribution The probabilistic distribution used to model term occurrence in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DistributionLL Log-logistic distribution. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DistributionSPL The smoothed power-law (SPL) distribution for the information-based framework that is described in the original paper. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IBSimilarity Provides a framework for the family of information-based models, as described in StÉphane Clinchant and Eric Gaussier. 2010. Information-based models for ad hoc IR. In Proceeding of the 33rd international ACM SIGIR conference on Research and development in information retrieval (SIGIR '10). ACM, New York, NY, USA, 234-241. The retrieval function is of the form RSV(q, d) = ∑ -x q w log Prob(X w >= t d w | λ w ) , where x q w is the query boost; X w is a random variable that counts the occurrences of word w ; t d w is the normalized term frequency; λ w is a parameter. The framework described in the paper has many similarities to the DFR framework (see DFRSimilarity ). It is possible that the two Similarities will be merged at one point. To construct an IBSimilarity , you must specify the implementations for all three components of the Information-Based model. ComponentImplementations Distribution : Probabilistic distribution used to model term occurrence DistributionLL : Log-logistic DistributionLL : Smoothed power-law Lambda : λ w parameter of the probability distribution LambdaDF : N w /N or average number of documents where w occurs LambdaTTF : F w /N or average number of occurrences of w in the collection Normalization : Term frequency normalizationAny supported DFR normalization (listed in DFRSimilarity ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lambda The lambda (λ w ) parameter in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LambdaDF Computes lambda as docFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk LambdaTTF Computes lambda as totalTermFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMDirichletSimilarity Bayesian smoothing using Dirichlet priors. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The formula as defined the paper assigns a negative score to documents that contain the term, but with fewer occurrences than predicted by the collection language model. The Lucene implementation returns 0 for such documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMJelinekMercerSimilarity Language model based on the Jelinek-Mercer smoothing method. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The model has a single parameter, λ. According to said paper, the optimal value depends on both the collection and the query. The optimal value is around 0.1 for title queries and 0.7 for long queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMSimilarity Abstract superclass for language modeling Similarities. The following inner types are introduced: LMSimilarity.LMStats , which defines a new statistic, the probability that the collection language model generates the current term; LMSimilarity.ICollectionModel , which is a strategy interface for object that compute the collection language model p(w|C) ; LMSimilarity.DefaultCollectionModel , an implementation of the former, that computes the term probability as the number of occurrences of the term in the collection, divided by the total number of tokens. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMSimilarity.DefaultCollectionModel Models p(w|C) as the number of occurrences of the term in the collection, divided by the total number of tokens + 1 . LMSimilarity.LMStats Stores the collection distribution of the current term. MultiSimilarity Implements the CombSUM method for combining evidence from multiple similarity values described in: Joseph A. Shaw, Edward A. Fox. In Text REtrieval Conference (1993), pp. 243-252 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Normalization This class acts as the base class for the implementations of the term frequency normalization methods in the DFR framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Normalization.NoNormalization Implementation used when there is no normalization. NormalizationH1 Normalization model that assumes a uniform distribution of the term frequency. While this model is parameterless in the original article , information-based models (see IBSimilarity ) introduced a multiplying factor. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationH2 Normalization model in which the term frequency is inversely related to the length. While this model is parameterless in the original article , the thesis introduces the parameterized variant. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationH3 Dirichlet Priors normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationZ Pareto-Zipf Normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk PerFieldSimilarityWrapper Provides the ability to use a different Similarity for different fields. Subclasses should implement Get(String) to return an appropriate Similarity (for example, using field-specific parameter values) for the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Similarity Similarity defines the components of Lucene scoring. Expert: Scoring API. This is a low-level API, you should only extend this API if you want to implement an information retrieval model . If you are instead looking for a convenient way to alter Lucene's scoring, consider extending a higher-level implementation such as TFIDFSimilarity , which implements the vector space model with this API, or just tweaking the default implementation: DefaultSimilarity . Similarity determines how Lucene weights terms, and Lucene interacts with this class at both index-time and query-time . At indexing time, the indexer calls ComputeNorm(FieldInvertState) , allowing the Similarity implementation to set a per-document value for the field that will be later accessible via GetNormValues(String) . Lucene makes no assumption about what is in this norm, but it is most useful for encoding length normalization information. Implementations should carefully consider how the normalization is encoded: while Lucene's classical TFIDFSimilarity encodes a combination of index-time boost and length normalization information with SmallSingle into a single byte, this might not be suitable for all purposes. Many formulas require the use of average document length, which can be computed via a combination of SumTotalTermFreq and MaxDoc or DocCount , depending upon whether the average should reflect field sparsity. Additional scoring factors can be stored in named NumericDocValuesField s and accessed at query-time with GetNumericDocValues(String) . Finally, using index-time boosts (either via folding into the normalization byte or via DocValues ), is an inefficient way to boost the scores of different fields if the boost will be the same for every document, instead the Similarity can simply take a constant boost parameter C , and PerFieldSimilarityWrapper can return different instances with different boosts depending upon field name. At query-time, Queries interact with the Similarity via these steps: The ComputeWeight(Single, CollectionStatistics, TermStatistics[]) method is called a single time, allowing the implementation to compute any statistics (such as IDF, average document length, etc) across the entire collection . The TermStatistics and CollectionStatistics passed in already contain all of the raw statistics involved, so a Similarity can freely use any combination of statistics without causing any additional I/O. Lucene makes no assumption about what is stored in the returned Similarity.SimWeight object. The query normalization process occurs a single time: GetValueForNormalization() is called for each query leaf node, QueryNorm(Single) is called for the top-level query, and finally Normalize(Single, Single) passes down the normalization value and any top-level boosts (e.g. from enclosing BooleanQuery s). For each segment in the index, the Query creates a GetSimScorer(Similarity.SimWeight, AtomicReaderContext) The GetScore() method is called for each matching document. When Explain(Query, Int32) is called, queries consult the Similarity's DocScorer for an explanation of how it computed its score. The query passes in a the document id and an explanation of how the frequency was computed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Similarity.SimScorer API for scoring \"sloppy\" queries such as TermQuery , SpanQuery , and PhraseQuery . Frequencies are floating-point values: an approximate within-document frequency adjusted for \"sloppiness\" by ComputeSlopFactor(Int32) . Similarity.SimWeight Stores the weight for a query across the indexed collection. this abstract implementation is empty; descendants of Similarity should subclass Similarity.SimWeight and define the statistics they require in the subclass. Examples include idf, average field length, etc. SimilarityBase A subclass of Similarity that provides a simplified API for its descendants. Subclasses are only required to implement the Score(BasicStats, Single, Single) and ToString() methods. Implementing Explain(Explanation, BasicStats, Int32, Single, Single) is optional, inasmuch as SimilarityBase already provides a basic explanation of the score and the term frequency. However, implementers of a subclass are encouraged to include as much detail about the scoring method as possible. Note: multi-word queries such as phrase queries are scored in a different way than Lucene's default ranking algorithm: whereas it \"fakes\" an IDF value for the phrase as a whole (since it does not know it), this class instead scores phrases as a summation of the individual term scores. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TFIDFSimilarity Implementation of Similarity with the Vector Space Model. Expert: Scoring API. TFIDFSimilarity defines the components of Lucene scoring. Overriding computation of these components is a convenient way to alter Lucene scoring. Suggested reading: Introduction To Information Retrieval, Chapter 6 . The following describes how Lucene scoring evolves from underlying information retrieval models to (efficient) implementation. We first brief on VSM Score , then derive from it Lucene's Conceptual Scoring Formula , from which, finally, evolves Lucene's Practical Scoring Function (the latter is connected directly with Lucene classes and methods). Lucene combines Boolean model (BM) of Information Retrieval with Vector Space Model (VSM) of Information Retrieval - documents \"approved\" by BM are scored by VSM. In VSM, documents and queries are represented as weighted vectors in a multi-dimensional space, where each distinct index term is a dimension, and weights are Tf-idf values. VSM does not require weights to be Tf-idf values, but Tf-idf values are believed to produce search results of high quality, and so Lucene is using Tf-idf . Tf and Idf are described in more detail below, but for now, for completion, let's just say that for given term t and document (or query) x , Tf(t,x) varies with the number of occurrences of term t in x (when one increases so does the other) and idf(t) similarly varies with the inverse of the number of index documents containing term t . VSM score of document d for query q is the Cosine Similarity of the weighted query vectors V(q) and V(d) : cosine-similarity(q,d) = V(q) · V(d) ––––––––– |V(q)| |V(d)| VSM Score Where V(q) · V(d) is the dot product of the weighted vectors, and |V(q)| and |V(d)| are their Euclidean norms . Note: the above equation can be viewed as the dot product of the normalized weighted vectors, in the sense that dividing V(q) by its euclidean norm is normalizing it to a unit vector. Lucene refines VSM score for both search quality and usability: Normalizing V(d) to the unit vector is known to be problematic in that it removes all document length information. For some documents removing this info is probably ok, e.g. a document made by duplicating a certain paragraph 10 times, especially if that paragraph is made of distinct terms. But for a document which contains no duplicated paragraphs, this might be wrong. To avoid this problem, a different document length normalization factor is used, which normalizes to a vector equal to or larger than the unit vector: doc-len-norm(d) . At indexing, users can specify that certain documents are more important than others, by assigning a document boost. For this, the score of each document is also multiplied by its boost value doc-boost(d) . Lucene is field based, hence each query term applies to a single field, document length normalization is by the length of the certain field, and in addition to document boost there are also document fields boosts. The same field can be added to a document during indexing several times, and so the boost of that field is the multiplication of the boosts of the separate additions (or parts) of that field within the document. At search time users can specify boosts to each query, sub-query, and each query term, hence the contribution of a query term to the score of a document is multiplied by the boost of that query term query-boost(q) . A document may match a multi term query without containing all the terms of that query (this is correct for some of the queries), and users can further reward documents matching more query terms through a coordination factor, which is usually larger when more terms are matched: coord-factor(q,d) . Under the simplifying assumption of a single field in the index, we get Lucene's Conceptual scoring formula : score(q,d) = coord-factor(q,d) · query-boost(q) · V(q) · V(d) ––––––––– |V(q)| · doc-len-norm(d) · doc-boost(d) Lucene Conceptual Scoring Formula The conceptual formula is a simplification in the sense that (1) terms and documents are fielded and (2) boosts are usually per query term rather than per query. We now describe how Lucene implements this conceptual scoring formula, and derive from it Lucene's Practical Scoring Function . For efficient score computation some scoring components are computed and aggregated in advance: Query-boost for the query (actually for each query term) is known when search starts. Query Euclidean norm |V(q)| can be computed when search starts, as it is independent of the document being scored. From search optimization perspective, it is a valid question why bother to normalize the query at all, because all scored documents will be multiplied by the same |V(q)| , and hence documents ranks (their order by score) will not be affected by this normalization. There are two good reasons to keep this normalization: Recall that Cosine Similarity can be used find how similar two documents are. One can use Lucene for e.g. clustering, and use a document as a query to compute its similarity to other documents. In this use case it is important that the score of document d3 for query d1 is comparable to the score of document d3 for query d2 . In other words, scores of a document for two distinct queries should be comparable. There are other applications that may require this. And this is exactly what normalizing the query vector V(q) provides: comparability (to a certain extent) of two or more queries. Applying query normalization on the scores helps to keep the scores around the unit vector, hence preventing loss of score data because of floating point precision limitations. Document length norm doc-len-norm(d) and document boost doc-boost(d) are known at indexing time. They are computed in advance and their multiplication is saved as a single value in the index: norm(d) . (In the equations below, norm(t in d) means norm(field(t) in doc d) where field(t) is the field associated with term t .) Lucene's Practical Scoring Function is derived from the above. The color codes demonstrate how it relates to those of the conceptual formula: score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t) 2 · t.Boost · norm(t,d) ) t in q Lucene Practical Scoring Function where tf(t in d) correlates to the term's frequency , defined as the number of times term t appears in the currently scored document d . Documents that have more occurrences of a given term receive a higher score. Note that tf(t in q) is assumed to be 1 and therefore it does not appear in this equation, However if a query contains twice the same term, there will be two term-queries with that same term and hence the computation would still be correct (although not very efficient). The default computation for tf(t in d) in DefaultSimilarity ( Tf(Single) ) is: tf(t in d) = frequency ½ idf(t) stands for Inverse Document Frequency. this value correlates to the inverse of DocFreq (the number of documents in which the term t appears). this means rarer terms give higher contribution to the total score. idf(t) appears for t in both the query and the document, hence it is squared in the equation. The default computation for idf(t) in DefaultSimilarity ( Idf(Int64, Int64) ) is: idf(t) = 1 + log ( NumDocs ––––––––– DocFreq+1 ) coord(q,d) is a score factor based on how many of the query terms are found in the specified document. Typically, a document that contains more of the query's terms will receive a higher score than another document with fewer query terms. this is a search time factor computed in coord(q,d) ( Coord(Int32, Int32) ) by the Similarity in effect at search time. queryNorm(q) is a normalizing factor used to make scores between queries comparable. this factor does not affect document ranking (since all ranked documents are multiplied by the same factor), but rather just attempts to make scores from different queries (or even different indexes) comparable. this is a search time factor computed by the Similarity in effect at search time. The default computation in DefaultSimilarity ( QueryNorm(Single) ) produces a Euclidean norm : queryNorm(q) = queryNorm(sumOfSquaredWeights) = 1 –––––––––––––– sumOfSquaredWeights ½ The sum of squared weights (of the query terms) is computed by the query Weight object. For example, a BooleanQuery computes this value as: sumOfSquaredWeights = q.Boost 2 · ∑ ( idf(t) · t.Boost ) 2 t in q where sumOfSquaredWeights is GetValueForNormalization() and q.Boost is Boost t.Boost is a search time boost of term t in the query q as specified in the query text (see query syntax ), or as set by application calls to Boost . Notice that there is really no direct API for accessing a boost of one term in a multi term query, but rather multi terms are represented in a query as multi TermQuery objects, and so the boost of a term in the query is accessible by calling the sub-query Boost . norm(t,d) encapsulates a few (indexing time) boost and length factors: Field boost - set Boost before adding the field to a document. lengthNorm - computed when the document is added to the index in accordance with the number of tokens of this field in the document, so that shorter fields contribute more to the score. LengthNorm is computed by the Similarity class in effect at indexing. The ComputeNorm(FieldInvertState) method is responsible for combining all of these factors into a single System.Single . When a document is added to the index, all the above factors are multiplied. If the document has multiple fields with the same name, all their boosts are multiplied together: norm(t,d) = lengthNorm · ∏ Boost field f in d named as t Note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Interfaces LMSimilarity.ICollectionModel A strategy for computing the collection language model."
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.IBSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.IBSimilarity.html",
    "title": "Class IBSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IBSimilarity Provides a framework for the family of information-based models, as described in StÉphane Clinchant and Eric Gaussier. 2010. Information-based models for ad hoc IR. In Proceeding of the 33rd international ACM SIGIR conference on Research and development in information retrieval (SIGIR '10). ACM, New York, NY, USA, 234-241. The retrieval function is of the form RSV(q, d) = ∑ -x q w log Prob(X w >= t d w | λ w ) , where x q w is the query boost; X w is a random variable that counts the occurrences of word w ; t d w is the normalized term frequency; λ w is a parameter. The framework described in the paper has many similarities to the DFR framework (see DFRSimilarity ). It is possible that the two Similarities will be merged at one point. To construct an IBSimilarity , you must specify the implementations for all three components of the Information-Based model. ComponentImplementations Distribution : Probabilistic distribution used to model term occurrence DistributionLL : Log-logistic DistributionLL : Smoothed power-law Lambda : λ w parameter of the probability distribution LambdaDF : N w /N or average number of documents where w occurs LambdaTTF : F w /N or average number of occurrences of w in the collection Normalization : Term frequency normalizationAny supported DFR normalization (listed in DFRSimilarity ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase IBSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.NewStats(String, Single) SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class IBSimilarity : SimilarityBase Constructors | Improve this Doc View Source IBSimilarity(Distribution, Lambda, Normalization) Creates IBSimilarity from the three components. Note that null values are not allowed: if you want no normalization, instead pass Normalization.NoNormalization . Declaration public IBSimilarity(Distribution distribution, Lambda lambda, Normalization normalization) Parameters Type Name Description Distribution distribution probabilistic distribution modeling term occurrence Lambda lambda distribution's λ w parameter Normalization normalization term frequency normalization Fields | Improve this Doc View Source m_distribution The probabilistic distribution used to model term occurrence. Declaration protected readonly Distribution m_distribution Field Value Type Description Distribution | Improve this Doc View Source m_lambda The lambda (λ w ) parameter. Declaration protected readonly Lambda m_lambda Field Value Type Description Lambda | Improve this Doc View Source m_normalization The term frequency normalization. Declaration protected readonly Normalization m_normalization Field Value Type Description Normalization Properties | Improve this Doc View Source Distribution Returns the distribution Declaration public virtual Distribution Distribution { get; } Property Value Type Description Distribution | Improve this Doc View Source Lambda Returns the distribution's lambda parameter Declaration public virtual Lambda Lambda { get; } Property Value Type Description Lambda | Improve this Doc View Source Normalization Returns the term frequency normalization Declaration public virtual Normalization Normalization { get; } Property Value Type Description Normalization Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() The name of IB methods follow the pattern IB <distribution> <lambda><normalization> . The name of the distribution is the same as in the original paper; for the names of lambda parameters, refer to the doc of the Lambda classes. Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Lambda.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Lambda.html",
    "title": "Class Lambda | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lambda The lambda (λ w ) parameter in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaDF LambdaTTF 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Lambda Constructors | Improve this Doc View Source Lambda() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Lambda() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Computes the lambda parameter. Declaration public abstract float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source Explain(BasicStats) Explains the lambda parameter. Declaration public abstract Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the lambda formula. Since the original paper is not very clear on this matter, and also uses the DFR naming scheme incorrectly, the codes here were chosen arbitrarily. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also IBSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaDF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaDF.html",
    "title": "Class LambdaDF | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LambdaDF Computes lambda as docFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaDF 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LambdaDF : Lambda Constructors | Improve this Doc View Source LambdaDF() Sole constructor: parameter-free Declaration public LambdaDF() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Declaration public override sealed float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single Overrides Lambda.CalculateLambda(BasicStats) | Improve this Doc View Source Explain(BasicStats) Declaration public override sealed Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation Overrides Lambda.Explain(BasicStats) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lambda.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaTTF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaTTF.html",
    "title": "Class LambdaTTF | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LambdaTTF Computes lambda as totalTermFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaTTF 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LambdaTTF : Lambda Constructors | Improve this Doc View Source LambdaTTF() Sole constructor: parameter-free Declaration public LambdaTTF() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Declaration public override sealed float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single Overrides Lambda.CalculateLambda(BasicStats) | Improve this Doc View Source Explain(BasicStats) Declaration public override sealed Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation Overrides Lambda.Explain(BasicStats) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lambda.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMDirichletSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMDirichletSimilarity.html",
    "title": "Class LMDirichletSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LMDirichletSimilarity Bayesian smoothing using Dirichlet priors. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The formula as defined the paper assigns a negative score to documents that contain the term, but with fewer occurrences than predicted by the collection language model. The Lucene implementation returns 0 for such documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMDirichletSimilarity Inherited Members LMSimilarity.m_collectionModel LMSimilarity.NewStats(String, Single) LMSimilarity.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) LMSimilarity.ToString() SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMDirichletSimilarity : LMSimilarity Constructors | Improve this Doc View Source LMDirichletSimilarity() Instantiates the similarity with the default μ value of 2000. Declaration public LMDirichletSimilarity() | Improve this Doc View Source LMDirichletSimilarity(LMSimilarity.ICollectionModel) Instantiates the similarity with the default μ value of 2000. Declaration public LMDirichletSimilarity(LMSimilarity.ICollectionModel collectionModel) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel | Improve this Doc View Source LMDirichletSimilarity(LMSimilarity.ICollectionModel, Single) Instantiates the similarity with the provided μ parameter. Declaration public LMDirichletSimilarity(LMSimilarity.ICollectionModel collectionModel, float mu) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel System.Single mu | Improve this Doc View Source LMDirichletSimilarity(Single) Instantiates the similarity with the provided μ parameter. Declaration public LMDirichletSimilarity(float mu) Parameters Type Name Description System.Single mu Properties | Improve this Doc View Source Mu Returns the μ parameter. Declaration public virtual float Mu { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides LMSimilarity.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides LMSimilarity.GetName() | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMJelinekMercerSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMJelinekMercerSimilarity.html",
    "title": "Class LMJelinekMercerSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LMJelinekMercerSimilarity Language model based on the Jelinek-Mercer smoothing method. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The model has a single parameter, λ. According to said paper, the optimal value depends on both the collection and the query. The optimal value is around 0.1 for title queries and 0.7 for long queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMJelinekMercerSimilarity Inherited Members LMSimilarity.m_collectionModel LMSimilarity.NewStats(String, Single) LMSimilarity.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) LMSimilarity.ToString() SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMJelinekMercerSimilarity : LMSimilarity Constructors | Improve this Doc View Source LMJelinekMercerSimilarity(LMSimilarity.ICollectionModel, Single) Instantiates with the specified collectionModel and λ parameter. Declaration public LMJelinekMercerSimilarity(LMSimilarity.ICollectionModel collectionModel, float lambda) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel System.Single lambda | Improve this Doc View Source LMJelinekMercerSimilarity(Single) Instantiates with the specified λ parameter. Declaration public LMJelinekMercerSimilarity(float lambda) Parameters Type Name Description System.Single lambda Properties | Improve this Doc View Source Lambda Returns the λ parameter. Declaration public virtual float Lambda { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides LMSimilarity.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides LMSimilarity.GetName() | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.DefaultCollectionModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.DefaultCollectionModel.html",
    "title": "Class LMSimilarity.DefaultCollectionModel | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LMSimilarity.DefaultCollectionModel Models p(w|C) as the number of occurrences of the term in the collection, divided by the total number of tokens + 1 . Inheritance System.Object LMSimilarity.DefaultCollectionModel Implements LMSimilarity.ICollectionModel Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DefaultCollectionModel : LMSimilarity.ICollectionModel Constructors | Improve this Doc View Source DefaultCollectionModel() Sole constructor: parameter-free Declaration public DefaultCollectionModel() Methods | Improve this Doc View Source ComputeProbability(BasicStats) Declaration public virtual float ComputeProbability(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source GetName() Declaration public virtual string GetName() Returns Type Description System.String Implements LMSimilarity.ICollectionModel"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.html",
    "title": "Class LMSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LMSimilarity Abstract superclass for language modeling Similarities. The following inner types are introduced: LMSimilarity.LMStats , which defines a new statistic, the probability that the collection language model generates the current term; LMSimilarity.ICollectionModel , which is a strategy interface for object that compute the collection language model p(w|C) ; LMSimilarity.DefaultCollectionModel , an implementation of the former, that computes the term probability as the number of occurrences of the term in the collection, divided by the total number of tokens. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMDirichletSimilarity LMJelinekMercerSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Score(BasicStats, Single, Single) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class LMSimilarity : SimilarityBase Constructors | Improve this Doc View Source LMSimilarity() Creates a new instance with the default collection language model. Declaration public LMSimilarity() | Improve this Doc View Source LMSimilarity(LMSimilarity.ICollectionModel) Creates a new instance with the specified collection language model. Declaration public LMSimilarity(LMSimilarity.ICollectionModel collectionModel) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel Fields | Improve this Doc View Source m_collectionModel The collection model. Declaration protected readonly LMSimilarity.ICollectionModel m_collectionModel Field Value Type Description LMSimilarity.ICollectionModel Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) Computes the collection probability of the current term in addition to the usual statistics. Declaration protected override void FillBasicStats(BasicStats stats, CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description BasicStats stats CollectionStatistics collectionStats TermStatistics termStats Overrides SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) | Improve this Doc View Source GetName() Returns the name of the LM method. The values of the parameters should be included as well. Used in ToString() . Declaration public abstract string GetName() Returns Type Description System.String | Improve this Doc View Source NewStats(String, Single) Declaration protected override BasicStats NewStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Returns Type Description BasicStats Overrides SimilarityBase.NewStats(String, Single) | Improve this Doc View Source ToString() Returns the name of the LM method. If a custom collection model strategy is used, its name is included as well. Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() See Also GetName() GetName () LMSimilarity.DefaultCollectionModel"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.ICollectionModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.ICollectionModel.html",
    "title": "Interface LMSimilarity.ICollectionModel | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface LMSimilarity.ICollectionModel A strategy for computing the collection language model. Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public interface ICollectionModel Methods | Improve this Doc View Source ComputeProbability(BasicStats) Computes the probability p(w|C) according to the language model strategy for the current term. Declaration float ComputeProbability(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source GetName() The name of the collection model strategy. Declaration string GetName() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.LMStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.LMStats.html",
    "title": "Class LMSimilarity.LMStats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LMSimilarity.LMStats Stores the collection distribution of the current term. Inheritance System.Object Similarity.SimWeight BasicStats LMSimilarity.LMStats Inherited Members BasicStats.m_numberOfDocuments BasicStats.m_numberOfFieldTokens BasicStats.m_avgFieldLength BasicStats.m_docFreq BasicStats.m_totalTermFreq BasicStats.m_queryBoost BasicStats.m_topLevelBoost BasicStats.m_totalBoost BasicStats.NumberOfDocuments BasicStats.NumberOfFieldTokens BasicStats.AvgFieldLength BasicStats.DocFreq BasicStats.TotalTermFreq BasicStats.Field BasicStats.GetValueForNormalization() BasicStats.RawNormalizationValue() BasicStats.Normalize(Single, Single) BasicStats.TotalBoost System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMStats : BasicStats Constructors | Improve this Doc View Source LMStats(String, Single) Creates LMSimilarity.LMStats for the provided field and query-time boost Declaration public LMStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Properties | Improve this Doc View Source CollectionProbability Returns the probability that the current term is generated by the collection. Declaration public float CollectionProbability { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.MultiSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.MultiSimilarity.html",
    "title": "Class MultiSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MultiSimilarity Implements the CombSUM method for combining evidence from multiple similarity values described in: Joseph A. Shaw, Edward A. Fox. In Text REtrieval Conference (1993), pp. 243-252 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity MultiSimilarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class MultiSimilarity : Similarity Constructors | Improve this Doc View Source MultiSimilarity(Similarity[]) Creates a MultiSimilarity which will sum the scores of the provided sims . Declaration public MultiSimilarity(Similarity[] sims) Parameters Type Name Description Similarity [] sims Fields | Improve this Doc View Source m_sims the sub-similarities used to create the combined score Declaration protected readonly Similarity[] m_sims Field Value Type Description Similarity [] Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.html",
    "title": "Class Normalization | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Normalization This class acts as the base class for the implementations of the term frequency normalization methods in the DFR framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization Normalization.NoNormalization NormalizationH1 NormalizationH2 NormalizationH3 NormalizationZ 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Normalization Constructors | Improve this Doc View Source Normalization() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Normalization() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Returns an explanation for the normalized term frequency. The default normalization methods use the field length of the document and the average field length to compute the normalized term frequency. This method provides a generic explanation for such methods. Subclasses that use other statistics must override this method. Declaration public virtual Explanation Explain(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description Explanation | Improve this Doc View Source Tfn(BasicStats, Single, Single) Returns the normalized term frequency. Declaration public abstract float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len the field length. Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the normalization formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.NoNormalization.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.NoNormalization.html",
    "title": "Class Normalization.NoNormalization | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Normalization.NoNormalization Implementation used when there is no normalization. Inheritance System.Object Normalization Normalization.NoNormalization 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) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public sealed class NoNormalization : Normalization Constructors | Improve this Doc View Source NoNormalization() Sole constructor: parameter-free Declaration public NoNormalization() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Declaration public override Explanation Explain(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description Explanation Overrides Normalization.Explain(BasicStats, Single, Single) | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH1.html",
    "title": "Class NormalizationH1 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormalizationH1 Normalization model that assumes a uniform distribution of the term frequency. While this model is parameterless in the original article , information-based models (see IBSimilarity ) introduced a multiplying factor. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH1 Inherited Members Normalization.Explain(BasicStats, Single, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH1 : Normalization Constructors | Improve this Doc View Source NormalizationH1() Calls NormalizationH1(1) Declaration public NormalizationH1() | Improve this Doc View Source NormalizationH1(Single) Creates NormalizationH1 with the supplied parameter c . Declaration public NormalizationH1(float c) Parameters Type Name Description System.Single c Hyper-parameter that controls the term frequency normalization with respect to the document length. Properties | Improve this Doc View Source C Returns the c parameter. Declaration public virtual float C { get; } Property Value Type Description System.Single See Also NormalizationH1(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override sealed float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH2.html",
    "title": "Class NormalizationH2 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormalizationH2 Normalization model in which the term frequency is inversely related to the length. While this model is parameterless in the original article , the thesis introduces the parameterized variant. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH2 Inherited Members Normalization.Explain(BasicStats, Single, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH2 : Normalization Constructors | Improve this Doc View Source NormalizationH2() Calls NormalizationH2(1) Declaration public NormalizationH2() | Improve this Doc View Source NormalizationH2(Single) Creates NormalizationH2 with the supplied parameter c . Declaration public NormalizationH2(float c) Parameters Type Name Description System.Single c Hyper-parameter that controls the term frequency normalization with respect to the document length. Properties | Improve this Doc View Source C Returns the c parameter. Declaration public virtual float C { get; } Property Value Type Description System.Single See Also NormalizationH2(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override sealed float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH3.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH3.html",
    "title": "Class NormalizationH3 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormalizationH3 Dirichlet Priors normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH3 Inherited Members Normalization.Explain(BasicStats, Single, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH3 : Normalization Constructors | Improve this Doc View Source NormalizationH3() Calls NormalizationH3(800) Declaration public NormalizationH3() | Improve this Doc View Source NormalizationH3(Single) Creates NormalizationH3 with the supplied parameter μ . Declaration public NormalizationH3(float mu) Parameters Type Name Description System.Single mu smoothing parameter μ Properties | Improve this Doc View Source Mu Returns the parameter μ Declaration public virtual float Mu { get; } Property Value Type Description System.Single See Also NormalizationH3(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationZ.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationZ.html",
    "title": "Class NormalizationZ | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NormalizationZ Pareto-Zipf Normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationZ Inherited Members Normalization.Explain(BasicStats, Single, Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationZ : Normalization Constructors | Improve this Doc View Source NormalizationZ() Calls NormalizationZ(0.3) Declaration public NormalizationZ() | Improve this Doc View Source NormalizationZ(Single) Creates NormalizationZ with the supplied parameter z . Declaration public NormalizationZ(float z) Parameters Type Name Description System.Single z represents A/(A+1) where A measures the specificity of the language. Properties | Improve this Doc View Source Z Returns the parameter z Declaration public virtual float Z { get; } Property Value Type Description System.Single See Also NormalizationZ(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.PerFieldSimilarityWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.PerFieldSimilarityWrapper.html",
    "title": "Class PerFieldSimilarityWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PerFieldSimilarityWrapper Provides the ability to use a different Similarity for different fields. Subclasses should implement Get(String) to return an appropriate Similarity (for example, using field-specific parameter values) for the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity PerFieldSimilarityWrapper Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class PerFieldSimilarityWrapper : Similarity Constructors | Improve this Doc View Source PerFieldSimilarityWrapper() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public PerFieldSimilarityWrapper() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source Get(String) Returns a Similarity for scoring a field. Declaration public abstract Similarity Get(string name) Parameters Type Name Description System.String name Returns Type Description Similarity | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight weight, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight weight AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.html",
    "title": "Class Similarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Similarity Similarity defines the components of Lucene scoring. Expert: Scoring API. This is a low-level API, you should only extend this API if you want to implement an information retrieval model . If you are instead looking for a convenient way to alter Lucene's scoring, consider extending a higher-level implementation such as TFIDFSimilarity , which implements the vector space model with this API, or just tweaking the default implementation: DefaultSimilarity . Similarity determines how Lucene weights terms, and Lucene interacts with this class at both index-time and query-time . At indexing time, the indexer calls ComputeNorm(FieldInvertState) , allowing the Similarity implementation to set a per-document value for the field that will be later accessible via GetNormValues(String) . Lucene makes no assumption about what is in this norm, but it is most useful for encoding length normalization information. Implementations should carefully consider how the normalization is encoded: while Lucene's classical TFIDFSimilarity encodes a combination of index-time boost and length normalization information with SmallSingle into a single byte, this might not be suitable for all purposes. Many formulas require the use of average document length, which can be computed via a combination of SumTotalTermFreq and MaxDoc or DocCount , depending upon whether the average should reflect field sparsity. Additional scoring factors can be stored in named NumericDocValuesField s and accessed at query-time with GetNumericDocValues(String) . Finally, using index-time boosts (either via folding into the normalization byte or via DocValues ), is an inefficient way to boost the scores of different fields if the boost will be the same for every document, instead the Similarity can simply take a constant boost parameter C , and PerFieldSimilarityWrapper can return different instances with different boosts depending upon field name. At query-time, Queries interact with the Similarity via these steps: The ComputeWeight(Single, CollectionStatistics, TermStatistics[]) method is called a single time, allowing the implementation to compute any statistics (such as IDF, average document length, etc) across the entire collection . The TermStatistics and CollectionStatistics passed in already contain all of the raw statistics involved, so a Similarity can freely use any combination of statistics without causing any additional I/O. Lucene makes no assumption about what is stored in the returned Similarity.SimWeight object. The query normalization process occurs a single time: GetValueForNormalization() is called for each query leaf node, QueryNorm(Single) is called for the top-level query, and finally Normalize(Single, Single) passes down the normalization value and any top-level boosts (e.g. from enclosing BooleanQuery s). For each segment in the index, the Query creates a GetSimScorer(Similarity.SimWeight, AtomicReaderContext) The GetScore() method is called for each matching document. When Explain(Query, Int32) is called, queries consult the Similarity's DocScorer for an explanation of how it computed its score. The query passes in a the document id and an explanation of how the frequency was computed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity BM25Similarity MultiSimilarity PerFieldSimilarityWrapper SimilarityBase TFIDFSimilarity Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Similarity Constructors | Improve this Doc View Source Similarity() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Similarity() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Computes the normalization value for a field, given the accumulated state of term processing for this field (see FieldInvertState ). Matches in longer fields are less precise, so implementations of this method usually set smaller values when state.Length is large, and larger values when state.Length is small. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state current processing state for this field Returns Type Description System.Int64 computed norm value | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Compute any collection-level weight (e.g. IDF, average document length, etc) needed for scoring a query. Declaration public abstract Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost the query-time boost. CollectionStatistics collectionStats collection-level statistics, such as the number of tokens in the collection. TermStatistics [] termStats term-level statistics, such as the document frequency of a term across the collection. Returns Type Description Similarity.SimWeight Similarity.SimWeight object with the information this Similarity needs to score a query. | Improve this Doc View Source Coord(Int32, Int32) Hook to integrate coordinate-level matching. By default this is disabled (returns 1 ), as with most modern models this will only skew performance, but some implementations such as TFIDFSimilarity override this. Declaration public virtual float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap the number of query terms matched in the document System.Int32 maxOverlap the total number of terms in the query Returns Type Description System.Single a score factor based on term overlap with the query | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Creates a new Similarity.SimScorer to score matching documents from a segment of the inverted index. Declaration public abstract Similarity.SimScorer GetSimScorer(Similarity.SimWeight weight, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight weight collection information from ComputeWeight(Single, CollectionStatistics, TermStatistics[]) AtomicReaderContext context segment of the inverted index to be scored. Returns Type Description Similarity.SimScorer Sloppy Similarity.SimScorer for scoring documents across context Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source QueryNorm(Single) Computes the normalization value for a query given the sum of the normalized weights GetValueForNormalization() of each of the query terms. this value is passed back to the weight ( Normalize(Single, Single) of each query term, to provide a hook to attempt to make scores from different queries comparable. By default this is disabled (returns 1 ), but some implementations such as TFIDFSimilarity override this. Declaration public virtual float QueryNorm(float valueForNormalization) Parameters Type Name Description System.Single valueForNormalization the sum of the term normalization values Returns Type Description System.Single a normalization factor for query weights See Also Similarity Similarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimScorer.html",
    "title": "Class Similarity.SimScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Similarity.SimScorer API for scoring \"sloppy\" queries such as TermQuery , SpanQuery , and PhraseQuery . Frequencies are floating-point values: an approximate within-document frequency adjusted for \"sloppiness\" by ComputeSlopFactor(Int32) . Inheritance System.Object Similarity.SimScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimScorer Constructors | Improve this Doc View Source SimScorer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimScorer() Methods | Improve this Doc View Source ComputePayloadFactor(Int32, Int32, Int32, BytesRef) Calculate a scoring factor based on the data in the payload. Declaration public abstract float ComputePayloadFactor(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single | Improve this Doc View Source ComputeSlopFactor(Int32) Computes the amount of a sloppy phrase match, based on an edit distance. Declaration public abstract float ComputeSlopFactor(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single | Improve this Doc View Source Explain(Int32, Explanation) Explain the score for a single document Declaration public virtual Explanation Explain(int doc, Explanation freq) Parameters Type Name Description System.Int32 doc document id within the inverted index segment Explanation freq Explanation of how the sloppy term frequency was computed Returns Type Description Explanation document's score | Improve this Doc View Source Score(Int32, Single) Score a single document Declaration public abstract float Score(int doc, float freq) Parameters Type Name Description System.Int32 doc document id within the inverted index segment System.Single freq sloppy term frequency Returns Type Description System.Single document's score"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimWeight.html",
    "title": "Class Similarity.SimWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Similarity.SimWeight Stores the weight for a query across the indexed collection. this abstract implementation is empty; descendants of Similarity should subclass Similarity.SimWeight and define the statistics they require in the subclass. Examples include idf, average field length, etc. Inheritance System.Object Similarity.SimWeight BasicStats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimWeight Constructors | Improve this Doc View Source SimWeight() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimWeight() Methods | Improve this Doc View Source GetValueForNormalization() The value for normalization of contained query clauses (e.g. sum of squared weights). NOTE: a Similarity implementation might not use any query normalization at all, its not required. However, if it wants to participate in query normalization, it can return a value here. Declaration public abstract float GetValueForNormalization() Returns Type Description System.Single | Improve this Doc View Source Normalize(Single, Single) Assigns the query normalization factor and boost from parent queries to this. NOTE: a Similarity implementation might not use this normalized value at all, its not required. However, its usually a good idea to at least incorporate the topLevelBoost (e.g. from an outer BooleanQuery ) into its score. Declaration public abstract void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.SimilarityBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.SimilarityBase.html",
    "title": "Class SimilarityBase | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimilarityBase A subclass of Similarity that provides a simplified API for its descendants. Subclasses are only required to implement the Score(BasicStats, Single, Single) and ToString() methods. Implementing Explain(Explanation, BasicStats, Int32, Single, Single) is optional, inasmuch as SimilarityBase already provides a basic explanation of the score and the term frequency. However, implementers of a subclass are encouraged to include as much detail about the scoring method as possible. Note: multi-word queries such as phrase queries are scored in a different way than Lucene's default ranking algorithm: whereas it \"fakes\" an IDF value for the phrase as a whole (since it does not know it), this class instead scores phrases as a summation of the individual term scores. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase DFRSimilarity IBSimilarity LMSimilarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) 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.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimilarityBase : Similarity Constructors | Improve this Doc View Source SimilarityBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimilarityBase() Properties | Improve this Doc View Source DiscountOverlaps Determines whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true , meaning overlap tokens do not count when computing norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean See Also ComputeNorm(FieldInvertState) Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Encodes the document length in the same way as TFIDFSimilarity . Declaration public override long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source DecodeNormValue(Byte) Decodes a normalization factor (document length) stored in an index. Declaration protected virtual float DecodeNormValue(byte norm) Parameters Type Name Description System.Byte norm Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single, Single) Encodes the length to a byte via SmallSingle . Declaration protected virtual byte EncodeNormValue(float boost, float length) Parameters Type Name Description System.Single boost System.Single length Returns Type Description System.Byte | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Subclasses should implement this method to explain the score. expl already contains the score, the name of the class and the doc id, as well as the term frequency and its explanation; subclasses can add additional clauses to explain details of their scoring formulae. The default implementation does nothing. Declaration protected virtual void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl the explanation to extend with details. BasicStats stats the corpus level statistics. System.Int32 doc the document id. System.Single freq the term frequency. System.Single docLen the document length. | Improve this Doc View Source Explain(BasicStats, Int32, Explanation, Single) Explains the score. The implementation here provides a basic explanation in the format Score(name-of-similarity, doc=doc-id, freq=term-frequency), computed from: , and attaches the score (computed via the Score(BasicStats, Single, Single) method) and the explanation for the term frequency. Subclasses content with this format may add additional details in Explain(Explanation, BasicStats, Int32, Single, Single) . Declaration public virtual Explanation Explain(BasicStats stats, int doc, Explanation freq, float docLen) Parameters Type Name Description BasicStats stats the corpus level statistics. System.Int32 doc the document id. Explanation freq the term frequency and its explanation. System.Single docLen the document length. Returns Type Description Explanation the explanation. | Improve this Doc View Source FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) Fills all member fields defined in BasicStats in stats . Subclasses can override this method to fill additional stats. Declaration protected virtual void FillBasicStats(BasicStats stats, CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description BasicStats stats CollectionStatistics collectionStats TermStatistics termStats | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Log2(Double) Returns the base two logarithm of x . Declaration public static double Log2(double x) Parameters Type Name Description System.Double x Returns Type Description System.Double | Improve this Doc View Source NewStats(String, Single) Factory method to return a custom stats object Declaration protected virtual BasicStats NewStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Returns Type Description BasicStats | Improve this Doc View Source Score(BasicStats, Single, Single) Scores the document doc . Subclasses must apply their scoring formula in this class. Declaration public abstract float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats the corpus level statistics. System.Single freq the term frequency. System.Single docLen the document length. Returns Type Description System.Single the score. | Improve this Doc View Source ToString() Subclasses must override this method to return the name of the Similarity and preferably the values of parameters (if any) as well. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.TFIDFSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.TFIDFSimilarity.html",
    "title": "Class TFIDFSimilarity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TFIDFSimilarity Implementation of Similarity with the Vector Space Model. Expert: Scoring API. TFIDFSimilarity defines the components of Lucene scoring. Overriding computation of these components is a convenient way to alter Lucene scoring. Suggested reading: Introduction To Information Retrieval, Chapter 6 . The following describes how Lucene scoring evolves from underlying information retrieval models to (efficient) implementation. We first brief on VSM Score , then derive from it Lucene's Conceptual Scoring Formula , from which, finally, evolves Lucene's Practical Scoring Function (the latter is connected directly with Lucene classes and methods). Lucene combines Boolean model (BM) of Information Retrieval with Vector Space Model (VSM) of Information Retrieval - documents \"approved\" by BM are scored by VSM. In VSM, documents and queries are represented as weighted vectors in a multi-dimensional space, where each distinct index term is a dimension, and weights are Tf-idf values. VSM does not require weights to be Tf-idf values, but Tf-idf values are believed to produce search results of high quality, and so Lucene is using Tf-idf . Tf and Idf are described in more detail below, but for now, for completion, let's just say that for given term t and document (or query) x , Tf(t,x) varies with the number of occurrences of term t in x (when one increases so does the other) and idf(t) similarly varies with the inverse of the number of index documents containing term t . VSM score of document d for query q is the Cosine Similarity of the weighted query vectors V(q) and V(d) : cosine-similarity(q,d) = V(q) · V(d) ––––––––– |V(q)| |V(d)| VSM Score Where V(q) · V(d) is the dot product of the weighted vectors, and |V(q)| and |V(d)| are their Euclidean norms . Note: the above equation can be viewed as the dot product of the normalized weighted vectors, in the sense that dividing V(q) by its euclidean norm is normalizing it to a unit vector. Lucene refines VSM score for both search quality and usability: Normalizing V(d) to the unit vector is known to be problematic in that it removes all document length information. For some documents removing this info is probably ok, e.g. a document made by duplicating a certain paragraph 10 times, especially if that paragraph is made of distinct terms. But for a document which contains no duplicated paragraphs, this might be wrong. To avoid this problem, a different document length normalization factor is used, which normalizes to a vector equal to or larger than the unit vector: doc-len-norm(d) . At indexing, users can specify that certain documents are more important than others, by assigning a document boost. For this, the score of each document is also multiplied by its boost value doc-boost(d) . Lucene is field based, hence each query term applies to a single field, document length normalization is by the length of the certain field, and in addition to document boost there are also document fields boosts. The same field can be added to a document during indexing several times, and so the boost of that field is the multiplication of the boosts of the separate additions (or parts) of that field within the document. At search time users can specify boosts to each query, sub-query, and each query term, hence the contribution of a query term to the score of a document is multiplied by the boost of that query term query-boost(q) . A document may match a multi term query without containing all the terms of that query (this is correct for some of the queries), and users can further reward documents matching more query terms through a coordination factor, which is usually larger when more terms are matched: coord-factor(q,d) . Under the simplifying assumption of a single field in the index, we get Lucene's Conceptual scoring formula : score(q,d) = coord-factor(q,d) · query-boost(q) · V(q) · V(d) ––––––––– |V(q)| · doc-len-norm(d) · doc-boost(d) Lucene Conceptual Scoring Formula The conceptual formula is a simplification in the sense that (1) terms and documents are fielded and (2) boosts are usually per query term rather than per query. We now describe how Lucene implements this conceptual scoring formula, and derive from it Lucene's Practical Scoring Function . For efficient score computation some scoring components are computed and aggregated in advance: Query-boost for the query (actually for each query term) is known when search starts. Query Euclidean norm |V(q)| can be computed when search starts, as it is independent of the document being scored. From search optimization perspective, it is a valid question why bother to normalize the query at all, because all scored documents will be multiplied by the same |V(q)| , and hence documents ranks (their order by score) will not be affected by this normalization. There are two good reasons to keep this normalization: Recall that Cosine Similarity can be used find how similar two documents are. One can use Lucene for e.g. clustering, and use a document as a query to compute its similarity to other documents. In this use case it is important that the score of document d3 for query d1 is comparable to the score of document d3 for query d2 . In other words, scores of a document for two distinct queries should be comparable. There are other applications that may require this. And this is exactly what normalizing the query vector V(q) provides: comparability (to a certain extent) of two or more queries. Applying query normalization on the scores helps to keep the scores around the unit vector, hence preventing loss of score data because of floating point precision limitations. Document length norm doc-len-norm(d) and document boost doc-boost(d) are known at indexing time. They are computed in advance and their multiplication is saved as a single value in the index: norm(d) . (In the equations below, norm(t in d) means norm(field(t) in doc d) where field(t) is the field associated with term t .) Lucene's Practical Scoring Function is derived from the above. The color codes demonstrate how it relates to those of the conceptual formula: score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t) 2 · t.Boost · norm(t,d) ) t in q Lucene Practical Scoring Function where tf(t in d) correlates to the term's frequency , defined as the number of times term t appears in the currently scored document d . Documents that have more occurrences of a given term receive a higher score. Note that tf(t in q) is assumed to be 1 and therefore it does not appear in this equation, However if a query contains twice the same term, there will be two term-queries with that same term and hence the computation would still be correct (although not very efficient). The default computation for tf(t in d) in DefaultSimilarity ( Tf(Single) ) is: tf(t in d) = frequency ½ idf(t) stands for Inverse Document Frequency. this value correlates to the inverse of DocFreq (the number of documents in which the term t appears). this means rarer terms give higher contribution to the total score. idf(t) appears for t in both the query and the document, hence it is squared in the equation. The default computation for idf(t) in DefaultSimilarity ( Idf(Int64, Int64) ) is: idf(t) = 1 + log ( NumDocs ––––––––– DocFreq+1 ) coord(q,d) is a score factor based on how many of the query terms are found in the specified document. Typically, a document that contains more of the query's terms will receive a higher score than another document with fewer query terms. this is a search time factor computed in coord(q,d) ( Coord(Int32, Int32) ) by the Similarity in effect at search time. queryNorm(q) is a normalizing factor used to make scores between queries comparable. this factor does not affect document ranking (since all ranked documents are multiplied by the same factor), but rather just attempts to make scores from different queries (or even different indexes) comparable. this is a search time factor computed by the Similarity in effect at search time. The default computation in DefaultSimilarity ( QueryNorm(Single) ) produces a Euclidean norm : queryNorm(q) = queryNorm(sumOfSquaredWeights) = 1 –––––––––––––– sumOfSquaredWeights ½ The sum of squared weights (of the query terms) is computed by the query Weight object. For example, a BooleanQuery computes this value as: sumOfSquaredWeights = q.Boost 2 · ∑ ( idf(t) · t.Boost ) 2 t in q where sumOfSquaredWeights is GetValueForNormalization() and q.Boost is Boost t.Boost is a search time boost of term t in the query q as specified in the query text (see query syntax ), or as set by application calls to Boost . Notice that there is really no direct API for accessing a boost of one term in a multi term query, but rather multi terms are represented in a query as multi TermQuery objects, and so the boost of a term in the query is accessible by calling the sub-query Boost . norm(t,d) encapsulates a few (indexing time) boost and length factors: Field boost - set Boost before adding the field to a document. lengthNorm - computed when the document is added to the index in accordance with the number of tokens of this field in the document, so that shorter fields contribute more to the score. LengthNorm is computed by the Similarity class in effect at indexing. The ComputeNorm(FieldInvertState) method is responsible for combining all of these factors into a single System.Single . When a document is added to the index, all the above factors are multiplied. If the document has multiple fields with the same name, all their boosts are multiplied together: norm(t,d) = lengthNorm · ∏ Boost field f in d named as t Note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class TFIDFSimilarity : Similarity Constructors | Improve this Doc View Source TFIDFSimilarity() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public TFIDFSimilarity() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source Coord(Int32, Int32) Computes a score factor based on the fraction of all query terms that a document contains. this value is multiplied into scores. The presence of a large portion of the query terms indicates a better match with the query, so implementations of this method usually return larger values when the ratio between these parameters is large and smaller values when the ratio between them is small. Declaration public abstract override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap The number of query terms matched in the document System.Int32 maxOverlap The total number of terms in the query Returns Type Description System.Single A score factor based on term overlap with the query Overrides Similarity.Coord(Int32, Int32) | Improve this Doc View Source DecodeNormValue(Int64) Decodes a normalization factor stored in an index. Declaration public abstract float DecodeNormValue(long norm) Parameters Type Name Description System.Int64 norm Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single) Encodes a normalization factor for storage in an index. Declaration public abstract long EncodeNormValue(float f) Parameters Type Name Description System.Single f Returns Type Description System.Int64 | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Idf(Int64, Int64) Computes a score factor based on a term's document frequency (the number of documents which contain the term). This value is multiplied by the Tf(Single) factor for each term in the query and these products are then summed to form the initial score for a document. Terms that occur in fewer documents are better indicators of topic, so implementations of this method usually return larger values for rare terms, and smaller values for common terms. Declaration public abstract float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq The number of documents which contain the term System.Int64 numDocs The total number of documents in the collection Returns Type Description System.Single A score factor based on the term's document frequency | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics) Computes a score factor for a simple term and returns an explanation for that score factor. The default implementation uses: Idf(docFreq, searcher.MaxDoc); Note that MaxDoc is used instead of NumDocs because also DocFreq is used, and when the latter is inaccurate, so is MaxDoc , and in the same direction. In addition, MaxDoc is more efficient to compute Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description CollectionStatistics collectionStats Collection-level statistics TermStatistics termStats Term-level statistics for the term Returns Type Description Explanation An Explain object that includes both an idf score factor and an explanation for the term. | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics[]) Computes a score factor for a phrase. The default implementation sums the idf factor for each term in the phrase. Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics[] termStats) Parameters Type Name Description CollectionStatistics collectionStats Collection-level statistics TermStatistics [] termStats Term-level statistics for the terms in the phrase Returns Type Description Explanation An Explain object that includes both an idf score factor for the phrase and an explanation for each term. | Improve this Doc View Source LengthNorm(FieldInvertState) Compute an index-time normalization value for this field instance. This value will be stored in a single byte lossy representation by EncodeNormValue(Single) . Declaration public abstract float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Statistics of the current field (such as length, boost, etc) Returns Type Description System.Single An index-time normalization value | Improve this Doc View Source QueryNorm(Single) Computes the normalization value for a query given the sum of the squared weights of each of the query terms. this value is multiplied into the weight of each query term. While the classic query normalization factor is computed as 1/sqrt(sumOfSquaredWeights), other implementations might completely ignore sumOfSquaredWeights (ie return 1). This does not affect ranking, but the default implementation does make scores from different queries more comparable than they would be by eliminating the magnitude of the Query vector as a factor in the score. Declaration public abstract override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights The sum of the squares of query term weights Returns Type Description System.Single A normalization factor for query weights Overrides Similarity.QueryNorm(Single) | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) Calculate a scoring factor based on the data in the payload. Implementations are responsible for interpreting what is in the payload. Lucene makes no assumptions about what is in the byte array. Declaration public abstract float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc The docId currently being scored. System.Int32 start The start position of the payload System.Int32 end The end position of the payload BytesRef payload The payload byte array to be scored Returns Type Description System.Single An implementation dependent float to be used as a scoring factor | Improve this Doc View Source SloppyFreq(Int32) Computes the amount of a sloppy phrase match, based on an edit distance. this value is summed for each sloppy phrase match in a document to form the frequency to be used in scoring instead of the exact term count. A phrase match with a small edit distance to a document passage more closely matches the document, so implementations of this method usually return larger values when the edit distance is small and smaller values when it is large. Declaration public abstract float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance The edit distance of this sloppy phrase match Returns Type Description System.Single The frequency increment for this match See Also Slop | Improve this Doc View Source Tf(Single) Computes a score factor based on a term or phrase's frequency in a document. This value is multiplied by the Idf(Int64, Int64) factor for each term in the query and these products are then summed to form the initial score for a document. Terms and phrases repeated in a document indicate the topic of the document, so implementations of this method usually return larger values when freq is large, and smaller values when freq is small. Declaration public abstract float Tf(float freq) Parameters Type Name Description System.Single freq The frequency of a term within a document Returns Type Description System.Single A score factor based on a term's within-document frequency See Also Similarity Similarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Sort.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Sort.html",
    "title": "Class Sort | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Sort Encapsulates sort criteria for returned hits. The fields used to determine sort order must be carefully chosen. Document s must contain a single term in such a field, and the value of the term should indicate the document's relative position in a given sort order. The field must be indexed, but should not be tokenized, and does not need to be stored (unless you happen to want it back with the rest of your document data). In other words: document.Add(new Field(\"byNumber\", x.ToString(CultureInfo.InvariantCulture), Field.Store.NO, Field.Index.NOT_ANALYZED)); Valid Types of Values There are four possible kinds of term values which may be put into sorting fields: System.Int32 s, System.Int64 s, System.Single s, or System.String s. Unless SortField objects are specified, the type of value in the field is determined by parsing the first term in the field. System.Int32 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int32.MinValue and System.Int32.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values (i.e. the documents should be numbered 1..n where 1 is the first and n the last). System.Int64 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int64.MinValue and System.Int64.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values. System.Single term values should conform to values accepted by System.Single (except that NaN and Infinity are not supported). Document s which should appear first in the sort should have low values, later documents high values. System.String term values can contain any valid System.String , but should not be tokenized. The values are sorted according to their comparable natural order ( System.StringComparer.Ordinal ). Note that using this type of term value has higher memory requirements than the other two types. Object Reuse One of these objects can be used multiple times and the sort order changed between usages. This class is thread safe. Memory Usage Sorting uses of caches of term values maintained by the internal HitQueue(s). The cache is static and contains an System.Int32 or System.Single array of length IndexReader.MaxDoc for each field name for which a sort is performed. In other words, the size of the cache in bytes is: 4 * IndexReader.MaxDoc * (# of different fields actually used to sort) For System.String fields, the cache is larger: in addition to the above array, the value of every term in the field is kept in memory. If there are many unique terms in the field, this could be quite large. Note that the size of the cache is not affected by how many fields are in the index and might be used to sort - only by the ones actually used to sort a result set. Created: Feb 12, 2004 10:53:57 AM @since lucene 1.4 Inheritance System.Object Sort Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Sort Constructors | Improve this Doc View Source Sort() Sorts by computed relevance. This is the same sort criteria as calling Search(Query, Int32) without a sort criteria, only with slightly more overhead. Declaration public Sort() | Improve this Doc View Source Sort(SortField) Sorts by the criteria in the given SortField . Declaration public Sort(SortField field) Parameters Type Name Description SortField field | Improve this Doc View Source Sort(SortField[]) Sorts in succession by the criteria in each SortField . Declaration public Sort(params SortField[] fields) Parameters Type Name Description SortField [] fields Fields | Improve this Doc View Source INDEXORDER Represents sorting by index order. Declaration public static readonly Sort INDEXORDER Field Value Type Description Sort | Improve this Doc View Source RELEVANCE Represents sorting by computed relevance. Using this sort criteria returns the same results as calling Search(Query, Int32) without a sort criteria, only with slightly more overhead. Declaration public static readonly Sort RELEVANCE Field Value Type Description Sort Properties | Improve this Doc View Source NeedsScores Returns true if the relevance score is needed to sort documents. Declaration public virtual bool NeedsScores { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSort() Representation of the sort criteria. Declaration public virtual SortField[] GetSort() Returns Type Description SortField [] Array of SortField objects used in this sort criteria | Improve this Doc View Source Rewrite(IndexSearcher) Rewrites the SortField s in this Sort , returning a new Sort if any of the fields changes during their rewriting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Sort Rewrite(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher IndexSearcher to use in the rewriting Returns Type Description Sort this if the Sort/Fields have not changed, or a new Sort if there is a change Exceptions Type Condition System.IO.IOException Can be thrown by the rewriting | Improve this Doc View Source SetSort(SortField) Sets the sort to the given criteria. Declaration public virtual void SetSort(SortField field) Parameters Type Name Description SortField field | Improve this Doc View Source SetSort(SortField[]) Sets the sort to the given criteria in succession. Declaration public virtual void SetSort(params SortField[] fields) Parameters Type Name Description SortField [] fields | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.SortField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortField.html",
    "title": "Class SortField | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortField Stores information about how to sort documents by terms in an individual field. Fields must be indexed in order to sort by them. Created: Feb 11, 2004 1:25:29 PM @since lucene 1.4 Inheritance System.Object SortField Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SortField Constructors | Improve this Doc View Source SortField(String, FieldCache.IParser) Creates a sort by terms in the given field, parsed to numeric values using a custom FieldCache.IParser . Declaration public SortField(string field, FieldCache.IParser parser) Parameters Type Name Description System.String field Name of field to sort by. Must not be null . FieldCache.IParser parser Instance of a FieldCache.IParser , which must subclass one of the existing numeric parsers from IFieldCache . Sort type is inferred by testing which numeric parser the parser subclasses. Exceptions Type Condition System.ArgumentException if the parser fails to subclass an existing numeric parser, or field is null | Improve this Doc View Source SortField(String, FieldCache.IParser, Boolean) Creates a sort, possibly in reverse, by terms in the given field, parsed to numeric values using a custom FieldCache.IParser . Declaration public SortField(string field, FieldCache.IParser parser, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Must not be null . FieldCache.IParser parser Instance of a FieldCache.IParser , which must subclass one of the existing numeric parsers from IFieldCache . Sort type is inferred by testing which numeric parser the parser subclasses. System.Boolean reverse True if natural order should be reversed. Exceptions Type Condition System.ArgumentException if the parser fails to subclass an existing numeric parser, or field is null | Improve this Doc View Source SortField(String, FieldComparerSource) Creates a sort with a custom comparison function. Declaration public SortField(string field, FieldComparerSource comparer) Parameters Type Name Description System.String field Name of field to sort by; cannot be null . FieldComparerSource comparer Returns a comparer for sorting hits. | Improve this Doc View Source SortField(String, FieldComparerSource, Boolean) Creates a sort, possibly in reverse, with a custom comparison function. Declaration public SortField(string field, FieldComparerSource comparer, bool reverse) Parameters Type Name Description System.String field Name of field to sort by; cannot be null . FieldComparerSource comparer Returns a comparer for sorting hits. System.Boolean reverse True if natural order should be reversed. | Improve this Doc View Source SortField(String, SortFieldType) Creates a sort by terms in the given field with the type of term values explicitly given. Declaration public SortField(string field, SortFieldType type) Parameters Type Name Description System.String field Name of field to sort by. Can be null if type is SCORE or DOC . SortFieldType type Type of values in the terms. | Improve this Doc View Source SortField(String, SortFieldType, Boolean) Creates a sort, possibly in reverse, by terms in the given field with the type of term values explicitly given. Declaration public SortField(string field, SortFieldType type, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Can be null if type is SCORE or DOC . SortFieldType type Type of values in the terms. System.Boolean reverse True if natural order should be reversed. Fields | Improve this Doc View Source FIELD_DOC Represents sorting by document number (index order). Declaration public static readonly SortField FIELD_DOC Field Value Type Description SortField | Improve this Doc View Source FIELD_SCORE Represents sorting by document score (relevance). Declaration public static readonly SortField FIELD_SCORE Field Value Type Description SortField | Improve this Doc View Source m_missingValue Declaration protected object m_missingValue Field Value Type Description System.Object | Improve this Doc View Source STRING_FIRST Pass this to MissingValue to have missing string values sort first. Declaration public static readonly object STRING_FIRST Field Value Type Description System.Object | Improve this Doc View Source STRING_LAST Pass this to MissingValue to have missing string values sort last. Declaration public static readonly object STRING_LAST Field Value Type Description System.Object Properties | Improve this Doc View Source BytesComparer Declaration public virtual IComparer<BytesRef> BytesComparer { get; set; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source ComparerSource Returns the FieldComparerSource used for custom sorting. Declaration public virtual FieldComparerSource ComparerSource { get; } Property Value Type Description FieldComparerSource | Improve this Doc View Source Field Returns the name of the field. Could return null if the sort is by SCORE or DOC . Declaration public virtual string Field { get; } Property Value Type Description System.String Name of field, possibly null . | Improve this Doc View Source IsReverse Returns whether the sort should be reversed. Declaration public virtual bool IsReverse { get; } Property Value Type Description System.Boolean True if natural order should be reversed. | Improve this Doc View Source MissingValue Declaration public virtual object MissingValue { get; set; } Property Value Type Description System.Object | Improve this Doc View Source NeedsScores Whether the relevance score is needed to sort documents. Declaration public virtual bool NeedsScores { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parser Returns the instance of a IFieldCache parser that fits to the given sort type. May return null if no parser was specified. Sorting is using the default parser then. Declaration public virtual FieldCache.IParser Parser { get; } Property Value Type Description FieldCache.IParser An instance of a IFieldCache parser, or null . | Improve this Doc View Source Type Returns the type of contents in the field. Declaration public virtual SortFieldType Type { get; } Property Value Type Description SortFieldType One of SCORE , DOC , STRING , INT32 or SINGLE . Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. If a FieldComparerSource or FieldCache.IParser was provided, it must properly implement equals (unless a singleton is always used). Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetComparer(Int32, Int32) Returns the FieldComparer to use for sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits Number of top hits the queue will store System.Int32 sortPos Position of this SortField within Sort . The comparer is primary if sortPos==0, secondary if sortPos==1, etc. Some comparers can optimize themselves when they are the primary sort. Returns Type Description FieldComparer FieldComparer to use when sorting | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. If a FieldComparerSource or FieldCache.IParser was provided, it must properly implement GetHashCode() (unless a singleton is always used). Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Rewrite(IndexSearcher) Rewrites this SortField , returning a new SortField if a change is made. Subclasses should override this define their rewriting behavior when this SortField is of type REWRITEABLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual SortField Rewrite(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher IndexSearcher to use during rewriting Returns Type Description SortField New rewritten SortField , or this if nothing has changed. Exceptions Type Condition System.IO.IOException Can be thrown by the rewriting | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also Sort"
  },
  "api/Lucene.Net/Lucene.Net.Search.SortFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortFieldType.html",
    "title": "Enum SortFieldType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum SortFieldType Specifies the type of the terms to be sorted, or special types such as CUSTOM Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public enum SortFieldType Fields Name Description BYTE Sort using term values as encoded System.Byte s. Sort values are System.Byte and lower values are at the front. BYTES Sort use byte[] index values. CUSTOM Sort using a custom System.Collections.Generic.IComparer<T> . Sort values are any System.IComparable<T> and sorting is done according to natural order. DOC Sort by document number (index order). Sort values are System.Int32 and lower values are at the front. DOUBLE Sort using term values as encoded System.Double s. Sort values are System.Double and lower values are at the front. INT16 Sort using term values as encoded System.Int16 s. Sort values are System.Int16 and lower values are at the front. NOTE: This was SHORT in Lucene INT32 Sort using term values as encoded System.Int32 s. Sort values are System.Int32 and lower values are at the front. NOTE: This was INT in Lucene INT64 Sort using term values as encoded System.Int64 s. Sort values are System.Int64 and lower values are at the front. NOTE: This was LONG in Lucene REWRITEABLE Force rewriting of SortField using Rewrite(IndexSearcher) before it can be used for sorting SCORE Sort by document score (relevance). Sort values are System.Single and higher values are at the front. SINGLE Sort using term values as encoded System.Single s. Sort values are System.Single and lower values are at the front. NOTE: This was FLOAT in Lucene STRING Sort using term values as System.String s. Sort values are System.String s and lower values are at the front. STRING_VAL Sort using term values as System.String s, but comparing by value (using CompareTo(BytesRef) ) for all comparisons. this is typically slower than STRING , which uses ordinals to do the sorting."
  },
  "api/Lucene.Net/Lucene.Net.Search.SortRescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortRescorer.html",
    "title": "Class SortRescorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SortRescorer A Rescorer that re-sorts according to a provided Sort. Inheritance System.Object Rescorer SortRescorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SortRescorer : Rescorer Constructors | Improve this Doc View Source SortRescorer(Sort) Sole constructor. Declaration public SortRescorer(Sort sort) Parameters Type Name Description Sort sort Methods | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Declaration public override Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation Overrides Rescorer.Explain(IndexSearcher, Explanation, Int32) | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Declaration public override TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs firstPassTopDocs System.Int32 topN Returns Type Description TopDocs Overrides Rescorer.Rescore(IndexSearcher, TopDocs, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.FieldMaskingSpanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.FieldMaskingSpanQuery.html",
    "title": "Class FieldMaskingSpanQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldMaskingSpanQuery Wrapper to allow SpanQuery objects participate in composite single-field SpanQueries by 'lying' about their search field. That is, the masked SpanQuery will function as normal, but Field simply hands back the value supplied in this class's constructor. This can be used to support Queries like SpanNearQuery or SpanOrQuery across different fields, which is not ordinarily permitted. This can be useful for denormalized relational data: for example, when indexing a document with conceptually many 'children': teacherid: 1 studentfirstname: james studentsurname: jones teacherid: 2 studenfirstname: james studentsurname: smith studentfirstname: sally studentsurname: jones A SpanNearQuery with a slop of 0 can be applied across two SpanTermQuery objects as follows: SpanQuery q1 = new SpanTermQuery(new Term(\"studentfirstname\", \"james\")); SpanQuery q2 = new SpanTermQuery(new Term(\"studentsurname\", \"jones\")); SpanQuery q2m = new FieldMaskingSpanQuery(q2, \"studentfirstname\"); Query q = new SpanNearQuery(new SpanQuery[] { q1, q2m }, -1, false); to search for 'studentfirstname:james studentsurname:jones' and find teacherid 1 without matching teacherid 2 (which has a 'james' in position 0 and 'jones' in position 1). Note: as Field returns the masked field, scoring will be done using the Similarity and collection statistics of the field name supplied, but with the term statistics of the real field. This may lead to exceptions, poor performance, and unexpected scoring behavior. Inheritance System.Object Query SpanQuery FieldMaskingSpanQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class FieldMaskingSpanQuery : SpanQuery Constructors | Improve this Doc View Source FieldMaskingSpanQuery(SpanQuery, String) Declaration public FieldMaskingSpanQuery(SpanQuery maskedQuery, string maskedField) Parameters Type Name Description SpanQuery maskedQuery System.String maskedField Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source MaskedQuery Declaration public virtual SpanQuery MaskedQuery { get; } Property Value Type Description SpanQuery Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | 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 Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.html",
    "title": "Namespace Lucene.Net.Search.Spans | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Spans <!-- 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. --> The calculus of spans. A span is a <doc,startPosition,endPosition> tuple. The following span query operators are implemented: * A SpanTermQuery matches all spans containing a particular Term . * A SpanNearQuery matches spans which occur near one another, and can be used to implement things like phrase search (when constructed from SpanTermQuery s) and inter-phrase proximity (when constructed from other SpanNearQuery s). * A SpanOrQuery merges spans from a number of other SpanQuery s. * A SpanNotQuery removes spans matching one SpanQuery which overlap (or comes near) another. This can be used, e.g., to implement within-paragraph search. * A SpanFirstQuery matches spans matching q whose end position is less than n . This can be used to constrain matches to the first part of the document. * A SpanPositionRangeQuery is a more general form of SpanFirstQuery that can constrain matches to arbitrary portions of the document. In all cases, output spans are minimally inclusive. In other words, a span formed by matching a span in x and y starts at the lesser of the two starts and ends at the greater of the two ends. For example, a span query which matches \"John Kerry\" within ten words of \"George Bush\" within the first 100 words of the document could be constructed with: SpanQuery john = new SpanTermQuery(new Term(\"content\", \"john\")); SpanQuery kerry = new SpanTermQuery(new Term(\"content\", \"kerry\")); SpanQuery george = new SpanTermQuery(new Term(\"content\", \"george\")); SpanQuery bush = new SpanTermQuery(new Term(\"content\", \"bush\")); SpanQuery johnKerry = new SpanNearQuery(new SpanQuery[] {john, kerry}, 0, true); SpanQuery georgeBush = new SpanNearQuery(new SpanQuery[] {george, bush}, 0, true); SpanQuery johnKerryNearGeorgeBush = new SpanNearQuery(new SpanQuery[] {johnKerry, georgeBush}, 10, false); SpanQuery johnKerryNearGeorgeBushAtStart = new SpanFirstQuery(johnKerryNearGeorgeBush, 100); Span queries may be freely intermixed with other Lucene queries. So, for example, the above query can be restricted to documents which also use the word \"iraq\" with: Query query = new BooleanQuery(); query.add(johnKerryNearGeorgeBushAtStart, true, false); query.add(new TermQuery(\"content\", \"iraq\"), true, false); Classes FieldMaskingSpanQuery Wrapper to allow SpanQuery objects participate in composite single-field SpanQueries by 'lying' about their search field. That is, the masked SpanQuery will function as normal, but Field simply hands back the value supplied in this class's constructor. This can be used to support Queries like SpanNearQuery or SpanOrQuery across different fields, which is not ordinarily permitted. This can be useful for denormalized relational data: for example, when indexing a document with conceptually many 'children': teacherid: 1 studentfirstname: james studentsurname: jones teacherid: 2 studenfirstname: james studentsurname: smith studentfirstname: sally studentsurname: jones A SpanNearQuery with a slop of 0 can be applied across two SpanTermQuery objects as follows: SpanQuery q1 = new SpanTermQuery(new Term(\"studentfirstname\", \"james\")); SpanQuery q2 = new SpanTermQuery(new Term(\"studentsurname\", \"jones\")); SpanQuery q2m = new FieldMaskingSpanQuery(q2, \"studentfirstname\"); Query q = new SpanNearQuery(new SpanQuery[] { q1, q2m }, -1, false); to search for 'studentfirstname:james studentsurname:jones' and find teacherid 1 without matching teacherid 2 (which has a 'james' in position 0 and 'jones' in position 1). Note: as Field returns the masked field, scoring will be done using the Similarity and collection statistics of the field name supplied, but with the term statistics of the real field. This may lead to exceptions, poor performance, and unexpected scoring behavior. NearSpansOrdered A Spans that is formed from the ordered subspans of a SpanNearQuery where the subspans do not overlap and have a maximum slop between them. The formed spans only contains minimum slop matches. The matching slop is computed from the distance(s) between the non overlapping matching Spans . Successive matches are always formed from the successive Spans of the SpanNearQuery . The formed spans may contain overlaps when the slop is at least 1. For example, when querying using t1 t2 t3 with slop at least 1, the fragment: t1 t2 t1 t3 t2 t3 matches twice: t1 t2 .. t3 t1 .. t2 t3 Expert: Only public for subclassing. Most implementations should not need this class NearSpansUnordered Similar to NearSpansOrdered , but for the unordered case. Expert: Only public for subclassing. Most implementations should not need this class SpanFirstQuery Matches spans near the beginning of a field. This class is a simple extension of SpanPositionRangeQuery in that it assumes the start to be zero and only checks the end boundary. SpanMultiTermQueryWrapper<Q> Wraps any MultiTermQuery as a SpanQuery , so it can be nested within other SpanQuery classes. The query is rewritten by default to a SpanOrQuery containing the expanded terms, but this can be customized. Example: WildcardQuery wildcard = new WildcardQuery(new Term(\"field\", \"bro?n\")); SpanQuery spanWildcard = new SpanMultiTermQueryWrapper<WildcardQuery>(wildcard); // do something with spanWildcard, such as use it in a SpanFirstQuery SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. SpanNearPayloadCheckQuery Only return those matches that have a specific payload at the given position. SpanNearQuery Matches spans which are near one another. One can specify slop , the maximum number of intervening unmatched positions, as well as whether matches are required to be in-order. SpanNotQuery Removes matches which overlap with another SpanQuery or within a x tokens before or y tokens after another SpanQuery . SpanOrQuery Matches the union of its clauses. SpanPayloadCheckQuery Only return those matches that have a specific payload at the given position. Do not use this with a SpanQuery that contains a SpanNearQuery . Instead, use SpanNearPayloadCheckQuery since it properly handles the fact that payloads aren't ordered by SpanNearQuery . SpanPositionCheckQuery Base class for filtering a SpanQuery based on the position of a match. SpanPositionCheckQuery.PositionCheckSpan SpanPositionRangeQuery Checks to see if the Match lies between a start and end position SpanQuery Base class for span-based queries. SpanRewriteMethod Abstract class that defines how the query is rewritten. Spans Expert: an enumeration of span matches. Used to implement span searching. Each span represents a range of term positions within a document. Matches are enumerated in order, by increasing document number, within that by increasing start position and finally by increasing end position. SpanScorer Public for extension only. SpanTermQuery Matches spans containing a term. SpanWeight Expert-only. Public for use by other weight implementations TermSpans Expert: Public for extension only Interfaces ISpanMultiTermQueryWrapper LUCENENET specific interface for referring to/identifying a SpanMultiTermQueryWrapper<Q> without referring to its generic closing type. Enums SpanPositionCheckQuery.AcceptStatus Return value for AcceptPosition(Spans) ."
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.ISpanMultiTermQueryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.ISpanMultiTermQueryWrapper.html",
    "title": "Interface ISpanMultiTermQueryWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface ISpanMultiTermQueryWrapper LUCENENET specific interface for referring to/identifying a SpanMultiTermQueryWrapper<Q> without referring to its generic closing type. Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public interface ISpanMultiTermQueryWrapper Properties | Improve this Doc View Source Field Declaration string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MultiTermRewriteMethod Expert: Gets or Sets the rewrite method. This only makes sense to be a span rewrite method. Declaration SpanRewriteMethod MultiTermRewriteMethod { get; } Property Value Type Description SpanRewriteMethod | Improve this Doc View Source WrappedQuery Returns the wrapped query Declaration Query WrappedQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans | Improve this Doc View Source Rewrite(IndexReader) Declaration Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansOrdered.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansOrdered.html",
    "title": "Class NearSpansOrdered | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NearSpansOrdered A Spans that is formed from the ordered subspans of a SpanNearQuery where the subspans do not overlap and have a maximum slop between them. The formed spans only contains minimum slop matches. The matching slop is computed from the distance(s) between the non overlapping matching Spans . Successive matches are always formed from the successive Spans of the SpanNearQuery . The formed spans may contain overlaps when the slop is at least 1. For example, when querying using t1 t2 t3 with slop at least 1, the fragment: t1 t2 t1 t3 t2 t3 matches twice: t1 t2 .. t3 t1 .. t2 t3 Expert: Only public for subclassing. Most implementations should not need this class Inheritance System.Object Spans NearSpansOrdered 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) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class NearSpansOrdered : Spans Constructors | Improve this Doc View Source NearSpansOrdered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public NearSpansOrdered(SpanNearQuery spanNearQuery, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanNearQuery spanNearQuery AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts | Improve this Doc View Source NearSpansOrdered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>, Boolean) Declaration public NearSpansOrdered(SpanNearQuery spanNearQuery, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts, bool collectPayloads) Parameters Type Name Description SpanNearQuery spanNearQuery AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts System.Boolean collectPayloads Properties | Improve this Doc View Source Doc Returns the document number of the current match. Initially invalid. Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Returns the end position of the current match. Initially invalid. Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Returns the start position of the current match. Initially invalid. Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start | Improve this Doc View Source SubSpans Declaration public virtual Spans[] SubSpans { get; } Property Value Type Description Spans [] Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Move to the next match, returning true iff any such exists. Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Skips to the first match beyond the current, whose document number is greater than or equal to target . The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. Returns true if there is such a match. Behaves as if written: bool SkipTo(int target) { do { if (!Next()) return false; } while (target > Doc); return true; } Most implementations are considerably more efficient than that. Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansUnordered.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansUnordered.html",
    "title": "Class NearSpansUnordered | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NearSpansUnordered Similar to NearSpansOrdered , but for the unordered case. Expert: Only public for subclassing. Most implementations should not need this class Inheritance System.Object Spans NearSpansUnordered 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) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class NearSpansUnordered : Spans Constructors | Improve this Doc View Source NearSpansUnordered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public NearSpansUnordered(SpanNearQuery query, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanNearQuery query AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start | Improve this Doc View Source SubSpans Declaration public virtual Spans[] SubSpans { get; } Property Value Type Description Spans [] Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() WARNING: The List is not necessarily in order of the the positions Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Collection of byte[] payloads Overrides Spans.GetPayload() Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanFirstQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanFirstQuery.html",
    "title": "Class SpanFirstQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanFirstQuery Matches spans near the beginning of a field. This class is a simple extension of SpanPositionRangeQuery in that it assumes the start to be zero and only checks the end boundary. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPositionRangeQuery SpanFirstQuery Inherited Members SpanPositionRangeQuery.m_start SpanPositionRangeQuery.m_end SpanPositionRangeQuery.Start SpanPositionRangeQuery.End SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanFirstQuery : SpanPositionRangeQuery Constructors | Improve this Doc View Source SpanFirstQuery(SpanQuery, Int32) Construct a SpanFirstQuery matching spans in match whose end position is less than or equal to end . Declaration public SpanFirstQuery(SpanQuery match, int end) Parameters Type Name Description SpanQuery match System.Int32 end Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionRangeQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides SpanPositionRangeQuery.Clone() | 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 SpanPositionRangeQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanPositionRangeQuery.GetHashCode() | 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 SpanPositionRangeQuery.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.html",
    "title": "Class SpanMultiTermQueryWrapper<Q> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanMultiTermQueryWrapper<Q> Wraps any MultiTermQuery as a SpanQuery , so it can be nested within other SpanQuery classes. The query is rewritten by default to a SpanOrQuery containing the expanded terms, but this can be customized. Example: WildcardQuery wildcard = new WildcardQuery(new Term(\"field\", \"bro?n\")); SpanQuery spanWildcard = new SpanMultiTermQueryWrapper<WildcardQuery>(wildcard); // do something with spanWildcard, such as use it in a SpanFirstQuery Inheritance System.Object Query SpanQuery SpanMultiTermQueryWrapper<Q> Implements ISpanMultiTermQueryWrapper Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanMultiTermQueryWrapper<Q> : SpanQuery, ISpanMultiTermQueryWrapper where Q : MultiTermQuery Type Parameters Name Description Q Constructors | Improve this Doc View Source SpanMultiTermQueryWrapper(Q) Create a new SpanMultiTermQueryWrapper<Q> . Declaration public SpanMultiTermQueryWrapper(Q query) Parameters Type Name Description Q query Query to wrap. NOTE: This will set MultiTermRewriteMethod on the wrapped query , changing its rewrite method to a suitable one for spans. Be sure to not change the rewrite method on the wrapped query afterwards! Doing so will throw System.NotSupportedException on rewriting this query! Fields | Improve this Doc View Source m_query Declaration protected readonly Q m_query Field Value Type Description Q | Improve this Doc View Source SCORING_SPAN_QUERY_REWRITE A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Declaration public static readonly SpanRewriteMethod SCORING_SPAN_QUERY_REWRITE Field Value Type Description SpanRewriteMethod See Also MultiTermRewriteMethod Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source MultiTermRewriteMethod Expert: Gets or Sets the rewrite method. This only makes sense to be a span rewrite method. Declaration public SpanRewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description SpanRewriteMethod | Improve this Doc View Source WrappedQuery Returns the wrapped query Declaration public virtual Query WrappedQuery { get; } Property Value Type Description Query Methods | 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 Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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) Implements ISpanMultiTermQueryWrapper"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.TopTermsSpanBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.TopTermsSpanBooleanQueryRewrite.html",
    "title": "Class SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. Inheritance System.Object MultiTermQuery.RewriteMethod SpanRewriteMethod SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) 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.Search.Spans Assembly : Lucene.Net.dll Syntax public sealed class TopTermsSpanBooleanQueryRewrite : SpanRewriteMethod Constructors | Improve this Doc View Source TopTermsSpanBooleanQueryRewrite(Int32) Create a SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite for at most size terms. Declaration public TopTermsSpanBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source Count return the maximum priority queue size. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | 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 Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides SpanRewriteMethod.Rewrite(IndexReader, MultiTermQuery) See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearPayloadCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearPayloadCheckQuery.html",
    "title": "Class SpanNearPayloadCheckQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanNearPayloadCheckQuery Only return those matches that have a specific payload at the given position. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanNearPayloadCheckQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNearPayloadCheckQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanNearPayloadCheckQuery(SpanNearQuery, ICollection<Byte[]>) Declaration public SpanNearPayloadCheckQuery(SpanNearQuery match, ICollection<byte[]> payloadToMatch) Parameters Type Name Description SpanNearQuery match The underlying SpanQuery to check. System.Collections.Generic.ICollection < System.Byte []> payloadToMatch The ICollection{byte[]} of payloads to match. IMPORTANT: If the type provided does not implement System.Collections.Generic.IList<T> (including arrays) or System.Collections.Generic.ISet<T> , it should either implement System.Collections.IStructuralEquatable or override System.Object.Equals(System.Object) and System.Object.GetHashCode() with implementations that compare the values of the byte arrays to ensure they are the same. Fields | Improve this Doc View Source m_payloadToMatch Declaration protected readonly ICollection<byte[]> m_payloadToMatch Field Value Type Description System.Collections.Generic.ICollection < System.Byte []> Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | 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 Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearQuery.html",
    "title": "Class SpanNearQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanNearQuery Matches spans which are near one another. One can specify slop , the maximum number of intervening unmatched positions, as well as whether matches are required to be in-order. Inheritance System.Object Query SpanQuery SpanNearQuery PayloadNearQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNearQuery : SpanQuery Constructors | Improve this Doc View Source SpanNearQuery(SpanQuery[], Int32, Boolean) Construct a SpanNearQuery . Matches spans matching a span from each clause, with up to slop total unmatched positions between them. * When inOrder is true , the spans from each clause must be * ordered as in clauses . Declaration public SpanNearQuery(SpanQuery[] clauses, int slop, bool inOrder) Parameters Type Name Description SpanQuery [] clauses The clauses to find near each other System.Int32 slop The slop value System.Boolean inOrder true if order is important | Improve this Doc View Source SpanNearQuery(SpanQuery[], Int32, Boolean, Boolean) Declaration public SpanNearQuery(SpanQuery[] clauses, int slop, bool inOrder, bool collectPayloads) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder System.Boolean collectPayloads Fields | Improve this Doc View Source m_clauses Declaration protected readonly IList<SpanQuery> m_clauses Field Value Type Description System.Collections.Generic.IList < SpanQuery > | Improve this Doc View Source m_field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source m_inOrder Declaration protected bool m_inOrder Field Value Type Description System.Boolean | Improve this Doc View Source m_slop Declaration protected int m_slop Field Value Type Description System.Int32 Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source IsInOrder Return true if matches are required to be in-order. Declaration public virtual bool IsInOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Slop Return the maximum number of intervening unmatched positions permitted. Declaration public virtual int Slop { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Returns true iff o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Return the clauses whose spans are matched. Declaration public virtual SpanQuery[] GetClauses() Returns Type Description SpanQuery [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNotQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNotQuery.html",
    "title": "Class SpanNotQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanNotQuery Removes matches which overlap with another SpanQuery or within a x tokens before or y tokens after another SpanQuery . Inheritance System.Object Query SpanQuery SpanNotQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNotQuery : SpanQuery Constructors | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude) Parameters Type Name Description SpanQuery include SpanQuery exclude | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery, Int32) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude within dist tokens of include . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude, int dist) Parameters Type Name Description SpanQuery include SpanQuery exclude System.Int32 dist | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery, Int32, Int32) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude within pre tokens before or post tokens of include . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude, int pre, int post) Parameters Type Name Description SpanQuery include SpanQuery exclude System.Int32 pre System.Int32 post Properties | Improve this Doc View Source Exclude Return the SpanQuery whose matches must not overlap those returned. Declaration public virtual SpanQuery Exclude { get; } Property Value Type Description SpanQuery | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Include Return the SpanQuery whose matches are filtered. Declaration public virtual SpanQuery Include { get; } Property Value Type Description SpanQuery Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanOrQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanOrQuery.html",
    "title": "Class SpanOrQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanOrQuery Matches the union of its clauses. Inheritance System.Object Query SpanQuery SpanOrQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanOrQuery : SpanQuery Constructors | Improve this Doc View Source SpanOrQuery(SpanQuery[]) Construct a SpanOrQuery merging the provided clauses . Declaration public SpanOrQuery(params SpanQuery[] clauses) Parameters Type Name Description SpanQuery [] clauses Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field Methods | Improve this Doc View Source AddClause(SpanQuery) Adds a clause to this query Declaration public void AddClause(SpanQuery clause) Parameters Type Name Description SpanQuery clause | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | 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 Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Return the clauses whose spans are matched. Declaration public virtual SpanQuery[] GetClauses() Returns Type Description SpanQuery [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPayloadCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPayloadCheckQuery.html",
    "title": "Class SpanPayloadCheckQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanPayloadCheckQuery Only return those matches that have a specific payload at the given position. Do not use this with a SpanQuery that contains a SpanNearQuery . Instead, use SpanNearPayloadCheckQuery since it properly handles the fact that payloads aren't ordered by SpanNearQuery . Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPayloadCheckQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanPayloadCheckQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanPayloadCheckQuery(SpanQuery, ICollection<Byte[]>) Declaration public SpanPayloadCheckQuery(SpanQuery match, ICollection<byte[]> payloadToMatch) Parameters Type Name Description SpanQuery match The underlying SpanQuery to check System.Collections.Generic.ICollection < System.Byte []> payloadToMatch The ICollection{byte[]} of payloads to match. IMPORTANT: If the type provided does not implement System.Collections.Generic.IList<T> (including arrays) or System.Collections.Generic.ISet<T> , it should either implement System.Collections.IStructuralEquatable or override System.Object.Equals(System.Object) and System.Object.GetHashCode() with implementations that compare the values of the byte arrays to ensure they are the same. Fields | Improve this Doc View Source m_payloadToMatch Declaration protected readonly ICollection<byte[]> m_payloadToMatch Field Value Type Description System.Collections.Generic.ICollection < System.Byte []> Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | 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 Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.AcceptStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.AcceptStatus.html",
    "title": "Enum SpanPositionCheckQuery.AcceptStatus | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum SpanPositionCheckQuery.AcceptStatus Return value for AcceptPosition(Spans) . Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax protected enum AcceptStatus Fields Name Description NO Indicates the match should be rejected NO_AND_ADVANCE Indicates the match should be rejected, and the enumeration should advance to the next document. YES Indicates the match should be accepted"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.html",
    "title": "Class SpanPositionCheckQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanPositionCheckQuery Base class for filtering a SpanQuery based on the position of a match. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanNearPayloadCheckQuery SpanPayloadCheckQuery SpanPositionRangeQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString(String) Query.ToString() Query.Clone() Query.GetHashCode() Query.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanPositionCheckQuery : SpanQuery Constructors | Improve this Doc View Source SpanPositionCheckQuery(SpanQuery) Declaration public SpanPositionCheckQuery(SpanQuery match) Parameters Type Name Description SpanQuery match Fields | Improve this Doc View Source m_match Declaration protected SpanQuery m_match Field Value Type Description SpanQuery Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Match Declaration public virtual SpanQuery Match { get; } Property Value Type Description SpanQuery The SpanQuery whose matches are filtered. Methods | Improve this Doc View Source AcceptPosition(Spans) Implementing classes are required to return whether the current position is a match for the passed in \"match\" SpanQuery . This is only called if the underlying Next() for the match is successful Declaration protected abstract SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans The Spans instance, positioned at the spot to check Returns Type Description SpanPositionCheckQuery.AcceptStatus Whether the match is accepted, rejected, or rejected and should move to the next doc. See Also Next () | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.PositionCheckSpan.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.PositionCheckSpan.html",
    "title": "Class SpanPositionCheckQuery.PositionCheckSpan | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanPositionCheckQuery.PositionCheckSpan Inheritance System.Object Spans SpanPositionCheckQuery.PositionCheckSpan 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) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax protected class PositionCheckSpan : Spans Constructors | Improve this Doc View Source PositionCheckSpan(SpanPositionCheckQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public PositionCheckSpan(SpanPositionCheckQuery outerInstance, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanPositionCheckQuery outerInstance AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start Methods | Improve this Doc View Source DoNext() Declaration protected virtual bool DoNext() Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionRangeQuery.html",
    "title": "Class SpanPositionRangeQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanPositionRangeQuery Checks to see if the Match lies between a start and end position Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPositionRangeQuery SpanFirstQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanPositionRangeQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanPositionRangeQuery(SpanQuery, Int32, Int32) Declaration public SpanPositionRangeQuery(SpanQuery match, int start, int end) Parameters Type Name Description SpanQuery match System.Int32 start System.Int32 end Fields | Improve this Doc View Source m_end Declaration protected int m_end Field Value Type Description System.Int32 | Improve this Doc View Source m_start Declaration protected int m_start Field Value Type Description System.Int32 Properties | Improve this Doc View Source End Declaration public virtual int End { get; } Property Value Type Description System.Int32 The maximum end position permitted in a match. | Improve this Doc View Source Start Declaration public virtual int Start { get; } Property Value Type Description System.Int32 The minimum position permitted in a match Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | 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 Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | 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) See Also SpanFirstQuery"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanQuery.html",
    "title": "Class SpanQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanQuery Base class for span-based queries. Inheritance System.Object Query SpanQuery FieldMaskingSpanQuery SpanMultiTermQueryWrapper<Q> SpanNearQuery SpanNotQuery SpanOrQuery SpanPositionCheckQuery SpanTermQuery Inherited Members Query.Boost Query.ToString(String) Query.ToString() Query.Rewrite(IndexReader) Query.ExtractTerms(ISet<Term>) Query.Clone() Query.GetHashCode() Query.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanQuery : Query Properties | Improve this Doc View Source Field Returns the name of the field matched by this query. Note that this may return null if the query matches no terms. Declaration public abstract string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Expert: Returns the matches for this query in an index. Used internally to search for spans. Declaration public abstract Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanRewriteMethod.html",
    "title": "Class SpanRewriteMethod | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanRewriteMethod Abstract class that defines how the query is rewritten. Inheritance System.Object MultiTermQuery.RewriteMethod SpanRewriteMethod SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanRewriteMethod : MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public abstract override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.Spans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.Spans.html",
    "title": "Class Spans | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Spans Expert: an enumeration of span matches. Used to implement span searching. Each span represents a range of term positions within a document. Matches are enumerated in order, by increasing document number, within that by increasing start position and finally by increasing end position. Inheritance System.Object Spans NearSpansOrdered NearSpansUnordered SpanPositionCheckQuery.PositionCheckSpan TermSpans Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class Spans Properties | Improve this Doc View Source Doc Returns the document number of the current match. Initially invalid. Declaration public abstract int Doc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source End Returns the end position of the current match. Initially invalid. Declaration public abstract int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsPayloadAvailable Checks if a payload can be loaded at this position. Payloads can only be loaded once per call to Next() . Declaration public abstract bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean true if there is a payload available at this position that can be loaded | Improve this Doc View Source Start Returns the start position of the current match. Initially invalid. Declaration public abstract int Start { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetCost() Returns the estimated cost of this spans. This is generally an upper bound of the number of documents this iterator might match, but may be a rough heuristic, hardcoded value, or otherwise completely inaccurate. Declaration public abstract long GetCost() Returns Type Description System.Int64 | Improve this Doc View Source GetPayload() Returns the payload data for the current span. this is invalid until Next() is called for the first time. This method must not be called more than once after each call of Next() . However, most payloads are loaded lazily, so if the payload data for the current position is not needed, this method may not be called at all for performance reasons. An ordered SpanQuery does not lazy load, so if you have payloads in your index and you do not want ordered SpanNearQuerys to collect payloads, you can disable collection with a constructor option. Note that the return type is a collection, thus the ordering should not be relied upon. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> A ICollection{byte[]} of byte arrays containing the data of this payload, otherwise null if IsPayloadAvailable is false Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source Next() Move to the next match, returning true if any such exists. Declaration public abstract bool Next() Returns Type Description System.Boolean | Improve this Doc View Source SkipTo(Int32) Skips to the first match beyond the current, whose document number is greater than or equal to target . The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. Returns true if there is such a match. Behaves as if written: bool SkipTo(int target) { do { if (!Next()) return false; } while (target > Doc); return true; } Most implementations are considerably more efficient than that. Declaration public abstract bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanScorer.html",
    "title": "Class SpanScorer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanScorer Public for extension only. Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadNearQuery.PayloadNearSpanScorer PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanScorer : Scorer Constructors | Improve this Doc View Source SpanScorer(Spans, Weight, Similarity.SimScorer) Declaration protected SpanScorer(Spans spans, Weight weight, Similarity.SimScorer docScorer) Parameters Type Name Description Spans spans Weight weight Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_doc Declaration protected int m_doc Field Value Type Description System.Int32 | Improve this Doc View Source m_docScorer Declaration protected readonly Similarity.SimScorer m_docScorer Field Value Type Description Similarity.SimScorer | Improve this Doc View Source m_freq Declaration protected float m_freq Field Value Type Description System.Single | Improve this Doc View Source m_more Declaration protected bool m_more Field Value Type Description System.Boolean | Improve this Doc View Source m_numMatches Declaration protected int m_numMatches Field Value Type Description System.Int32 | Improve this Doc View Source m_spans Declaration protected Spans m_spans Field Value Type Description Spans Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source SloppyFreq Returns the intermediate \"sloppy freq\" adjusted for edit distance This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual float SloppyFreq { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected virtual bool SetFreqCurrentDoc() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanTermQuery.html",
    "title": "Class SpanTermQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanTermQuery Matches spans containing a term. Inheritance System.Object Query SpanQuery SpanTermQuery PayloadTermQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanTermQuery : SpanQuery Constructors | Improve this Doc View Source SpanTermQuery(Term) Construct a SpanTermQuery matching the named term's spans. Declaration public SpanTermQuery(Term term) Parameters Type Name Description Term term Fields | Improve this Doc View Source m_term Declaration protected Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Term Return the term whose spans are matched. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | 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 ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | 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)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanWeight.html",
    "title": "Class SpanWeight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpanWeight Expert-only. Public for use by other weight implementations Inheritance System.Object Weight SpanWeight PayloadNearQuery.PayloadNearSpanWeight PayloadTermQuery.PayloadTermWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanWeight : Weight Constructors | Improve this Doc View Source SpanWeight(SpanQuery, IndexSearcher) Declaration public SpanWeight(SpanQuery query, IndexSearcher searcher) Parameters Type Name Description SpanQuery query IndexSearcher searcher Fields | Improve this Doc View Source m_query Declaration protected SpanQuery m_query Field Value Type Description SpanQuery | Improve this Doc View Source m_similarity Declaration protected Similarity m_similarity Field Value Type Description Similarity | Improve this Doc View Source m_stats Declaration protected Similarity.SimWeight m_stats Field Value Type Description Similarity.SimWeight | Improve this Doc View Source m_termContexts Declaration protected IDictionary<Term, TermContext> m_termContexts Field Value Type Description System.Collections.Generic.IDictionary < Term , TermContext > Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.TermSpans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.TermSpans.html",
    "title": "Class TermSpans | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermSpans Expert: Public for extension only Inheritance System.Object Spans TermSpans 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) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class TermSpans : Spans Constructors | Improve this Doc View Source TermSpans(DocsAndPositionsEnum, Term) Declaration public TermSpans(DocsAndPositionsEnum postings, Term term) Parameters Type Name Description DocsAndPositionsEnum postings Term term Fields | Improve this Doc View Source EMPTY_TERM_SPANS Declaration public static readonly TermSpans EMPTY_TERM_SPANS Field Value Type Description TermSpans | Improve this Doc View Source m_count Declaration protected int m_count Field Value Type Description System.Int32 | Improve this Doc View Source m_doc Declaration protected int m_doc Field Value Type Description System.Int32 | Improve this Doc View Source m_freq Declaration protected int m_freq Field Value Type Description System.Int32 | Improve this Doc View Source m_position Declaration protected int m_position Field Value Type Description System.Int32 | Improve this Doc View Source m_postings Declaration protected readonly DocsAndPositionsEnum m_postings Field Value Type Description DocsAndPositionsEnum | Improve this Doc View Source m_readPayload Declaration protected bool m_readPayload Field Value Type Description System.Boolean | Improve this Doc View Source m_term Declaration protected readonly Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Postings Declaration public virtual DocsAndPositionsEnum Postings { get; } Property Value Type Description DocsAndPositionsEnum | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermCollectingRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermCollectingRewrite-1.html",
    "title": "Class TermCollectingRewrite<Q> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermCollectingRewrite<Q> Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite<Q> ConstantScoreAutoRewrite ScoringRewrite<Q> TopTermsRewrite<Q> Inherited Members MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TermCollectingRewrite<Q> : MultiTermQuery.RewriteMethod where Q : Query Type Parameters Name Description Q Methods | Improve this Doc View Source AddClause(Q, Term, Int32, Single) Add a MultiTermQuery term to the top-level query Declaration protected void AddClause(Q topLevel, Term term, int docCount, float boost) Parameters Type Name Description Q topLevel Term term System.Int32 docCount System.Single boost | Improve this Doc View Source AddClause(Q, Term, Int32, Single, TermContext) Declaration protected abstract void AddClause(Q topLevel, Term term, int docCount, float boost, TermContext states) Parameters Type Name Description Q topLevel Term term System.Int32 docCount System.Single boost TermContext states | Improve this Doc View Source GetTopLevelQuery() Return a suitable top-level Query for holding all expanded terms. Declaration protected abstract Q GetTopLevelQuery() Returns Type Description Q"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermQuery.html",
    "title": "Class TermQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermQuery A Query that matches documents containing a term. this may be combined with other terms with a BooleanQuery . Inheritance System.Object Query TermQuery Inherited Members Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Serializable] public class TermQuery : Query Constructors | Improve this Doc View Source TermQuery(Term) Constructs a query for the term t . Declaration public TermQuery(Term t) Parameters Type Name Description Term t | Improve this Doc View Source TermQuery(Term, TermContext) Expert: constructs a TermQuery that will use the provided docFreq instead of looking up the docFreq against the searcher. Declaration public TermQuery(Term t, TermContext states) Parameters Type Name Description Term t TermContext states | Improve this Doc View Source TermQuery(Term, Int32) Expert: constructs a TermQuery that will use the provided docFreq instead of looking up the docFreq against the searcher. Declaration public TermQuery(Term t, int docFreq) Parameters Type Name Description Term t System.Int32 docFreq Properties | Improve this Doc View Source Term Returns the term of this query. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeFilter.html",
    "title": "Class TermRangeFilter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermRangeFilter A Filter that restricts search results to a range of term values in a given field. This filter matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) , It is not intended for numerical ranges; use NumericRangeFilter instead. If you construct a large number of range filters with different ranges but on the same field, FieldCacheRangeFilter may have significantly better performance. @since 2.9 Inheritance System.Object Filter MultiTermQueryWrapperFilter < TermRangeQuery > TermRangeFilter Inherited Members MultiTermQueryWrapperFilter<TermRangeQuery>.m_query MultiTermQueryWrapperFilter<TermRangeQuery>.ToString() MultiTermQueryWrapperFilter<TermRangeQuery>.Equals(Object) MultiTermQueryWrapperFilter<TermRangeQuery>.GetHashCode() MultiTermQueryWrapperFilter<TermRangeQuery>.Field MultiTermQueryWrapperFilter<TermRangeQuery>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeFilter : MultiTermQueryWrapperFilter<TermRangeQuery> Constructors | Improve this Doc View Source TermRangeFilter(String, BytesRef, BytesRef, Boolean, Boolean) Declaration public TermRangeFilter(string fieldName, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String fieldName The field this range applies to BytesRef lowerTerm The lower bound on this range BytesRef upperTerm The upper bound on this range System.Boolean includeLower Does this range include the lower bound? System.Boolean includeUpper Does this range include the upper bound? Exceptions Type Condition System.ArgumentException if both terms are null or if lowerTerm is null and includeLower is true (similar for upperTerm and includeUpper) Properties | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerTerm Returns the lower value of this range filter Declaration public virtual BytesRef LowerTerm { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperTerm Returns the upper value of this range filter Declaration public virtual BytesRef UpperTerm { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Less(String, BytesRef) Constructs a filter for field fieldName matching less than or equal to upperTerm . Declaration public static TermRangeFilter Less(string fieldName, BytesRef upperTerm) Parameters Type Name Description System.String fieldName BytesRef upperTerm Returns Type Description TermRangeFilter | Improve this Doc View Source More(String, BytesRef) Constructs a filter for field fieldName matching greater than or equal to lowerTerm . Declaration public static TermRangeFilter More(string fieldName, BytesRef lowerTerm) Parameters Type Name Description System.String fieldName BytesRef lowerTerm Returns Type Description TermRangeFilter | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Factory that creates a new TermRangeFilter using System.String s for term text. Declaration public static TermRangeFilter NewStringRange(string field, string lowerTerm, string upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerTerm System.String upperTerm System.Boolean includeLower System.Boolean includeUpper Returns Type Description TermRangeFilter"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeQuery.html",
    "title": "Class TermRangeQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermRangeQuery A Query that matches documents within an range of terms. This query matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) . It is not intended for numerical ranges; use NumericRangeQuery instead. This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. @since 2.9 Inheritance System.Object Query MultiTermQuery TermRangeQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeQuery : MultiTermQuery Constructors | Improve this Doc View Source TermRangeQuery(String, BytesRef, BytesRef, Boolean, Boolean) Constructs a query selecting all terms greater/equal than lowerTerm but less/equal than upperTerm . If an endpoint is null , it is said to be \"open\". Either or both endpoints may be open. Open endpoints may not be exclusive (you can't select all but the first or last term without explicitly specifying the term to exclude.) Declaration public TermRangeQuery(string field, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field The field that holds both lower and upper terms. BytesRef lowerTerm The term text at the lower end of the range. BytesRef upperTerm The term text at the upper end of the range. System.Boolean includeLower If true, the lowerTerm is included in the range. System.Boolean includeUpper If true, the upperTerm is included in the range. Properties | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerTerm Returns the lower value of this range query Declaration public virtual BytesRef LowerTerm { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperTerm Returns the upper value of this range query Declaration public virtual BytesRef UpperTerm { get; } Property Value Type Description BytesRef Methods | 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 MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Factory that creates a new TermRangeQuery using System.String s for term text. Declaration public static TermRangeQuery NewStringRange(string field, string lowerTerm, string upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerTerm System.String upperTerm System.Boolean includeLower System.Boolean includeUpper Returns Type Description TermRangeQuery | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeTermsEnum.html",
    "title": "Class TermRangeTermsEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermRangeTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified range parameters. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FilteredTermsEnum TermRangeTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source TermRangeTermsEnum(TermsEnum, BytesRef, BytesRef, Boolean, Boolean) Enumerates all terms greater/equal than lowerTerm but less/equal than upperTerm . If an endpoint is null , it is said to be \"open\". Either or both endpoints may be open. Open endpoints may not be exclusive (you can't select all but the first or last term without explicitly specifying the term to exclude.) Declaration public TermRangeTermsEnum(TermsEnum tenum, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description TermsEnum tenum TermsEnum to filter BytesRef lowerTerm The term text at the lower end of the range BytesRef upperTerm The term text at the upper end of the range System.Boolean includeLower If true, the lowerTerm is included in the range. System.Boolean includeUpper If true, the upperTerm is included in the range. Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermStatistics.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermStatistics.html",
    "title": "Class TermStatistics | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TermStatistics Contains statistics for a specific term This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermStatistics Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermStatistics Constructors | Improve this Doc View Source TermStatistics(BytesRef, Int64, Int64) Sole constructor. Declaration public TermStatistics(BytesRef term, long docFreq, long totalTermFreq) Parameters Type Name Description BytesRef term System.Int64 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq Returns the number of documents this term occurs in Declaration public long DocFreq { get; } Property Value Type Description System.Int64 See Also DocFreq | Improve this Doc View Source Term Returns the term text Declaration public BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 See Also TotalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.html",
    "title": "Class TimeLimitingCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TimeLimitingCollector The TimeLimitingCollector is used to timeout search requests that take longer than the maximum allowed search time limit. After this time is exceeded, the search thread is stopped by throwing a TimeLimitingCollector.TimeExceededException . Inheritance System.Object TimeLimitingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TimeLimitingCollector : ICollector Constructors | Improve this Doc View Source TimeLimitingCollector(ICollector, Counter, Int64) Create a TimeLimitingCollector wrapper over another ICollector with a specified timeout. Declaration public TimeLimitingCollector(ICollector collector, Counter clock, long ticksAllowed) Parameters Type Name Description ICollector collector The wrapped ICollector Counter clock The timer clock System.Int64 ticksAllowed Max time allowed for collecting hits after which TimeLimitingCollector.TimeExceededException is thrown Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GlobalCounter Returns the global TimeLimitingCollector.TimerThread 's Counter Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread iff the global TimeLimitingCollector.TimerThread has never been accessed before. The thread returned from this method is started on creation and will be alive unless you stop the TimeLimitingCollector.TimerThread via StopTimer() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static Counter GlobalCounter { get; } Property Value Type Description Counter the global TimerThreads Counter | Improve this Doc View Source GlobalTimerThread Returns the global TimeLimitingCollector.TimerThread . Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread iff the global TimeLimitingCollector.TimerThread has never been accessed before. The thread returned from this method is started on creation and will be alive unless you stop the TimeLimitingCollector.TimerThread via StopTimer() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static TimeLimitingCollector.TimerThread GlobalTimerThread { get; } Property Value Type Description TimeLimitingCollector.TimerThread the global TimeLimitingCollector.TimerThread | Improve this Doc View Source IsGreedy Checks if this time limited collector is greedy in collecting the last hit. A non greedy collector, upon a timeout, would throw a TimeLimitingCollector.TimeExceededException without allowing the wrapped collector to collect current doc. A greedy one would first allow the wrapped hit collector to collect current doc and only then throw a TimeLimitingCollector.TimeExceededException . Declaration public virtual bool IsGreedy { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Calls Collect(Int32) on the decorated ICollector unless the allowed time has passed, in which case it throws an exception. Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc Exceptions Type Condition TimeLimitingCollector.TimeExceededException If the time allowed has exceeded. | Improve this Doc View Source SetBaseline() Syntactic sugar for SetBaseline(Int64) using Get() on the clock passed to the constructor. Declaration public virtual void SetBaseline() | Improve this Doc View Source SetBaseline(Int64) Sets the baseline for this collector. By default the collectors baseline is initialized once the first reader is passed to the collector. To include operations executed in prior to the actual document collection set the baseline through this method in your prelude. Example usage: // Counter is in the Lucene.Net.Util namespace Counter clock = Counter.NewCounter(true); long baseline = clock.Get(); // ... prepare search TimeLimitingCollector collector = new TimeLimitingCollector(c, clock, numTicks); collector.SetBaseline(baseline); indexSearcher.Search(query, collector); Declaration public virtual void SetBaseline(long clockTime) Parameters Type Name Description System.Int64 clockTime See Also SetBaseline() | Improve this Doc View Source SetCollector(ICollector) This is so the same timer can be used with a multi-phase search process such as grouping. We don't want to create a new TimeLimitingCollector for each phase because that would reset the timer for each phase. Once time is up subsequent phases need to timeout quickly. Declaration public virtual void SetCollector(ICollector collector) Parameters Type Name Description ICollector collector The actual collector performing search functionality. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimeExceededException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimeExceededException.html",
    "title": "Class TimeLimitingCollector.TimeExceededException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TimeLimitingCollector.TimeExceededException Thrown when elapsed search time exceeds allowed search time. Inheritance System.Object System.Exception TimeLimitingCollector.TimeExceededException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TimeExceededException : Exception, ISerializable Properties | Improve this Doc View Source LastDocCollected Returns last doc (absolute doc id) that was collected when the search time exceeded. Declaration public virtual int LastDocCollected { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeAllowed Returns allowed time (milliseconds). Declaration public virtual long TimeAllowed { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TimeElapsed Returns elapsed time (milliseconds). Declaration public virtual long TimeElapsed { get; } Property Value Type Description System.Int64 Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimerThread.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimerThread.html",
    "title": "Class TimeLimitingCollector.TimerThread | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TimeLimitingCollector.TimerThread Thread used to timeout search requests. Can be stopped completely with StopTimer() This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object J2N.Threading.ThreadJob TimeLimitingCollector.TimerThread Implements System.IEquatable < J2N.Threading.ThreadJob > System.IEquatable < System.Threading.Thread > Inherited Members J2N.Threading.ThreadJob.SafeRun(System.Threading.ThreadStart) J2N.Threading.ThreadJob.Start() J2N.Threading.ThreadJob.Interrupt() J2N.Threading.ThreadJob.Join() J2N.Threading.ThreadJob.Join(System.Int64) J2N.Threading.ThreadJob.Join(System.Int64, System.Int32) J2N.Threading.ThreadJob.Resume() J2N.Threading.ThreadJob.Abort() J2N.Threading.ThreadJob.Abort(System.Object) J2N.Threading.ThreadJob.Yield() J2N.Threading.ThreadJob.Suspend() J2N.Threading.ThreadJob.Sleep(System.Int64) J2N.Threading.ThreadJob.Sleep(System.Int64, System.Int32) J2N.Threading.ThreadJob.Sleep(System.TimeSpan) J2N.Threading.ThreadJob.Interrupted() J2N.Threading.ThreadJob.Equals(System.Threading.Thread) J2N.Threading.ThreadJob.Equals(J2N.Threading.ThreadJob) J2N.Threading.ThreadJob.Equals(System.Object) J2N.Threading.ThreadJob.GetHashCode() J2N.Threading.ThreadJob.ToString() J2N.Threading.ThreadJob.SyncRoot J2N.Threading.ThreadJob.Instance J2N.Threading.ThreadJob.CurrentThread J2N.Threading.ThreadJob.Name J2N.Threading.ThreadJob.State J2N.Threading.ThreadJob.Priority J2N.Threading.ThreadJob.IsAlive J2N.Threading.ThreadJob.IsBackground J2N.Threading.ThreadJob.IsDebug System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TimerThread : ThreadJob, IEquatable<ThreadJob>, IEquatable<Thread> Constructors | Improve this Doc View Source TimerThread(Counter) Declaration public TimerThread(Counter counter) Parameters Type Name Description Counter counter | Improve this Doc View Source TimerThread(Int64, Counter) Declaration public TimerThread(long resolution, Counter counter) Parameters Type Name Description System.Int64 resolution Counter counter Fields | Improve this Doc View Source DEFAULT_RESOLUTION Declaration public const int DEFAULT_RESOLUTION = 20 Field Value Type Description System.Int32 | Improve this Doc View Source THREAD_NAME Declaration public const string THREAD_NAME = \"TimeLimitedCollector timer thread\" Field Value Type Description System.String Properties | Improve this Doc View Source Milliseconds Get the timer value in milliseconds. Declaration public long Milliseconds { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Resolution Return the timer resolution. Declaration public long Resolution { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Run() Declaration public override void Run() Overrides J2N.Threading.ThreadJob.Run() | Improve this Doc View Source StopTimer() Stops the timer thread Declaration public void StopTimer() Implements System.IEquatable<T> System.IEquatable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopDocs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopDocs.html",
    "title": "Class TopDocs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopDocs Represents hits returned by Search(Query, Filter, Int32) and Search(Query, Int32) . Inheritance System.Object TopDocs TopFieldDocs Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TopDocs Constructors | Improve this Doc View Source TopDocs(Int32, ScoreDoc[], Single) Declaration public TopDocs(int totalHits, ScoreDoc[] scoreDocs, float maxScore) Parameters Type Name Description System.Int32 totalHits ScoreDoc [] scoreDocs System.Single maxScore Properties | Improve this Doc View Source MaxScore Returns the maximum score value encountered. Note that in case scores are not tracked, this returns System.Single.NaN . Declaration public virtual float MaxScore { get; set; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs The top hits for the query. Declaration public ScoreDoc[] ScoreDocs { get; set; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits The total number of hits for the query. Declaration public int TotalHits { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Merge(Sort, Int32, TopDocs[]) Returns a new TopDocs , containing topN results across the provided TopDocs , sorting by the specified Sort . Each of the TopDocs must have been sorted by the same Sort , and sort field values must have been filled (ie, fillFields=true must be passed to Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) . Pass sort =null to merge sort by score descending. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static TopDocs Merge(Sort sort, int topN, TopDocs[] shardHits) Parameters Type Name Description Sort sort System.Int32 topN TopDocs [] shardHits Returns Type Description TopDocs | Improve this Doc View Source Merge(Sort, Int32, Int32, TopDocs[]) Same as Merge(Sort, Int32, TopDocs[]) but also slices the result at the same time based on the provided start and size. The return TopDocs will always have a scoreDocs with length of at most Count . Declaration public static TopDocs Merge(Sort sort, int start, int size, TopDocs[] shardHits) Parameters Type Name Description Sort sort System.Int32 start System.Int32 size TopDocs [] shardHits Returns Type Description TopDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopDocsCollector-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopDocsCollector-1.html",
    "title": "Class TopDocsCollector<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopDocsCollector<T> A base class for all collectors that return a TopDocs output. This collector allows easy extension by providing a single constructor which accepts a PriorityQueue<T> as well as protected members for that priority queue and a counter of the number of total hits. Extending classes can override any of the methods to provide their own implementation, as well as avoid the use of the priority queue entirely by passing null to TopDocsCollector(PriorityQueue<T>) . In that case however, you might want to consider overriding all methods, in order to avoid a System.NullReferenceException . Inheritance System.Object TopDocsCollector<T> TopFieldCollector TopScoreDocCollector Implements ITopDocsCollector ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopDocsCollector<T> : ITopDocsCollector, ICollector where T : ScoreDoc Type Parameters Name Description T Constructors | Improve this Doc View Source TopDocsCollector(PriorityQueue<T>) Sole constructor. Declaration protected TopDocsCollector(PriorityQueue<T> pq) Parameters Type Name Description PriorityQueue <T> pq Fields | Improve this Doc View Source EMPTY_TOPDOCS This is used in case GetTopDocs() is called with illegal parameters, or there simply aren't (enough) results. Declaration protected static readonly TopDocs EMPTY_TOPDOCS Field Value Type Description TopDocs | Improve this Doc View Source m_pq The priority queue which holds the top documents. Note that different implementations of PriorityQueue<T> give different meaning to 'top documents'. Lucene.Net.Search.HitQueue for example aggregates the top scoring documents, while other priority queue implementations may hold documents sorted by other criteria. Declaration protected PriorityQueue<T> m_pq Field Value Type Description PriorityQueue <T> | Improve this Doc View Source m_totalHits The total number of documents that the collector encountered. Declaration protected int m_totalHits Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration public abstract bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TopDocsCount The number of valid priority queue entries Declaration protected virtual int TopDocsCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHits The total number of documents that matched this query. Declaration public virtual int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopDocs() Returns the top docs that were collected by this collector. Declaration public virtual TopDocs GetTopDocs() Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32) Returns the documents in the rage [ start .. pq.Count) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned. This method is convenient to call if the application always asks for the last results, starting from the last 'page'. NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different start , you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration public virtual TopDocs GetTopDocs(int start) Parameters Type Name Description System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32, Int32) Returns the documents in the rage [ start .. start + howMany ) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned, and if pq.Count - start < howMany , then only the available documents in [ start .. pq.Count) are returned. This method is useful to call in case pagination of search results is allowed by the search application, as well as it attempts to optimize the memory used by allocating only as much as requested by howMany . NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different range, you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration public virtual TopDocs GetTopDocs(int start, int howMany) Parameters Type Name Description System.Int32 start System.Int32 howMany Returns Type Description TopDocs | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Returns a TopDocs instance containing the given results. If results is null it means there are no results to return, either because there were 0 calls to Collect(Int32) or because the arguments to TopDocs were invalid. Declaration protected virtual TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source PopulateResults(ScoreDoc[], Int32) Populates the results array with the ScoreDoc instances. This can be overridden in case a different ScoreDoc type should be returned. Declaration protected virtual void PopulateResults(ScoreDoc[] results, int howMany) Parameters Type Name Description ScoreDoc [] results System.Int32 howMany | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to Collect(Int32) ), should save the passed-in Scorer and call GetScore() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ITopDocsCollector ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopFieldCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopFieldCollector.html",
    "title": "Class TopFieldCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopFieldCollector A ICollector that sorts by SortField using FieldComparer s. See the Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) method for instantiating a TopFieldCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TopDocsCollector < FieldValueHitQueue.Entry > TopFieldCollector Implements ITopDocsCollector ICollector Inherited Members TopDocsCollector<FieldValueHitQueue.Entry>.EMPTY_TOPDOCS TopDocsCollector<FieldValueHitQueue.Entry>.m_pq TopDocsCollector<FieldValueHitQueue.Entry>.m_totalHits TopDocsCollector<FieldValueHitQueue.Entry>.TotalHits TopDocsCollector<FieldValueHitQueue.Entry>.TopDocsCount TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs() TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs(Int32) TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs(Int32, Int32) TopDocsCollector<FieldValueHitQueue.Entry>.SetScorer(Scorer) TopDocsCollector<FieldValueHitQueue.Entry>.Collect(Int32) TopDocsCollector<FieldValueHitQueue.Entry>.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopFieldCollector : TopDocsCollector<FieldValueHitQueue.Entry>, ITopDocsCollector, ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public override bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.AcceptsDocsOutOfOrder Methods | Improve this Doc View Source Create(Sort, Int32, FieldDoc, Boolean, Boolean, Boolean, Boolean) Creates a new TopFieldCollector from the given arguments. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static TopFieldCollector Create(Sort sort, int numHits, FieldDoc after, bool fillFields, bool trackDocScores, bool trackMaxScore, bool docsScoredInOrder) Parameters Type Name Description Sort sort The sort criteria ( SortField s). System.Int32 numHits The number of results to collect. FieldDoc after Only hits after this FieldDoc will be collected System.Boolean fillFields Specifies whether the actual field values should be returned on the results ( FieldDoc ). System.Boolean trackDocScores Specifies whether document scores should be tracked and set on the results. Note that if set to false , then the results' scores will be set to System.Single.NaN . Setting this to true affects performance, as it incurs the score computation on each competitive result. Therefore if document scores are not required by the application, it is recommended to set it to false . System.Boolean trackMaxScore Specifies whether the query's maxScore should be tracked and set on the resulting TopDocs . Note that if set to false , MaxScore returns System.Single.NaN . Setting this to true affects performance as it incurs the score computation on each result. Also, setting this true automatically sets trackDocScores to true as well. System.Boolean docsScoredInOrder Specifies whether documents are scored in doc Id order or not by the given Scorer in SetScorer(Scorer) . Returns Type Description TopFieldCollector A TopFieldCollector instance which will sort the results by the sort criteria. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) Creates a new TopFieldCollector from the given arguments. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static TopFieldCollector Create(Sort sort, int numHits, bool fillFields, bool trackDocScores, bool trackMaxScore, bool docsScoredInOrder) Parameters Type Name Description Sort sort The sort criteria ( SortField s). System.Int32 numHits The number of results to collect. System.Boolean fillFields Specifies whether the actual field values should be returned on the results ( FieldDoc ). System.Boolean trackDocScores Specifies whether document scores should be tracked and set on the results. Note that if set to false , then the results' scores will be set to System.Single.NaN . Setting this to true affects performance, as it incurs the score computation on each competitive result. Therefore if document scores are not required by the application, it is recommended to set it to false . System.Boolean trackMaxScore Specifies whether the query's Lucene.Net.Search.TopFieldCollector.maxScore should be tracked and set on the resulting TopDocs . Note that if set to false , MaxScore returns System.Single.NaN . Setting this to true affects performance as it incurs the score computation on each result. Also, setting this true automatically sets trackDocScores to true as well. System.Boolean docsScoredInOrder Specifies whether documents are scored in doc Id order or not by the given Scorer in SetScorer(Scorer) . Returns Type Description TopFieldCollector A TopFieldCollector instance which will sort the results by the sort criteria. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Declaration protected override TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.NewTopDocs(Lucene.Net.Search.ScoreDoc[], System.Int32) | Improve this Doc View Source PopulateResults(ScoreDoc[], Int32) Declaration protected override void PopulateResults(ScoreDoc[] results, int howMany) Parameters Type Name Description ScoreDoc [] results System.Int32 howMany Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.PopulateResults(Lucene.Net.Search.ScoreDoc[], System.Int32) Implements ITopDocsCollector ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopFieldDocs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopFieldDocs.html",
    "title": "Class TopFieldDocs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopFieldDocs Represents hits returned by Search(Query, Filter, Int32, Sort) . Inheritance System.Object TopDocs TopFieldDocs Inherited Members TopDocs.TotalHits TopDocs.ScoreDocs TopDocs.MaxScore TopDocs.Merge(Sort, Int32, TopDocs[]) TopDocs.Merge(Sort, Int32, Int32, TopDocs[]) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TopFieldDocs : TopDocs Constructors | Improve this Doc View Source TopFieldDocs(Int32, ScoreDoc[], SortField[], Single) Creates one of these objects. Declaration public TopFieldDocs(int totalHits, ScoreDoc[] scoreDocs, SortField[] fields, float maxScore) Parameters Type Name Description System.Int32 totalHits Total number of hits for the query. ScoreDoc [] scoreDocs The top hits for the query. SortField [] fields The sort criteria used to find the top hits. System.Single maxScore The maximum score encountered. Properties | Improve this Doc View Source Fields The fields which were used to sort results by. Declaration public SortField[] Fields { get; set; } Property Value Type Description SortField []"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopScoreDocCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopScoreDocCollector.html",
    "title": "Class TopScoreDocCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopScoreDocCollector A ICollector implementation that collects the top-scoring hits, returning them as a TopDocs . this is used by IndexSearcher to implement TopDocs -based search. Hits are sorted by score descending and then (when the scores are tied) docID ascending. When you create an instance of this collector you should know in advance whether documents are going to be collected in doc Id order or not. NOTE : The values System.Single.NaN and System.Single.NegativeInfinity are not valid scores. This collector will not properly collect hits with such scores. Inheritance System.Object TopDocsCollector < ScoreDoc > TopScoreDocCollector Implements ITopDocsCollector ICollector Inherited Members TopDocsCollector<ScoreDoc>.EMPTY_TOPDOCS TopDocsCollector<ScoreDoc>.m_pq TopDocsCollector<ScoreDoc>.m_totalHits TopDocsCollector<ScoreDoc>.PopulateResults(ScoreDoc[], Int32) TopDocsCollector<ScoreDoc>.TotalHits TopDocsCollector<ScoreDoc>.TopDocsCount TopDocsCollector<ScoreDoc>.GetTopDocs() TopDocsCollector<ScoreDoc>.GetTopDocs(Int32) TopDocsCollector<ScoreDoc>.GetTopDocs(Int32, Int32) TopDocsCollector<ScoreDoc>.Collect(Int32) TopDocsCollector<ScoreDoc>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopScoreDocCollector : TopDocsCollector<ScoreDoc>, ITopDocsCollector, ICollector Methods | Improve this Doc View Source Create(Int32, ScoreDoc, Boolean) Creates a new TopScoreDocCollector given the number of hits to collect, the bottom of the previous page, and whether documents are scored in order by the input Scorer to SetScorer(Scorer) . NOTE : The instances returned by this method pre-allocate a full array of length numHits , and fill the array with sentinel objects. Declaration public static TopScoreDocCollector Create(int numHits, ScoreDoc after, bool docsScoredInOrder) Parameters Type Name Description System.Int32 numHits ScoreDoc after System.Boolean docsScoredInOrder Returns Type Description TopScoreDocCollector | Improve this Doc View Source Create(Int32, Boolean) Creates a new TopScoreDocCollector given the number of hits to collect and whether documents are scored in order by the input Scorer to SetScorer(Scorer) . NOTE : The instances returned by this method pre-allocate a full array of length numHits , and fill the array with sentinel objects. Declaration public static TopScoreDocCollector Create(int numHits, bool docsScoredInOrder) Parameters Type Name Description System.Int32 numHits System.Boolean docsScoredInOrder Returns Type Description TopScoreDocCollector | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Declaration protected override TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.NewTopDocs(Lucene.Net.Search.ScoreDoc[], System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.SetScorer(Lucene.Net.Search.Scorer) Implements ITopDocsCollector ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopTermsRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopTermsRewrite-1.html",
    "title": "Class TopTermsRewrite<Q> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TopTermsRewrite<Q> Base rewrite method for collecting only the top terms via a priority queue. This is a Lucene.NET INTERNAL API, use at your own risk Only public to be accessible by spans package. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite <Q> TopTermsRewrite<Q> MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite MultiTermQuery.TopTermsScoringBooleanQueryRewrite Inherited Members TermCollectingRewrite<Q>.GetTopLevelQuery() TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single) TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single, TermContext) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) 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.Search Assembly : Lucene.Net.dll Syntax public abstract class TopTermsRewrite<Q> : TermCollectingRewrite<Q>, ITopTermsRewrite where Q : Query Type Parameters Name Description Q Constructors | Improve this Doc View Source TopTermsRewrite(Int32) Create a TopTermsRewrite<Q> for at most count terms. NOTE: if MaxClauseCount is smaller than count , then it will be used instead. Declaration public TopTermsRewrite(int count) Parameters Type Name Description System.Int32 count Properties | Improve this Doc View Source Count Return the maximum priority queue size. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxSize Return the maximum size of the priority queue (for boolean rewrites this is MaxClauseCount ). Declaration protected abstract int MaxSize { get; } Property Value Type Description System.Int32 Methods | 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 Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TotalHitCountCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TotalHitCountCollector.html",
    "title": "Class TotalHitCountCollector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TotalHitCountCollector Just counts the total number of hits. Inheritance System.Object TotalHitCountCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TotalHitCountCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TotalHits Returns how many hits matched the search. Declaration public virtual int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.Weight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Weight.html",
    "title": "Class Weight | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Weight Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching does not modify a Query , so that a Query instance can be reused. IndexSearcher dependent state of the query should reside in the Weight . AtomicReader dependent state should reside in the Scorer . Since Weight creates Scorer instances for a given AtomicReaderContext ( GetScorer(AtomicReaderContext, IBits) ) callers must maintain the relationship between the searcher's top-level IndexReaderContext and the context used to create a Scorer . A Weight is used in the following way: A Weight is constructed by a top-level query, given a IndexSearcher ( CreateWeight(IndexSearcher) ). The GetValueForNormalization() method is called on the Weight to compute the query normalization factor QueryNorm(Single) of the query clauses contained in the query. The query normalization factor is passed to Normalize(Single, Single) . At this point the weighting is complete. A Scorer is constructed by GetScorer(AtomicReaderContext, IBits) . @since 2.9 Inheritance System.Object Weight BooleanQuery.BooleanWeight ConstantScoreQuery.ConstantWeight DisjunctionMaxQuery.DisjunctionMaxWeight SpanWeight Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Weight Properties | Improve this Doc View Source Query The query that this concerns. Declaration public abstract Query Query { get; } Property Value Type Description Query | Improve this Doc View Source ScoresDocsOutOfOrder Returns true if this implementation scores docs only out of order. This method is used in conjunction with ICollector 's AcceptsDocsOutOfOrder and GetBulkScorer(AtomicReaderContext, Boolean, IBits) to create a matching Scorer instance for a given ICollector , or vice versa. NOTE: the default implementation returns false , i.e. the Scorer scores documents in-order. Declaration public virtual bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) An explanation of the score computation for the named document. Declaration public abstract Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context The readers context to create the Explanation for. System.Int32 doc The document's id relative to the given context's reader Returns Type Description Explanation An Explanation for the score Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Optional method, to return a BulkScorer to score the query and send hits to a ICollector . Only queries that have a different top-level approach need to override this; the default implementation pulls a normal Scorer and iterates and collects the resulting hits. Declaration public virtual BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context The AtomicReaderContext for which to return the Scorer . System.Boolean scoreDocsInOrder Specifies whether in-order scoring of documents is required. Note that if set to false (i.e., out-of-order scoring is required), this method can return whatever scoring mode it supports, as every in-order scorer is also an out-of-order one. However, an out-of-order scorer may not support NextDoc() and/or Advance(Int32) , therefore it is recommended to request an in-order scorer if use of these methods is required. IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description BulkScorer A BulkScorer which scores documents and passes them to a collector. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Returns a Scorer which scores documents in/out-of order according to scoreDocsInOrder . NOTE: even if scoreDocsInOrder is false , it is recommended to check whether the returned Scorer indeed scores documents out of order (i.e., call ScoresDocsOutOfOrder ), as some Scorer implementations will always return documents in-order. NOTE: null can be returned if no documents will be scored by this query. Declaration public abstract Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context The AtomicReaderContext for which to return the Scorer . IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description Scorer A Scorer which scores documents in/out-of order. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetValueForNormalization() The value for normalization of contained query clauses (e.g. sum of squared weights). Declaration public abstract float GetValueForNormalization() Returns Type Description System.Single | Improve this Doc View Source Normalize(Single, Single) Assigns the query normalization factor and boost from parent queries to this. Declaration public abstract void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost"
  },
  "api/Lucene.Net/Lucene.Net.Search.WildcardQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.WildcardQuery.html",
    "title": "Class WildcardQuery | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WildcardQuery Implements the wildcard search query. Supported wildcards are , which matches any character sequence (including the empty one), and ? , which matches any single character. '&apos; is the escape character. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, a Wildcard term should not start with the wildcard This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Inheritance System.Object Query MultiTermQuery AutomatonQuery WildcardQuery Inherited Members AutomatonQuery.m_automaton AutomatonQuery.m_compiled AutomatonQuery.m_term AutomatonQuery.GetTermsEnum(Terms, AttributeSource) AutomatonQuery.GetHashCode() AutomatonQuery.Equals(Object) AutomatonQuery.Automaton MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class WildcardQuery : AutomatonQuery Constructors | Improve this Doc View Source WildcardQuery(Term) Constructs a query for terms matching term . Declaration public WildcardQuery(Term term) Parameters Type Name Description Term term Fields | Improve this Doc View Source WILDCARD_CHAR Char equality with support for wildcards Declaration public const char WILDCARD_CHAR = '?' Field Value Type Description System.Char | Improve this Doc View Source WILDCARD_ESCAPE Escape character Declaration public const char WILDCARD_ESCAPE = '\\\\' Field Value Type Description System.Char | Improve this Doc View Source WILDCARD_STRING String equality with support for wildcards Declaration public const char WILDCARD_STRING = '*' Field Value Type Description System.Char Properties | Improve this Doc View Source Term Returns the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source ToAutomaton(Term) Convert Lucene wildcard syntax into an automaton. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static Automaton ToAutomaton(Term wildcardquery) Parameters Type Name Description Term wildcardquery Returns Type Description Automaton | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides AutomatonQuery.ToString(String) See Also AutomatonQuery"
  },
  "api/Lucene.Net/Lucene.Net.Store.BaseDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BaseDirectory.html",
    "title": "Class BaseDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BaseDirectory Base implementation for a concrete Directory . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory CompoundFileDirectory FileSwitchDirectory FSDirectory RAMDirectory Implements System.IDisposable Inherited Members Directory.ListAll() Directory.FileExists(String) Directory.DeleteFile(String) Directory.FileLength(String) Directory.CreateOutput(String, IOContext) Directory.Sync(ICollection<String>) Directory.OpenInput(String, IOContext) Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Dispose(Boolean) Directory.GetLockID() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public abstract class BaseDirectory : Directory, IDisposable Constructors | Improve this Doc View Source BaseDirectory() Sole constructor. Declaration protected BaseDirectory() Fields | Improve this Doc View Source m_lockFactory Holds the LockFactory instance (implements locking for this Directory instance). Declaration protected LockFactory m_lockFactory Field Value Type Description LockFactory Properties | Improve this Doc View Source IsOpen Declaration protected virtual bool IsOpen { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source EnsureOpen() Declaration protected override sealed void EnsureOpen() Overrides Directory.EnsureOpen() | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedChecksumIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedChecksumIndexInput.html",
    "title": "Class BufferedChecksumIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BufferedChecksumIndexInput Simple implementation of ChecksumIndexInput that wraps another input and delegates calls. Inheritance System.Object DataInput IndexInput ChecksumIndexInput BufferedChecksumIndexInput Implements System.IDisposable Inherited Members ChecksumIndexInput.Seek(Int64) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public class BufferedChecksumIndexInput : ChecksumIndexInput, IDisposable Constructors | Improve this Doc View Source BufferedChecksumIndexInput(IndexInput) Creates a new BufferedChecksumIndexInput Declaration public BufferedChecksumIndexInput(IndexInput main) Parameters Type Name Description IndexInput main Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides ChecksumIndexInput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedIndexInput.html",
    "title": "Class BufferedIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BufferedIndexInput Base implementation class for buffered IndexInput . Inheritance System.Object DataInput IndexInput BufferedIndexInput NIOFSDirectory.NIOFSIndexInput SimpleFSDirectory.SimpleFSIndexInput Implements System.IDisposable Inherited Members IndexInput.Dispose() IndexInput.Dispose(Boolean) IndexInput.Length IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public abstract class BufferedIndexInput : IndexInput, IDisposable Constructors | Improve this Doc View Source BufferedIndexInput(String) Declaration public BufferedIndexInput(string resourceDesc) Parameters Type Name Description System.String resourceDesc | Improve this Doc View Source BufferedIndexInput(String, IOContext) Declaration public BufferedIndexInput(string resourceDesc, IOContext context) Parameters Type Name Description System.String resourceDesc IOContext context | Improve this Doc View Source BufferedIndexInput(String, Int32) Inits BufferedIndexInput with a specific bufferSize Declaration public BufferedIndexInput(string resourceDesc, int bufferSize) Parameters Type Name Description System.String resourceDesc System.Int32 bufferSize Fields | Improve this Doc View Source BUFFER_SIZE Default buffer size set to BUFFER_SIZE . Declaration public const int BUFFER_SIZE = 1024 Field Value Type Description System.Int32 | Improve this Doc View Source m_buffer Declaration protected byte[] m_buffer Field Value Type Description System.Byte [] | Improve this Doc View Source MERGE_BUFFER_SIZE A buffer size for merges set to MERGE_BUFFER_SIZE . Declaration public const int MERGE_BUFFER_SIZE = 4096 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BufferSize Returns buffer size. Declaration public int BufferSize { get; } Property Value Type Description System.Int32 See Also SetBufferSize(Int32) Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source FlushBuffer(IndexOutput, Int64) Flushes the in-memory buffer to the given output, copying at most numBytes . NOTE: this method does not refill the buffer, however it does advance the buffer position. Declaration protected int FlushBuffer(IndexOutput out, long numBytes) Parameters Type Name Description IndexOutput out System.Int64 numBytes Returns Type Description System.Int32 the number of bytes actually flushed from the in-memory buffer. | Improve this Doc View Source GetBufferSize(IOContext) Returns default buffer sizes for the given IOContext Declaration public static int GetBufferSize(IOContext context) Parameters Type Name Description IOContext context Returns Type Description System.Int32 | Improve this Doc View Source GetFilePointer() Declaration public override sealed long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source NewBuffer(Byte[]) Declaration protected virtual void NewBuffer(byte[] newBuffer) Parameters Type Name Description System.Byte [] newBuffer | Improve this Doc View Source ReadByte() Declaration public override sealed byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len System.Boolean useBuffer Overrides DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override sealed short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override sealed int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override sealed long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Expert: implements buffer refill. Reads bytes from the current position in the input. Declaration protected abstract void ReadInternal(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 length the number of bytes to read | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override sealed int ReadVInt32() Returns Type Description System.Int32 Overrides DataInput.ReadVInt32() | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override sealed long ReadVInt64() Returns Type Description System.Int64 Overrides DataInput.ReadVInt64() | Improve this Doc View Source Seek(Int64) Declaration public override sealed void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) | Improve this Doc View Source SeekInternal(Int64) Expert: implements seek. Sets current position in this file, where the next ReadInternal(Byte[], Int32, Int32) will occur. Declaration protected abstract void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos See Also ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SetBufferSize(Int32) Change the buffer size used by this IndexInput Declaration public void SetBufferSize(int newSize) Parameters Type Name Description System.Int32 newSize Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedIndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedIndexOutput.html",
    "title": "Class BufferedIndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BufferedIndexOutput Base implementation class for buffered IndexOutput . Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput FSDirectory.FSIndexOutput Implements System.IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Store Assembly : Lucene.Net.dll Syntax public abstract class BufferedIndexOutput : IndexOutput, IDisposable Constructors | Improve this Doc View Source BufferedIndexOutput() Creates a new BufferedIndexOutput with the default buffer size ( DEFAULT_BUFFER_SIZE bytes see DEFAULT_BUFFER_SIZE ) Declaration public BufferedIndexOutput() | Improve this Doc View Source BufferedIndexOutput(Int32) Creates a new BufferedIndexOutput with the given buffer size. Declaration public BufferedIndexOutput(int bufferSize) Parameters Type Name Description System.Int32 bufferSize the buffer size in bytes used to buffer writes internally. Exceptions Type Condition System.ArgumentException if the given buffer size is less or equal to 0 Fields | Improve this Doc View Source DEFAULT_BUFFER_SIZE The default buffer size in bytes ( DEFAULT_BUFFER_SIZE ). Declaration public const int DEFAULT_BUFFER_SIZE = 16384 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BufferSize Returns size of the used output buffer in bytes. Declaration public int BufferSize { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public abstract override long Length { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source FlushBuffer(Byte[], Int32, Int32) Expert: implements buffer write. Writes bytes at the current position in the output. Declaration protected abstract void FlushBuffer(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 offset the offset in the byte array System.Int32 len the number of bytes to write | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source Seek(Int64) Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataInput.html",
    "title": "Class ByteArrayDataInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteArrayDataInput DataInput backed by a byte array. WARNING: this class omits all low-level checks. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DataInput ByteArrayDataInput Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() 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.Store Assembly : Lucene.Net.dll Syntax public sealed class ByteArrayDataInput : DataInput Constructors | Improve this Doc View Source ByteArrayDataInput() Declaration public ByteArrayDataInput() | Improve this Doc View Source ByteArrayDataInput(Byte[]) Declaration public ByteArrayDataInput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source ByteArrayDataInput(Byte[], Int32, Int32) Declaration public ByteArrayDataInput(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Properties | Improve this Doc View Source Eof Declaration public bool Eof { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Declaration public int Position { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadInt16() LUCENENET NOTE: Important - always cast to ushort (System.UInt16) before using to ensure the value is positive! NOTE: this was readShort() in Lucene Declaration public override short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override int ReadVInt32() Returns Type Description System.Int32 Overrides DataInput.ReadVInt32() | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override long ReadVInt64() Returns Type Description System.Int64 Overrides DataInput.ReadVInt64() | Improve this Doc View Source Reset(Byte[]) Declaration public void Reset(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public void Reset(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len | Improve this Doc View Source Rewind() NOTE: sets pos to 0, which is not right if you had called reset w/ non-zero offset!! Declaration public void Rewind() | Improve this Doc View Source SkipBytes(Int64) Declaration public override void SkipBytes(long count) Parameters Type Name Description System.Int64 count Overrides DataInput.SkipBytes(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataOutput.html",
    "title": "Class ByteArrayDataOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteArrayDataOutput DataOutput backed by a byte array. WARNING: this class omits most low-level checks, so be sure to test heavily with assertions enabled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DataOutput ByteArrayDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Store Assembly : Lucene.Net.dll Syntax public class ByteArrayDataOutput : DataOutput Constructors | Improve this Doc View Source ByteArrayDataOutput() Declaration public ByteArrayDataOutput() | Improve this Doc View Source ByteArrayDataOutput(Byte[]) Declaration public ByteArrayDataOutput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source ByteArrayDataOutput(Byte[], Int32, Int32) Declaration public ByteArrayDataOutput(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Properties | Improve this Doc View Source Position Declaration public virtual int Position { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Reset(Byte[]) Declaration public virtual void Reset(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public virtual void Reset(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteBufferIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteBufferIndexInput.html",
    "title": "Class ByteBufferIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteBufferIndexInput Base IndexInput implementation that uses an array of J2N.IO.ByteBuffer s to represent a file. Because Java's J2N.IO.ByteBuffer uses an System.Int32 to address the values, it's necessary to access a file greater System.Int32.MaxValue in size using multiple byte buffers. For efficiency, this class requires that the buffers are a power-of-two ( chunkSizePower ). Inheritance System.Object DataInput IndexInput ByteBufferIndexInput MMapDirectory.MMapIndexInput Implements System.IDisposable Inherited Members IndexInput.Dispose() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadVInt32() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public abstract class ByteBufferIndexInput : IndexInput, IDisposable Properties | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override sealed object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source FreeBuffer(ByteBuffer) Called when the contents of a buffer will be no longer needed. Declaration protected abstract void FreeBuffer(ByteBuffer b) Parameters Type Name Description J2N.IO.ByteBuffer b | Improve this Doc View Source GetFilePointer() Declaration public override sealed long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override sealed byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override sealed short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override sealed int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override sealed long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source Seek(Int64) Declaration public override sealed void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) | Improve this Doc View Source Slice(String, Int64, Int64) Creates a slice of this index input, with the given description, offset, and length. The slice is seeked to the beginning. Declaration public ByteBufferIndexInput Slice(string sliceDescription, long offset, long length) Parameters Type Name Description System.String sliceDescription System.Int64 offset System.Int64 length Returns Type Description ByteBufferIndexInput | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides IndexInput.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.ChecksumIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ChecksumIndexInput.html",
    "title": "Class ChecksumIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ChecksumIndexInput Extension of IndexInput , computing checksum as it goes. Callers can retrieve the checksum via Checksum . Inheritance System.Object DataInput IndexInput ChecksumIndexInput BufferedChecksumIndexInput Implements System.IDisposable Inherited Members IndexInput.Dispose() IndexInput.Dispose(Boolean) IndexInput.GetFilePointer() IndexInput.Length IndexInput.ToString() IndexInput.Clone() DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public abstract class ChecksumIndexInput : IndexInput, IDisposable Constructors | Improve this Doc View Source ChecksumIndexInput(String) resourceDescription should be a non-null, opaque string describing this resource; it's returned from System.Object.ToString() . Declaration protected ChecksumIndexInput(string resourceDescription) Parameters Type Name Description System.String resourceDescription Properties | Improve this Doc View Source Checksum Returns the current checksum value Declaration public abstract long Checksum { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next read will occur. ChecksumIndexInput can only seek forward and seeks are expensive since they imply to read bytes in-between the current position and the target position in order to update the checksum. Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.FileEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.FileEntry.html",
    "title": "Class CompoundFileDirectory.FileEntry | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompoundFileDirectory.FileEntry Offset/Length for a slice inside of a compound file Inheritance System.Object CompoundFileDirectory.FileEntry 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.Store Assembly : Lucene.Net.dll Syntax public sealed class FileEntry"
  },
  "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.html",
    "title": "Class CompoundFileDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompoundFileDirectory Class for accessing a compound stream. This class implements a directory, but is limited to only read operations. Directory methods that would normally modify data throw an exception. All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats used by the Codec . When using the Compound File format these files are collapsed into a single .cfs file (except for the LiveDocsFormat , with a corresponding .cfe file indexing its sub-files. Files: .cfs : An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. .cfe : The \"virtual\" compound file's entry table holding all entries in the corresponding .cfs file. Description: Compound (.cfs) --> Header, FileData FileCount Compound Entry Table (.cfe) --> Header, FileCount, <FileName, DataOffset, DataLength> FileCount , Footer Header --> WriteHeader(DataOutput, String, Int32) FileCount --> WriteVInt32(Int32) DataOffset,DataLength --> WriteInt64(Int64) FileName --> WriteString(String) FileData --> raw file data Footer --> WriteFooter(IndexOutput) Notes: FileCount indicates how many files are contained in this compound file. The entry table that follows has that many entries. Each directory entry contains a long pointer to the start of this file's data section, the files length, and a System.String with that file's name. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory CompoundFileDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.GetLockID() Directory.Copy(Directory, String, String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public sealed class CompoundFileDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source CompoundFileDirectory(Directory, String, IOContext, Boolean) Create a new CompoundFileDirectory . Declaration public CompoundFileDirectory(Directory directory, string fileName, IOContext context, bool openForWrite) Parameters Type Name Description Directory directory System.String fileName IOContext context System.Boolean openForWrite Properties | Improve this Doc View Source Directory Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source Name Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Not implemented Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) Exceptions Type Condition System.NotSupportedException always: not supported by CFS | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length of a file in the directory. Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) Exceptions Type Condition System.IO.IOException if the file does not exist | Improve this Doc View Source ListAll() Returns an array of strings, one for each file in the directory. Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source MakeLock(String) Not implemented Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides BaseDirectory.MakeLock(String) Exceptions Type Condition System.NotSupportedException always: not supported by CFS | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source RenameFile(String, String) Not implemented Declaration public void RenameFile(string from, string to) Parameters Type Name Description System.String from System.String to Exceptions Type Condition System.NotSupportedException always: not supported by CFS | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.DataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.DataInput.html",
    "title": "Class DataInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DataInput Abstract base class for performing read operations of Lucene's low-level data types. DataInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every DataInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new DataInput which operates on the same underlying resource, but positioned independently. Inheritance System.Object DataInput ByteSliceReader ByteArrayDataInput IndexInput InputStreamDataInput FST.BytesReader PagedBytes.PagedBytesDataInput 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.Store Assembly : Lucene.Net.dll Syntax public abstract class DataInput Methods | Improve this Doc View Source Clone() Returns a clone of this stream. Clones of a stream access the same data, and are positioned at the same point as the stream they were cloned from. Expert: Subclasses must ensure that clones may be positioned at different points in the input from each other and from the stream they were cloned from. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source ReadByte() Reads and returns a single byte. Declaration public abstract byte ReadByte() Returns Type Description System.Byte See Also WriteByte ( System.Byte ) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Reads a specified number of bytes into an array at the specified offset. Declaration public abstract void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 len the number of bytes to read See Also WriteBytes ( System.Byte [], System.Int32 ) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Reads a specified number of bytes into an array at the specified offset with control over whether the read should be buffered (callers who have their own buffer should pass in \"false\" for useBuffer ). Currently only BufferedIndexInput respects this parameter. Declaration public virtual void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 len the number of bytes to read System.Boolean useBuffer set to false if the caller will handle buffering. See Also WriteBytes ( System.Byte [], System.Int32 ) | Improve this Doc View Source ReadInt16() Reads two bytes and returns a System.Int16 . LUCENENET NOTE: Important - always cast to ushort (System.UInt16) before using to ensure the value is positive! NOTE: this was readShort() in Lucene Declaration public virtual short ReadInt16() Returns Type Description System.Int16 See Also WriteInt16 ( System.Int16 ) | Improve this Doc View Source ReadInt32() Reads four bytes and returns an System.Int32 . NOTE: this was readInt() in Lucene Declaration public virtual int ReadInt32() Returns Type Description System.Int32 See Also WriteInt32 ( System.Int32 ) | Improve this Doc View Source ReadInt64() Reads eight bytes and returns a System.Int64 . NOTE: this was readLong() in Lucene Declaration public virtual long ReadInt64() Returns Type Description System.Int64 See Also WriteInt64 ( System.Int64 ) | Improve this Doc View Source ReadString() Reads a System.String . Declaration public virtual string ReadString() Returns Type Description System.String See Also WriteString ( System.String ) | Improve this Doc View Source ReadStringSet() Reads a ISet<string> previously written with WriteStringSet(ISet<String>) . Declaration public virtual ISet<string> ReadStringSet() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source ReadStringStringMap() Reads a IDictionary<string,string> previously written with WriteStringStringMap(IDictionary<String, String>) . Declaration public virtual IDictionary<string, string> ReadStringStringMap() Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source ReadVInt32() Reads an System.Int32 stored in variable-length format. Reads between one and five bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was readVInt() in Lucene Declaration public virtual int ReadVInt32() Returns Type Description System.Int32 See Also WriteVInt32 ( System.Int32 ) | Improve this Doc View Source ReadVInt64() Reads a System.Int64 stored in variable-length format. Reads between one and nine bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was readVLong() in Lucene Declaration public virtual long ReadVInt64() Returns Type Description System.Int64 See Also WriteVInt64 ( System.Int64 ) | Improve this Doc View Source SkipBytes(Int64) Skip over numBytes bytes. The contract on this method is that it should have the same behavior as reading the same number of bytes into a buffer and discarding its content. Negative values of numBytes are not supported. Declaration public virtual void SkipBytes(long numBytes) Parameters Type Name Description System.Int64 numBytes"
  },
  "api/Lucene.Net/Lucene.Net.Store.DataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.DataOutput.html",
    "title": "Class DataOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DataOutput Abstract base class for performing write operations of Lucene's low-level data types. DataOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Inheritance System.Object DataOutput ByteArrayDataOutput IndexOutput OutputStreamDataOutput GrowableByteArrayDataOutput PagedBytes.PagedBytesDataOutput 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.Store Assembly : Lucene.Net.dll Syntax public abstract class DataOutput Methods | Improve this Doc View Source CopyBytes(DataInput, Int64) Copy numBytes bytes from input to ourself. Declaration public virtual void CopyBytes(DataInput input, long numBytes) Parameters Type Name Description DataInput input System.Int64 numBytes | Improve this Doc View Source WriteByte(Byte) Writes a single byte. The most primitive data type is an eight-bit byte. Files are accessed as sequences of bytes. All other data types are defined as sequences of bytes, so file formats are byte-order independent. Declaration public abstract void WriteByte(byte b) Parameters Type Name Description System.Byte b See Also ReadByte () | Improve this Doc View Source WriteBytes(Byte[], Int32) Writes an array of bytes. Declaration public virtual void WriteBytes(byte[] b, int length) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 length the number of bytes to write See Also ReadBytes ( System.Byte [], System.Int32 , System.Int32 ) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Writes an array of bytes. Declaration public abstract void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 offset the offset in the byte array System.Int32 length the number of bytes to write See Also ReadBytes ( System.Byte [], System.Int32 , System.Int32 ) | Improve this Doc View Source WriteInt16(Int16) Writes a short as two bytes. NOTE: this was writeShort() in Lucene Declaration public virtual void WriteInt16(short i) Parameters Type Name Description System.Int16 i See Also ReadInt16 () | Improve this Doc View Source WriteInt32(Int32) Writes an System.Int32 as four bytes. 32-bit unsigned integer written as four bytes, high-order bytes first. NOTE: this was writeInt() in Lucene Declaration public virtual void WriteInt32(int i) Parameters Type Name Description System.Int32 i See Also ReadInt32 () | Improve this Doc View Source WriteInt64(Int64) Writes a System.Int64 as eight bytes. 64-bit unsigned integer written as eight bytes, high-order bytes first. NOTE: this was writeLong() in Lucene Declaration public virtual void WriteInt64(long i) Parameters Type Name Description System.Int64 i See Also ReadInt64 () | Improve this Doc View Source WriteString(String) Writes a string. Writes strings as UTF-8 encoded bytes. First the length, in bytes, is written as a WriteVInt32(Int32) , followed by the bytes. Declaration public virtual void WriteString(string s) Parameters Type Name Description System.String s See Also ReadString () | Improve this Doc View Source WriteStringSet(ISet<String>) Writes a System.String set. First the size is written as an WriteInt32(Int32) , followed by each value written as a WriteString(String) . Declaration public virtual void WriteStringSet(ISet<string> set) Parameters Type Name Description System.Collections.Generic.ISet < System.String > set Input ISet{string} . May be null (equivalent to an empty set) | Improve this Doc View Source WriteStringStringMap(IDictionary<String, String>) Writes a . First the size is written as an WriteInt32(Int32) , followed by each key-value pair written as two consecutive WriteString(String) s. Declaration public virtual void WriteStringStringMap(IDictionary<string, string> map) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > map Input . May be null (equivalent to an empty dictionary) | Improve this Doc View Source WriteVInt32(Int32) Writes an System.Int32 in a variable-length format. Writes between one and five bytes. Smaller values take fewer bytes. Negative numbers are supported, but should be avoided. VByte is a variable-length format for positive integers is defined where the high-order bit of each byte indicates whether more bytes remain to be read. The low-order seven bits are appended as increasingly more significant bits in the resulting integer value. Thus values from zero to 127 may be stored in a single byte, values from 128 to 16,383 may be stored in two bytes, and so on. VByte Encoding Example ValueByte 1Byte 2Byte 3 000000000 100000001 200000010 ... 12701111111 1281000000000000001 1291000000100000001 1301000001000000001 ... 16,3831111111101111111 16,384100000001000000000000001 16,385100000011000000000000001 ... this provides compression while still being efficient to decode. NOTE: this was writeVInt() in Lucene Declaration public void WriteVInt32(int i) Parameters Type Name Description System.Int32 i Smaller values take fewer bytes. Negative numbers are supported, but should be avoided. Exceptions Type Condition System.IO.IOException If there is an I/O error writing to the underlying medium. See Also ReadVInt32 () | Improve this Doc View Source WriteVInt64(Int64) Writes an System.Int64 in a variable-length format. Writes between one and nine bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was writeVLong() in Lucene Declaration public void WriteVInt64(long i) Parameters Type Name Description System.Int64 i See Also ReadVInt64 ()"
  },
  "api/Lucene.Net/Lucene.Net.Store.Directory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Directory.html",
    "title": "Class Directory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Directory A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing. .NET's i/o APIs not used directly, but rather all i/o is through this API. This permits things such as: implementation of RAM-based indices; implementation indices stored in a database; implementation of an index as a single file; Directory locking is implemented by an instance of LockFactory , and can be changed for each Directory instance using SetLockFactory(LockFactory) . Inheritance System.Object Directory BaseDirectory FilterDirectory NRTCachingDirectory 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) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class Directory : IDisposable Properties | Improve this Doc View Source LockFactory Get the LockFactory that this Directory instance is using for its locking implementation. Note that this may be null for Directory implementations that provide their own locking implementation. Declaration public abstract LockFactory LockFactory { get; } Property Value Type Description LockFactory Methods | Improve this Doc View Source ClearLock(String) Attempt to clear (forcefully unlock and remove) the specified lock. Only call this at a time when you are certain this lock is no longer in use. Declaration public abstract void ClearLock(string name) Parameters Type Name Description System.String name name of the lock to be cleared. | Improve this Doc View Source Copy(Directory, String, String, IOContext) Copies the file src to Directory to under the new file name dest . If you want to copy the entire source directory to the destination one, you can do so like this: Directory to; // the directory to copy to foreach (string file in dir.ListAll()) { dir.Copy(to, file, newFile, IOContext.DEFAULT); // newFile can be either file, or a new name } NOTE: this method does not check whether dest exist and will overwrite it if it does. Declaration public virtual void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context | Improve this Doc View Source CreateOutput(String, IOContext) Creates a new, empty file in the directory with the given name. Returns a stream writing this file. Declaration public abstract IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput | Improve this Doc View Source CreateSlicer(String, IOContext) Creates an Directory.IndexInputSlicer for the given file name. Directory.IndexInputSlicer allows other Directory implementations to efficiently open one or more sliced IndexInput instances from a single file handle. The underlying file handle is kept open until the Directory.IndexInputSlicer is closed. Throws System.IO.FileNotFoundException if the file does not exist. This is a Lucene.NET INTERNAL API, use at your own risk This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public abstract void DeleteFile(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Dispose() Disposes the store. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes the store. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Declaration protected virtual void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException if this Directory is closed | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration [Obsolete(\"this method will be removed in 5.0\")] public abstract bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean | Improve this Doc View Source FileLength(String) Returns the length of a file in the directory. this method follows the following contract: Declaration public abstract long FileLength(string name) Parameters Type Name Description System.String name the name of the file for which to return the length. Returns Type Description System.Int64 Exceptions Type Condition System.IO.IOException if there was an IO error while retrieving the file's length. | Improve this Doc View Source GetLockID() Return a string identifier that uniquely differentiates this Directory instance from other Directory instances. This ID should be the same if two Directory instances (even in different AppDomains and/or on different machines) are considered \"the same index\". This is how locking \"scopes\" to the right index. Declaration public virtual string GetLockID() Returns Type Description System.String | Improve this Doc View Source ListAll() Returns an array of strings, one for each file in the directory. Declaration public abstract string[] ListAll() Returns Type Description System.String [] Exceptions Type Condition System.IO.DirectoryNotFoundException if the directory is not prepared for any write operations (such as CreateOutput(String, IOContext) ). System.IO.IOException in case of other IO errors | Improve this Doc View Source MakeLock(String) Construct a Lock . Declaration public abstract Lock MakeLock(string name) Parameters Type Name Description System.String name the name of the lock file Returns Type Description Lock | Improve this Doc View Source OpenChecksumInput(String, IOContext) Returns a stream reading an existing file, computing checksum as it reads Declaration public virtual ChecksumIndexInput OpenChecksumInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description ChecksumIndexInput | Improve this Doc View Source OpenInput(String, IOContext) Returns a stream reading an existing file, with the specified read buffer size. The particular Directory implementation may ignore the buffer size. Currently the only Directory implementations that respect this parameter are FSDirectory and CompoundFileDirectory . Throws System.IO.FileNotFoundException if the file does not exist. Declaration public abstract IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput | Improve this Doc View Source SetLockFactory(LockFactory) Set the LockFactory that this Directory instance should use for its locking implementation. Each * instance of LockFactory should only be used for one directory (ie, do not share a single instance across multiple Directories). Declaration public abstract void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory instance of LockFactory . | Improve this Doc View Source Sync(ICollection<String>) Ensure that any writes to these files are moved to stable storage. Lucene uses this to properly commit changes to the index, to prevent a machine/OS crash from corrupting the index. NOTE: Clients may call this method for same files over and over again, so some impls might optimize for that. For other impls the operation can be a noop, for various reasons. Declaration public abstract void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.Directory.IndexInputSlicer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Directory.IndexInputSlicer.html",
    "title": "Class Directory.IndexInputSlicer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Directory.IndexInputSlicer Allows to create one or more sliced IndexInput instances from a single file handle. Some Directory implementations may be able to efficiently map slices of a file into memory when only certain parts of a file are required. This is a Lucene.NET INTERNAL API, use at your own risk This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory.IndexInputSlicer 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.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexInputSlicer : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source OpenFullSlice() Returns an IndexInput slice starting at offset 0 with a length equal to the length of the underlying file Declaration [Obsolete(\"Only for reading CFS files from 3.x indexes.\")] public abstract IndexInput OpenFullSlice() Returns Type Description IndexInput | Improve this Doc View Source OpenSlice(String, Int64, Int64) Returns an IndexInput slice starting at the given offset with the given length. Declaration public abstract IndexInput OpenSlice(string sliceDescription, long offset, long length) Parameters Type Name Description System.String sliceDescription System.Int64 offset System.Int64 length Returns Type Description IndexInput Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.FileSwitchDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FileSwitchDirectory.html",
    "title": "Class FileSwitchDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FileSwitchDirectory Expert: A Directory instance that switches files between two other Directory instances. Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided ISet{string} must not change once passed to this class, and must allow multiple threads to call contains at once. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory FileSwitchDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.GetLockID() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public class FileSwitchDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source FileSwitchDirectory(ISet<String>, Directory, Directory, Boolean) Declaration public FileSwitchDirectory(ISet<string> primaryExtensions, Directory primaryDir, Directory secondaryDir, bool doClose) Parameters Type Name Description System.Collections.Generic.ISet < System.String > primaryExtensions Directory primaryDir Directory secondaryDir System.Boolean doClose Properties | Improve this Doc View Source PrimaryDir Return the primary directory Declaration public virtual Directory PrimaryDir { get; } Property Value Type Description Directory | Improve this Doc View Source SecondaryDir Return the secondary directory Declaration public virtual Directory SecondaryDir { get; } Property Value Type Description Directory Methods | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetExtension(String) Utility method to return a file's extension. Declaration public static string GetExtension(string name) Parameters Type Name Description System.String name Returns Type Description System.String | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.FilterDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FilterDirectory.html",
    "title": "Class FilterDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterDirectory Directory implementation that delegates calls to another directory. This class can be used to add limitations on top of an existing Directory implementation such as rate limiting ( RateLimitedDirectoryWrapper ) or to add additional sanity checks for tests. However, if you plan to write your own Directory implementation, you should consider extending directly Directory or BaseDirectory rather than try to reuse functionality of existing Directory s by extending this class. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Directory FilterDirectory RateLimitedDirectoryWrapper TrackingDirectoryWrapper Implements System.IDisposable Inherited Members Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) Directory.EnsureOpen() 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.Store Assembly : Lucene.Net.dll Syntax public class FilterDirectory : Directory, IDisposable Constructors | Improve this Doc View Source FilterDirectory(Directory) Sole constructor, typically called from sub-classes. Declaration protected FilterDirectory(Directory in) Parameters Type Name Description Directory in Fields | Improve this Doc View Source m_input Declaration protected readonly Directory m_input Field Value Type Description Directory Properties | Improve this Doc View Source Delegate Return the wrapped Directory . Declaration public Directory Delegate { get; } Property Value Type Description Directory | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.FlushInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FlushInfo.html",
    "title": "Class FlushInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FlushInfo A FlushInfo provides information required for a FLUSH context. It is used as part of an IOContext in case of FLUSH context. Inheritance System.Object FlushInfo 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.Store Assembly : Lucene.Net.dll Syntax public class FlushInfo Constructors | Improve this Doc View Source FlushInfo(Int32, Int64) Creates a new FlushInfo instance from the values required for a FLUSH IOContext context. These values are only estimates and are not the actual values. Declaration public FlushInfo(int numDocs, long estimatedSegmentSize) Parameters Type Name Description System.Int32 numDocs System.Int64 estimatedSegmentSize Properties | Improve this Doc View Source EstimatedSegmentSize Declaration public long EstimatedSegmentSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NumDocs Declaration public int NumDocs { get; } Property Value Type Description System.Int32 Methods | 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 ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSDirectory.FSIndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSDirectory.FSIndexOutput.html",
    "title": "Class FSDirectory.FSIndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSDirectory.FSIndexOutput Writes output with System.IO.FileStream.Write(System.Byte[],System.Int32,System.Int32) Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput FSDirectory.FSIndexOutput Implements System.IDisposable Inherited Members BufferedIndexOutput.DEFAULT_BUFFER_SIZE BufferedIndexOutput.BufferSize IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Store Assembly : Lucene.Net.dll Syntax protected class FSIndexOutput : BufferedIndexOutput, IDisposable Constructors | Improve this Doc View Source FSIndexOutput(FSDirectory, String) Declaration public FSIndexOutput(FSDirectory parent, string name) Parameters Type Name Description FSDirectory parent System.String name Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides BufferedIndexOutput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides BufferedIndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides BufferedIndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides BufferedIndexOutput.Flush() | Improve this Doc View Source FlushBuffer(Byte[], Int32, Int32) Declaration protected override void FlushBuffer(byte[] b, int offset, int size) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 size Overrides BufferedIndexOutput.FlushBuffer(Byte[], Int32, Int32) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides BufferedIndexOutput.GetFilePointer() | Improve this Doc View Source Seek(Int64) Random-access methods Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides BufferedIndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides BufferedIndexOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides BufferedIndexOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSDirectory.html",
    "title": "Class FSDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSDirectory Base class for Directory implementations that store index files in the file system. There are currently three core subclasses: SimpleFSDirectory is a straightforward implementation using System.IO.FileStream . However, it has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. NIOFSDirectory uses java.nio's FileChannel's positional io when reading to avoid synchronization when reading from the same file. Unfortunately, due to a Windows-only Sun JRE bug this is a poor choice for Windows, but on all other platforms this is the preferred choice. Applications using System.Threading.Thread.Interrupt or System.Threading.Tasks.Task<TResult> should use SimpleFSDirectory instead. See NIOFSDirectory java doc for details. MMapDirectory uses memory-mapped IO when reading. This is a good choice if you have plenty of virtual memory relative to your index size, eg if you are running on a 64 bit runtime, or you are running on a 32 bit runtime but your index sizes are small enough to fit into the virtual memory space. Applications using System.Threading.Thread.Interrupt or System.Threading.Tasks.Task should use SimpleFSDirectory instead. See MMapDirectory doc for details. Unfortunately, because of system peculiarities, there is no single overall best implementation. Therefore, we've added the Open(String) method (or one of its overloads), to allow Lucene to choose the best FSDirectory implementation given your environment, and the known limitations of each implementation. For users who have no reason to prefer a specific implementation, it's best to simply use Open(String) (or one of its overloads). For all others, you should instantiate the desired implementation directly. The locking implementation is by default NativeFSLockFactory , but can be changed by passing in a custom LockFactory instance. Inheritance System.Object Directory BaseDirectory FSDirectory MMapDirectory NIOFSDirectory SimpleFSDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenInput(String, IOContext) Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public abstract class FSDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source FSDirectory(DirectoryInfo) Declaration protected FSDirectory(DirectoryInfo dir) Parameters Type Name Description System.IO.DirectoryInfo dir | Improve this Doc View Source FSDirectory(DirectoryInfo, LockFactory) Create a new FSDirectory for the named location (ctor for subclasses). Declaration protected FSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Fields | Improve this Doc View Source DEFAULT_READ_CHUNK_SIZE Default read chunk size: 8192 bytes (this is the size up to which the runtime does not allocate additional arrays while reading/writing) Declaration [Obsolete(\"this constant is no longer used since Lucene 4.5.\")] public const int DEFAULT_READ_CHUNK_SIZE = 8192 Field Value Type Description System.Int32 | Improve this Doc View Source m_directory Declaration protected readonly DirectoryInfo m_directory Field Value Type Description System.IO.DirectoryInfo Properties | Improve this Doc View Source Directory the underlying filesystem directory Declaration public virtual DirectoryInfo Directory { get; } Property Value Type Description System.IO.DirectoryInfo | Improve this Doc View Source ReadChunkSize this setting has no effect anymore. Declaration [Obsolete(\"this is no longer used since Lucene 4.5.\")] public int ReadChunkSize { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateOutput(String, IOContext) Creates an IndexOutput for the file with the given name. Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Closes the store to future operations. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source EnsureCanWrite(String) Declaration protected virtual void EnsureCanWrite(string name) Parameters Type Name Description System.String name | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length in bytes of a file in the directory. Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source ListAll() Lists all files (not subdirectories) in the directory. Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() See Also ListAll(DirectoryInfo) | Improve this Doc View Source ListAll(DirectoryInfo) Lists all files (not subdirectories) in the directory. This method never returns null (throws System.IO.IOException instead). Declaration public static string[] ListAll(DirectoryInfo dir) Parameters Type Name Description System.IO.DirectoryInfo dir Returns Type Description System.String [] Exceptions Type Condition System.IO.DirectoryNotFoundException if the directory does not exist, or does exist but is not a directory or is invalid (for example, it is on an unmapped drive). System.Security.SecurityException The caller does not have the required permission. | Improve this Doc View Source OnIndexOutputClosed(FSDirectory.FSIndexOutput) Declaration protected virtual void OnIndexOutputClosed(FSDirectory.FSIndexOutput io) Parameters Type Name Description FSDirectory.FSIndexOutput io | Improve this Doc View Source Open(DirectoryInfo) Creates an FSDirectory instance, trying to pick the best implementation given the current environment. The directory returned uses the NativeFSLockFactory . Currently this returns MMapDirectory for most Solaris and Windows 64-bit runtimes, NIOFSDirectory for other non-Windows runtimes, and SimpleFSDirectory for other runtimes on Windows. It is highly recommended that you consult the implementation's documentation for your platform before using this method. NOTE : this method may suddenly change which implementation is returned from release to release, in the event that higher performance defaults become possible; if the precise implementation is important to your application, please instantiate it directly, instead. For optimal performance you should consider using MMapDirectory on 64 bit runtimes. See FSDirectory . Declaration public static FSDirectory Open(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path Returns Type Description FSDirectory | Improve this Doc View Source Open(DirectoryInfo, LockFactory) Just like Open(DirectoryInfo) , but allows you to also specify a custom LockFactory . Declaration public static FSDirectory Open(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path LockFactory lockFactory Returns Type Description FSDirectory | Improve this Doc View Source Open(String) Just like Open(DirectoryInfo) , but allows you to specify the directory as a System.String . Declaration public static FSDirectory Open(string path) Parameters Type Name Description System.String path The path (to a directory) to open Returns Type Description FSDirectory An open FSDirectory | Improve this Doc View Source Open(String, LockFactory) Just like Open(DirectoryInfo, LockFactory) , but allows you to specify the directory as a System.String . Declaration public static FSDirectory Open(string path, LockFactory lockFactory) Parameters Type Name Description System.String path The path (to a directory) to open LockFactory lockFactory Returns Type Description FSDirectory An open FSDirectory | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides BaseDirectory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() For debug output. Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable See Also Directory"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSLockFactory.html",
    "title": "Class FSLockFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSLockFactory Base class for file system based locking implementation. Inheritance System.Object LockFactory FSLockFactory NativeFSLockFactory SimpleFSLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix LockFactory.MakeLock(String) LockFactory.ClearLock(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) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class FSLockFactory : LockFactory Fields | Improve this Doc View Source m_lockDir Directory for the lock files. Declaration protected DirectoryInfo m_lockDir Field Value Type Description System.IO.DirectoryInfo Properties | Improve this Doc View Source LockDir Gets the lock directory. Declaration public DirectoryInfo LockDir { get; } Property Value Type Description System.IO.DirectoryInfo Methods | Improve this Doc View Source SetLockDir(DirectoryInfo) Set the lock directory. This property can be only called once to initialize the lock directory. It is used by FSDirectory to set the lock directory to itself. Subclasses can also use this property to set the directory in the constructor. Declaration protected void SetLockDir(DirectoryInfo lockDir) Parameters Type Name Description System.IO.DirectoryInfo lockDir | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Store.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.html",
    "title": "Namespace Lucene.Net.Store | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Store <!-- 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. --> Binary i/o API, used for all index data. Classes BaseDirectory Base implementation for a concrete Directory . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BufferedChecksumIndexInput Simple implementation of ChecksumIndexInput that wraps another input and delegates calls. BufferedIndexInput Base implementation class for buffered IndexInput . BufferedIndexOutput Base implementation class for buffered IndexOutput . ByteArrayDataInput DataInput backed by a byte array. WARNING: this class omits all low-level checks. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteArrayDataOutput DataOutput backed by a byte array. WARNING: this class omits most low-level checks, so be sure to test heavily with assertions enabled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteBufferIndexInput Base IndexInput implementation that uses an array of J2N.IO.ByteBuffer s to represent a file. Because Java's J2N.IO.ByteBuffer uses an System.Int32 to address the values, it's necessary to access a file greater System.Int32.MaxValue in size using multiple byte buffers. For efficiency, this class requires that the buffers are a power-of-two ( chunkSizePower ). ChecksumIndexInput Extension of IndexInput , computing checksum as it goes. Callers can retrieve the checksum via Checksum . CompoundFileDirectory Class for accessing a compound stream. This class implements a directory, but is limited to only read operations. Directory methods that would normally modify data throw an exception. All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats used by the Codec . When using the Compound File format these files are collapsed into a single .cfs file (except for the LiveDocsFormat , with a corresponding .cfe file indexing its sub-files. Files: .cfs : An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. .cfe : The \"virtual\" compound file's entry table holding all entries in the corresponding .cfs file. Description: Compound (.cfs) --> Header, FileData FileCount Compound Entry Table (.cfe) --> Header, FileCount, <FileName, DataOffset, DataLength> FileCount , Footer Header --> WriteHeader(DataOutput, String, Int32) FileCount --> WriteVInt32(Int32) DataOffset,DataLength --> WriteInt64(Int64) FileName --> WriteString(String) FileData --> raw file data Footer --> WriteFooter(IndexOutput) Notes: FileCount indicates how many files are contained in this compound file. The entry table that follows has that many entries. Each directory entry contains a long pointer to the start of this file's data section, the files length, and a System.String with that file's name. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompoundFileDirectory.FileEntry Offset/Length for a slice inside of a compound file DataInput Abstract base class for performing read operations of Lucene's low-level data types. DataInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every DataInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new DataInput which operates on the same underlying resource, but positioned independently. DataOutput Abstract base class for performing write operations of Lucene's low-level data types. DataOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Directory A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing. .NET's i/o APIs not used directly, but rather all i/o is through this API. This permits things such as: implementation of RAM-based indices; implementation indices stored in a database; implementation of an index as a single file; Directory locking is implemented by an instance of LockFactory , and can be changed for each Directory instance using SetLockFactory(LockFactory) . Directory.IndexInputSlicer Allows to create one or more sliced IndexInput instances from a single file handle. Some Directory implementations may be able to efficiently map slices of a file into memory when only certain parts of a file are required. This is a Lucene.NET INTERNAL API, use at your own risk This is a Lucene.NET EXPERIMENTAL API, use at your own risk FileSwitchDirectory Expert: A Directory instance that switches files between two other Directory instances. Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided ISet{string} must not change once passed to this class, and must allow multiple threads to call contains at once. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterDirectory Directory implementation that delegates calls to another directory. This class can be used to add limitations on top of an existing Directory implementation such as rate limiting ( RateLimitedDirectoryWrapper ) or to add additional sanity checks for tests. However, if you plan to write your own Directory implementation, you should consider extending directly Directory or BaseDirectory rather than try to reuse functionality of existing Directory s by extending this class. This is a Lucene.NET INTERNAL API, use at your own risk FlushInfo A FlushInfo provides information required for a FLUSH context. It is used as part of an IOContext in case of FLUSH context. FSDirectory Base class for Directory implementations that store index files in the file system. There are currently three core subclasses: SimpleFSDirectory is a straightforward implementation using System.IO.FileStream . However, it has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. NIOFSDirectory uses java.nio's FileChannel's positional io when reading to avoid synchronization when reading from the same file. Unfortunately, due to a Windows-only Sun JRE bug this is a poor choice for Windows, but on all other platforms this is the preferred choice. Applications using System.Threading.Thread.Interrupt or System.Threading.Tasks.Task<TResult> should use SimpleFSDirectory instead. See NIOFSDirectory java doc for details. MMapDirectory uses memory-mapped IO when reading. This is a good choice if you have plenty of virtual memory relative to your index size, eg if you are running on a 64 bit runtime, or you are running on a 32 bit runtime but your index sizes are small enough to fit into the virtual memory space. Applications using System.Threading.Thread.Interrupt or System.Threading.Tasks.Task should use SimpleFSDirectory instead. See MMapDirectory doc for details. Unfortunately, because of system peculiarities, there is no single overall best implementation. Therefore, we've added the Open(String) method (or one of its overloads), to allow Lucene to choose the best FSDirectory implementation given your environment, and the known limitations of each implementation. For users who have no reason to prefer a specific implementation, it's best to simply use Open(String) (or one of its overloads). For all others, you should instantiate the desired implementation directly. The locking implementation is by default NativeFSLockFactory , but can be changed by passing in a custom LockFactory instance. FSDirectory.FSIndexOutput Writes output with System.IO.FileStream.Write(System.Byte[],System.Int32,System.Int32) FSLockFactory Base class for file system based locking implementation. IndexInput Abstract base class for input from a file in a Directory . A random-access input stream. Used for all Lucene index input operations. IndexInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every IndexInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new IndexInput which operates on the same underlying resource, but positioned independently. Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw System.ObjectDisposedException when the original one is closed. IndexOutput Abstract base class for output to a file in a Directory . A random-access output stream. Used for all Lucene index output operations. IndexOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). InputStreamDataInput A DataInput wrapping a plain System.IO.Stream . IOContext IOContext holds additional details on the merge/search context. A IOContext object can never be initialized as null as passed as a parameter to either OpenInput(String, IOContext) or CreateOutput(String, IOContext) Lock An interprocess mutex lock. Typical use might look like: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); Lock.With<T> Utility class for executing code with exclusive access. LockFactory Base class for Locking implementation. Directory uses instances of this class to implement locking. Lucene uses NativeFSLockFactory by default for FSDirectory -based index directories. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that some LockFactory implementation is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . LockObtainFailedException This exception is thrown when the write.lock could not be acquired. This happens when a writer tries to open an index that another writer already has open. LockReleaseFailedException This exception is thrown when the write.lock could not be released. LockStressTest Simple standalone tool that forever acquires & releases a lock using a specific LockFactory . Run without any args to see usage. LockVerifyServer Simple standalone server that must be running when you use VerifyingLockFactory . This server simply verifies at most one process holds the lock at a time. Run without any args to see usage. MergeInfo A MergeInfo provides information required for a MERGE context. It is used as part of an IOContext in case of MERGE context. MMapDirectory File-based Directory implementation that uses System.IO.MemoryMappedFiles.MemoryMappedFile for reading, and FSDirectory.FSIndexOutput for writing. NOTE : memory mapping uses up a portion of the virtual memory address space in your process equal to the size of the file being mapped. Before using this class, be sure your have plenty of virtual address space, e.g. by using a 64 bit runtime, or a 32 bit runtime with indexes that are guaranteed to fit within the address space. On 32 bit platforms also consult MMapDirectory(DirectoryInfo, LockFactory, Int32) if you have problems with mmap failing because of fragmented address space. If you get an System.OutOfMemoryException , it is recommended to reduce the chunk size, until it works. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying channel immediately if at the same time the thread is blocked on IO. The channel will remain closed and subsequent access to MMapDirectory will throw a System.ObjectDisposedException . MMapDirectory.MMapIndexInput NativeFSLockFactory Implements LockFactory using native OS file locks. For NFS based access to an index, it's recommended that you try SimpleFSLockFactory first and work around the one limitation that a lock file could be left when the runtime exits abnormally. The primary benefit of NativeFSLockFactory is that locks (not the lock file itsself) will be properly removed (by the OS) if the runtime has an abnormal exit. Note that, unlike SimpleFSLockFactory , the existence of leftover lock files in the filesystem is fine because the OS will free the locks held against these files even though the files still remain. Lucene will never actively remove the lock files, so although you see them, the index may not be locked. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . NIOFSDirectory An FSDirectory implementation that uses System.IO.FileStream 's positional read, which allows multiple threads to read from the same file without synchronizing. This class only uses System.IO.FileStream when reading; writing is achieved with FSDirectory.FSIndexOutput . NOTE : NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to NIOFSDirectory will throw a System.ObjectDisposedException . If your application uses either System.Threading.Thread.Interrupt or System.Threading.Tasks.Task you should use SimpleFSDirectory in favor of NIOFSDirectory . NIOFSDirectory.NIOFSIndexInput Reads bytes with the Lucene.Net.Support.IO.StreamExtensions.Read(System.IO.Stream,J2N.IO.ByteBuffer,System.Int64) extension method for System.IO.Stream . NoLockFactory Use this LockFactory to disable locking entirely. Only one instance of this lock is created. You should call GetNoLockFactory() to get the instance. NRTCachingDirectory Wraps a RAMDirectory around any provided delegate directory, to be used during NRT search. This class is likely only useful in a near-real-time context, where indexing rate is lowish but reopen rate is highish, resulting in many tiny files being written. This directory keeps such segments (as well as the segments produced by merging them, as long as they are small enough), in RAM. This is safe to use: when your app calls Commit() , all cached files will be flushed from the cached and sync'd. Here's a simple example usage: Directory fsDir = FSDirectory.Open(new DirectoryInfo(\"/path/to/index\")); NRTCachingDirectory cachedFSDir = new NRTCachingDirectory(fsDir, 5.0, 60.0); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_48, analyzer); IndexWriter writer = new IndexWriter(cachedFSDir, conf); This will cache all newly flushed segments, all merges whose expected segment size is <= 5 MB, unless the net cached bytes exceeds 60 MB at which point all writes will not be cached (until the net bytes falls below 60 MB). This is a Lucene.NET EXPERIMENTAL API, use at your own risk OutputStreamDataOutput A DataOutput wrapping a plain System.IO.Stream . RAMDirectory A memory-resident Directory implementation. Locking implementation is by default the SingleInstanceLockFactory but can be changed with SetLockFactory(LockFactory) . Warning: This class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. This class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. It is recommended to materialize large indexes on disk and use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. RAMFile Represents a file in RAM as a list of byte[] buffers. This is a Lucene.NET INTERNAL API, use at your own risk RAMInputStream A memory-resident IndexInput implementation. This is a Lucene.NET INTERNAL API, use at your own risk RAMOutputStream A memory-resident IndexOutput implementation. This is a Lucene.NET INTERNAL API, use at your own risk RateLimitedDirectoryWrapper A Directory wrapper that allows IndexOutput rate limiting using IO context ( IOContext.UsageContext ) specific rate limiters ( RateLimiter ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk RateLimiter Abstract base class to rate limit IO. Typically implementations are shared across multiple IndexInput s or IndexOutput s (for example those involved all merging). Those IndexInput s and IndexOutput s would call Pause(Int64) whenever they want to read bytes or write bytes. RateLimiter.SimpleRateLimiter Simple class to rate limit IO. SimpleFSDirectory A straightforward implementation of FSDirectory using System.IO.FileStream . However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. SimpleFSDirectory.SimpleFSIndexInput Reads bytes with System.IO.FileStream.Seek(System.Int64,System.IO.SeekOrigin) followed by System.IO.FileStream.Read(System.Byte[],System.Int32,System.Int32) . SimpleFSLockFactory Implements LockFactory using System.IO.File.WriteAllText(System.String,System.String,System.Text.Encoding) (writes the file with UTF8 encoding and no byte order mark). Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change to all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . SingleInstanceLockFactory Implements LockFactory for a single in-process instance, meaning all locking will take place through this one instance. Only use this LockFactory when you are certain all IndexReader s and IndexWriter s for a given index are running against a single shared in-process Directory instance. This is currently the default locking for RAMDirectory . TrackingDirectoryWrapper A delegating Directory that records which files were written to and deleted. VerifyingLockFactory A LockFactory that wraps another LockFactory and verifies that each lock obtain/release is \"correct\" (never results in two processes holding the lock at the same time). It does this by contacting an external server ( LockVerifyServer ) to assert that at most one process holds the lock at a time. To use this, you should also run LockVerifyServer on the host & port matching what you pass to the constructor. Enums IOContext.UsageContext IOContext.UsageContext is a enumeration which specifies the context in which the Directory is being used for. NOTE: This was Context in Lucene"
  },
  "api/Lucene.Net/Lucene.Net.Store.IndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IndexInput.html",
    "title": "Class IndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexInput Abstract base class for input from a file in a Directory . A random-access input stream. Used for all Lucene index input operations. IndexInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every IndexInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new IndexInput which operates on the same underlying resource, but positioned independently. Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw System.ObjectDisposedException when the original one is closed. Inheritance System.Object DataInput IndexInput BufferedIndexInput ByteBufferIndexInput ChecksumIndexInput RAMInputStream Implements System.IDisposable Inherited Members DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexInput : DataInput, IDisposable Constructors | Improve this Doc View Source IndexInput(String) resourceDescription should be a non-null, opaque string describing this resource; it's returned from ToString() . Declaration protected IndexInput(string resourceDescription) Parameters Type Name Description System.String resourceDescription Properties | Improve this Doc View Source Length The number of bytes in the file. Declaration public abstract long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Clone() Returns a clone of this stream. Clones of a stream access the same data, and are positioned at the same point as the stream they were cloned from. Expert: Subclasses must ensure that clones may be positioned at different points in the input from each other and from the stream they were cloned from. Warning: Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw System.ObjectDisposedException when the original one is closed. Declaration public override object Clone() Returns Type Description System.Object Overrides DataInput.Clone() | Improve this Doc View Source Dispose() Closes the stream to further operations. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes the stream to further operations. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetFilePointer() Returns the current position in this file, where the next read will occur. Declaration public abstract long GetFilePointer() Returns Type Description System.Int64 See Also Seek(Int64) | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next read will occur. Declaration public abstract void Seek(long pos) Parameters Type Name Description System.Int64 pos See Also GetFilePointer() | Improve this Doc View Source ToString() Returns the resourceDescription that was passed into the constructor. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable See Also Directory"
  },
  "api/Lucene.Net/Lucene.Net.Store.IndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IndexOutput.html",
    "title": "Class IndexOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexOutput Abstract base class for output to a file in a Directory . A random-access output stream. Used for all Lucene index output operations. IndexOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput RAMOutputStream Implements System.IDisposable Inherited Members DataOutput.WriteByte(Byte) DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteBytes(Byte[], Int32, Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexOutput : DataOutput, IDisposable Properties | Improve this Doc View Source Checksum Returns the current checksum of bytes written so far Declaration public abstract long Checksum { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Length Gets or Sets the file length. By default, this property's setter does nothing (it's optional for a Directory to implement it). But, certain Directory implementations (for example FSDirectory ) can use this to inform the underlying IO system to pre-allocate the file to the specified size. If the length is longer than the current file length, the bytes added to the file are undefined. Otherwise the file is truncated. Declaration public virtual long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Dispose() Closes this stream to further operations. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes this stream to further operations. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Flush() Forces any buffered output to be written. Declaration public abstract void Flush() | Improve this Doc View Source GetFilePointer() Returns the current position in this file, where the next write will occur. Declaration public abstract long GetFilePointer() Returns Type Description System.Int64 See Also Seek(Int64) | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next write will occur. Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public abstract void Seek(long pos) Parameters Type Name Description System.Int64 pos See Also GetFilePointer() Implements System.IDisposable See Also Directory IndexInput"
  },
  "api/Lucene.Net/Lucene.Net.Store.InputStreamDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.InputStreamDataInput.html",
    "title": "Class InputStreamDataInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InputStreamDataInput A DataInput wrapping a plain System.IO.Stream . Inheritance System.Object DataInput InputStreamDataInput Implements System.IDisposable Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public class InputStreamDataInput : DataInput, IDisposable Constructors | Improve this Doc View Source InputStreamDataInput(Stream) Declaration public InputStreamDataInput(Stream is) Parameters Type Name Description System.IO.Stream is Methods | 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 ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.IOContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IOContext.html",
    "title": "Class IOContext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IOContext IOContext holds additional details on the merge/search context. A IOContext object can never be initialized as null as passed as a parameter to either OpenInput(String, IOContext) or CreateOutput(String, IOContext) Inheritance System.Object IOContext 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.Store Assembly : Lucene.Net.dll Syntax public class IOContext Constructors | Improve this Doc View Source IOContext() Declaration public IOContext() | Improve this Doc View Source IOContext(FlushInfo) Declaration public IOContext(FlushInfo flushInfo) Parameters Type Name Description FlushInfo flushInfo | Improve this Doc View Source IOContext(IOContext, Boolean) This constructor is used to initialize a IOContext instance with a new value for the ReadOnce property. Declaration public IOContext(IOContext ctxt, bool readOnce) Parameters Type Name Description IOContext ctxt IOContext object whose information is used to create the new instance except the ReadOnce property. System.Boolean readOnce The new IOContext object will use this value for ReadOnce . | Improve this Doc View Source IOContext(IOContext.UsageContext) Declaration public IOContext(IOContext.UsageContext context) Parameters Type Name Description IOContext.UsageContext context | Improve this Doc View Source IOContext(MergeInfo) Declaration public IOContext(MergeInfo mergeInfo) Parameters Type Name Description MergeInfo mergeInfo Fields | Improve this Doc View Source DEFAULT Declaration public static readonly IOContext DEFAULT Field Value Type Description IOContext | Improve this Doc View Source READ Declaration public static readonly IOContext READ Field Value Type Description IOContext | Improve this Doc View Source READ_ONCE Declaration public static readonly IOContext READ_ONCE Field Value Type Description IOContext Properties | Improve this Doc View Source Context A IOContext.UsageContext setting Declaration public IOContext.UsageContext Context { get; } Property Value Type Description IOContext.UsageContext | Improve this Doc View Source FlushInfo Declaration public FlushInfo FlushInfo { get; } Property Value Type Description FlushInfo | Improve this Doc View Source MergeInfo Declaration public MergeInfo MergeInfo { get; } Property Value Type Description MergeInfo | Improve this Doc View Source ReadOnce Declaration public bool ReadOnce { get; } Property Value Type Description System.Boolean Methods | 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 ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Store.IOContext.UsageContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IOContext.UsageContext.html",
    "title": "Enum IOContext.UsageContext | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum IOContext.UsageContext IOContext.UsageContext is a enumeration which specifies the context in which the Directory is being used for. NOTE: This was Context in Lucene Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public enum UsageContext Fields Name Description DEFAULT FLUSH MERGE READ"
  },
  "api/Lucene.Net/Lucene.Net.Store.Lock.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Lock.html",
    "title": "Class Lock | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lock An interprocess mutex lock. Typical use might look like: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); Inheritance System.Object Lock 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.Store Assembly : Lucene.Net.dll Syntax public abstract class Lock : IDisposable Fields | Improve this Doc View Source LOCK_OBTAIN_WAIT_FOREVER Pass this value to Obtain(Int64) to try forever to obtain the lock. Declaration public const long LOCK_OBTAIN_WAIT_FOREVER = -1L Field Value Type Description System.Int64 | Improve this Doc View Source LOCK_POLL_INTERVAL How long Obtain(Int64) waits, in milliseconds, in between attempts to acquire the lock. Declaration public static long LOCK_POLL_INTERVAL Field Value Type Description System.Int64 Properties | Improve this Doc View Source FailureReason If a lock obtain called, this failureReason may be set with the \"root cause\" System.Exception as to why the lock was not obtained. Declaration protected Exception FailureReason { get; set; } Property Value Type Description System.Exception Methods | Improve this Doc View Source Dispose() Releases exclusive access. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Releases exclusive access. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsLocked() Returns true if the resource is currently locked. Note that one must still call Obtain() before using the resource. Declaration public abstract bool IsLocked() Returns Type Description System.Boolean | Improve this Doc View Source NewAnonymous<T>(Lock, Int32, Func<T>) Creates a new instance with the ability to specify the DoBody() method through the doBody argument Simple example: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); The result of the operation is the value that is returned from doBody (i.e. () => { return \"the result\"; }). The type of determines the return type of the operation. Declaration public static Lock.With<T> NewAnonymous<T>(Lock lock, int lockWaitTimeout, Func<T> doBody) Parameters Type Name Description Lock lock the Lock instance to use System.Int32 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever System.Func <T> doBody a delegate method that Returns Type Description Lock.With <T> The value that is returned from the doBody delegate method (i.e. () => { return theObject; }) Type Parameters Name Description T | Improve this Doc View Source Obtain() Attempts to obtain exclusive access and immediately return upon success or failure. Use Dispose() to release the lock. Declaration public abstract bool Obtain() Returns Type Description System.Boolean true iff exclusive access is obtained | Improve this Doc View Source Obtain(Int64) Attempts to obtain an exclusive lock within amount of time given. Polls once per LOCK_POLL_INTERVAL (currently 1000) milliseconds until lockWaitTimeout is passed. Declaration public bool Obtain(long lockWaitTimeout) Parameters Type Name Description System.Int64 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever Returns Type Description System.Boolean true if lock was obtained Exceptions Type Condition LockObtainFailedException if lock wait times out System.ArgumentException if lockWaitTimeout is out of bounds System.IO.IOException if Obtain() throws System.IO.IOException Implements System.IDisposable See Also MakeLock ( System.String )"
  },
  "api/Lucene.Net/Lucene.Net.Store.Lock.With-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Lock.With-1.html",
    "title": "Class Lock.With<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Lock.With<T> Utility class for executing code with exclusive access. Inheritance System.Object Lock.With<T> 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.Store Assembly : Lucene.Net.dll Syntax public abstract class With<T> Type Parameters Name Description T Constructors | Improve this Doc View Source With(Lock, Int64) Constructs an executor that will grab the named lock . Declaration public With(Lock lock, long lockWaitTimeout) Parameters Type Name Description Lock lock the Lock instance to use System.Int64 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever Methods | Improve this Doc View Source DoBody() Code to execute with exclusive access. Declaration protected abstract T DoBody() Returns Type Description T | Improve this Doc View Source Run() Calls DoBody() while lock is obtained. Blocks if lock cannot be obtained immediately. Retries to obtain lock once per second until it is obtained, or until it has tried ten times. Lock is released when DoBody() exits. Declaration public virtual T Run() Returns Type Description T Exceptions Type Condition LockObtainFailedException if lock could not be obtained System.IO.IOException if Obtain() throws System.IO.IOException"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockFactory.html",
    "title": "Class LockFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LockFactory Base class for Locking implementation. Directory uses instances of this class to implement locking. Lucene uses NativeFSLockFactory by default for FSDirectory -based index directories. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that some LockFactory implementation is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory NoLockFactory SingleInstanceLockFactory VerifyingLockFactory 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.Store Assembly : Lucene.Net.dll Syntax public abstract class LockFactory Fields | Improve this Doc View Source m_lockPrefix Declaration protected string m_lockPrefix Field Value Type Description System.String Properties | Improve this Doc View Source LockPrefix Gets or Sets the prefix in use for all locks created in this LockFactory . This is normally called once, when a Directory gets this LockFactory instance. However, you can also call this (after this instance is assigned to a Directory ) to override the prefix in use. This is helpful if you're running Lucene on machines that have different mount points for the same shared directory. Declaration public virtual string LockPrefix { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source ClearLock(String) Attempt to clear (forcefully unlock and remove) the specified lock. Only call this at a time when you are certain this lock is no longer in use. Declaration public abstract void ClearLock(string lockName) Parameters Type Name Description System.String lockName name of the lock to be cleared. | Improve this Doc View Source MakeLock(String) Return a new Lock instance identified by lockName . Declaration public abstract Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName name of the lock to be created. Returns Type Description Lock See Also LockVerifyServer LockStressTest VerifyingLockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockObtainFailedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockObtainFailedException.html",
    "title": "Class LockObtainFailedException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LockObtainFailedException This exception is thrown when the write.lock could not be acquired. This happens when a writer tries to open an index that another writer already has open. Inheritance System.Object System.Exception System.SystemException System.IO.IOException LockObtainFailedException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockObtainFailedException : IOException, ISerializable Constructors | Improve this Doc View Source LockObtainFailedException(String) Declaration public LockObtainFailedException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source LockObtainFailedException(String, Exception) Declaration public LockObtainFailedException(string message, Exception ex) Parameters Type Name Description System.String message System.Exception ex Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) See Also Obtain(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockReleaseFailedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockReleaseFailedException.html",
    "title": "Class LockReleaseFailedException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LockReleaseFailedException This exception is thrown when the write.lock could not be released. Inheritance System.Object System.Exception System.SystemException System.IO.IOException LockReleaseFailedException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockReleaseFailedException : IOException, ISerializable Constructors | Improve this Doc View Source LockReleaseFailedException(String) Declaration public LockReleaseFailedException(string message) Parameters Type Name Description System.String message Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) See Also Dispose()"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockStressTest.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockStressTest.html",
    "title": "Class LockStressTest | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LockStressTest Simple standalone tool that forever acquires & releases a lock using a specific LockFactory . Run without any args to see usage. Inheritance System.Object LockStressTest 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.Store Assembly : Lucene.Net.dll Syntax public class LockStressTest Methods | Improve this Doc View Source Main(String[]) Declaration [STAThread] public static void Main(string[] args) Parameters Type Name Description System.String [] args See Also VerifyingLockFactory LockVerifyServer"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockVerifyServer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockVerifyServer.html",
    "title": "Class LockVerifyServer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LockVerifyServer Simple standalone server that must be running when you use VerifyingLockFactory . This server simply verifies at most one process holds the lock at a time. Run without any args to see usage. Inheritance System.Object LockVerifyServer 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.Store Assembly : Lucene.Net.dll Syntax public class LockVerifyServer Methods | Improve this Doc View Source Main(String[]) Declaration [STAThread] public static void Main(string[] args) Parameters Type Name Description System.String [] args See Also VerifyingLockFactory LockStressTest"
  },
  "api/Lucene.Net/Lucene.Net.Store.MergeInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MergeInfo.html",
    "title": "Class MergeInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergeInfo A MergeInfo provides information required for a MERGE context. It is used as part of an IOContext in case of MERGE context. Inheritance System.Object MergeInfo 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.Store Assembly : Lucene.Net.dll Syntax public class MergeInfo Constructors | Improve this Doc View Source MergeInfo(Int32, Int64, Boolean, Int32) Creates a new MergeInfo instance from the values required for a MERGE IOContext context. These values are only estimates and are not the actual values. Declaration public MergeInfo(int totalDocCount, long estimatedMergeBytes, bool isExternal, int mergeMaxNumSegments) Parameters Type Name Description System.Int32 totalDocCount System.Int64 estimatedMergeBytes System.Boolean isExternal System.Int32 mergeMaxNumSegments Properties | Improve this Doc View Source EstimatedMergeBytes Declaration public long EstimatedMergeBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsExternal Declaration public bool IsExternal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MergeMaxNumSegments Declaration public int MergeMaxNumSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalDocCount Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 Methods | 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 ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.html",
    "title": "Class MMapDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MMapDirectory File-based Directory implementation that uses System.IO.MemoryMappedFiles.MemoryMappedFile for reading, and FSDirectory.FSIndexOutput for writing. NOTE : memory mapping uses up a portion of the virtual memory address space in your process equal to the size of the file being mapped. Before using this class, be sure your have plenty of virtual address space, e.g. by using a 64 bit runtime, or a 32 bit runtime with indexes that are guaranteed to fit within the address space. On 32 bit platforms also consult MMapDirectory(DirectoryInfo, LockFactory, Int32) if you have problems with mmap failing because of fragmented address space. If you get an System.OutOfMemoryException , it is recommended to reduce the chunk size, until it works. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying channel immediately if at the same time the thread is blocked on IO. The channel will remain closed and subsequent access to MMapDirectory will throw a System.ObjectDisposedException . Inheritance System.Object Directory BaseDirectory FSDirectory MMapDirectory Implements System.IDisposable Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public class MMapDirectory : FSDirectory, IDisposable Constructors | Improve this Doc View Source MMapDirectory(DirectoryInfo) Create a new MMapDirectory for the named location and NativeFSLockFactory . Declaration public MMapDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(DirectoryInfo, LockFactory) Create a new MMapDirectory for the named location. Declaration public MMapDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(DirectoryInfo, LockFactory, Int32) Create a new MMapDirectory for the named location, specifying the maximum chunk size used for memory mapping. Declaration public MMapDirectory(DirectoryInfo path, LockFactory lockFactory, int maxChunkSize) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); System.Int32 maxChunkSize maximum chunk size (default is 1 GiBytes for 64 bit runtimes and 256 MiBytes for 32 bit runtimes) used for memory mapping. Especially on 32 bit platform, the address space can be very fragmented, so large index files cannot be mapped. Using a lower chunk size makes the directory implementation a little bit slower (as the correct chunk may be resolved on lots of seeks) but the chance is higher that mmap does not fail. On 64 bit platforms, this parameter should always be 1 << 30 , as the address space is big enough. Please note: The chunk size is always rounded down to a power of 2. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(String) Create a new MMapDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public MMapDirectory(string path) Parameters Type Name Description System.String path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(String, LockFactory) Create a new MMapDirectory for the named location. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public MMapDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(String, LockFactory, Int32) Create a new MMapDirectory for the named location, specifying the maximum chunk size used for memory mapping. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public MMapDirectory(string path, LockFactory lockFactory, int maxChunkSize) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); System.Int32 maxChunkSize maximum chunk size (default is 1 GiBytes for 64 bit runtimes and 256 MiBytes for 32 bit runtimes) used for memory mapping. Especially on 32 bit platform, the address space can be very fragmented, so large index files cannot be mapped. Using a lower chunk size makes the directory implementation a little bit slower (as the correct chunk may be resolved on lots of seeks) but the chance is higher that mmap does not fail. On 64 bit platforms, this parameter should always be 1 << 30 , as the address space is big enough. Please note: The chunk size is always rounded down to a power of 2. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Fields | Improve this Doc View Source DEFAULT_MAX_BUFF Default max chunk size. Declaration public static readonly int DEFAULT_MAX_BUFF Field Value Type Description System.Int32 See Also MMapDirectory(DirectoryInfo, LockFactory, Int32) Properties | Improve this Doc View Source MaxChunkSize Returns the current mmap chunk size. Declaration public int MaxChunkSize { get; } Property Value Type Description System.Int32 See Also MMapDirectory(DirectoryInfo, LockFactory, Int32) Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.MMapIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.MMapIndexInput.html",
    "title": "Class MMapDirectory.MMapIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MMapDirectory.MMapIndexInput Inheritance System.Object DataInput IndexInput ByteBufferIndexInput MMapDirectory.MMapIndexInput Implements System.IDisposable Inherited Members ByteBufferIndexInput.ReadByte() ByteBufferIndexInput.ReadBytes(Byte[], Int32, Int32) ByteBufferIndexInput.ReadInt16() ByteBufferIndexInput.ReadInt32() ByteBufferIndexInput.ReadInt64() ByteBufferIndexInput.GetFilePointer() ByteBufferIndexInput.Seek(Int64) ByteBufferIndexInput.Length ByteBufferIndexInput.Clone() ByteBufferIndexInput.Slice(String, Int64, Int64) ByteBufferIndexInput.ToString() IndexInput.Dispose() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadVInt32() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public sealed class MMapIndexInput : ByteBufferIndexInput, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override sealed void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ByteBufferIndexInput.Dispose(Boolean) | Improve this Doc View Source FreeBuffer(ByteBuffer) Try to unmap the buffer, this method silently fails if no support for that in the runtime. On Windows, this leads to the fact, that mmapped files cannot be modified or deleted. Declaration protected override void FreeBuffer(ByteBuffer buffer) Parameters Type Name Description J2N.IO.ByteBuffer buffer Overrides ByteBufferIndexInput.FreeBuffer(ByteBuffer) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.NativeFSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NativeFSLockFactory.html",
    "title": "Class NativeFSLockFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NativeFSLockFactory Implements LockFactory using native OS file locks. For NFS based access to an index, it's recommended that you try SimpleFSLockFactory first and work around the one limitation that a lock file could be left when the runtime exits abnormally. The primary benefit of NativeFSLockFactory is that locks (not the lock file itsself) will be properly removed (by the OS) if the runtime has an abnormal exit. Note that, unlike SimpleFSLockFactory , the existence of leftover lock files in the filesystem is fine because the OS will free the locks held against these files even though the files still remain. Lucene will never actively remove the lock files, so although you see them, the index may not be locked. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory NativeFSLockFactory Inherited Members FSLockFactory.m_lockDir FSLockFactory.SetLockDir(DirectoryInfo) FSLockFactory.LockDir FSLockFactory.ToString() LockFactory.m_lockPrefix LockFactory.LockPrefix 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.Store Assembly : Lucene.Net.dll Syntax public class NativeFSLockFactory : FSLockFactory Constructors | Improve this Doc View Source NativeFSLockFactory() Create a NativeFSLockFactory instance, with null (unset) lock directory. When you pass this factory to a FSDirectory subclass, the lock directory is automatically set to the directory itself. Be sure to create one instance for each directory your create! Declaration public NativeFSLockFactory() | Improve this Doc View Source NativeFSLockFactory(DirectoryInfo) Create a NativeFSLockFactory instance, storing lock files into the specified lockDir Declaration public NativeFSLockFactory(DirectoryInfo lockDir) Parameters Type Name Description System.IO.DirectoryInfo lockDir where lock files are created. | Improve this Doc View Source NativeFSLockFactory(String) Create a NativeFSLockFactory instance, storing lock files into the specified lockDirName Declaration public NativeFSLockFactory(string lockDirName) Parameters Type Name Description System.String lockDirName where lock files are created. Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.html",
    "title": "Class NIOFSDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NIOFSDirectory An FSDirectory implementation that uses System.IO.FileStream 's positional read, which allows multiple threads to read from the same file without synchronizing. This class only uses System.IO.FileStream when reading; writing is achieved with FSDirectory.FSIndexOutput . NOTE : NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to NIOFSDirectory will throw a System.ObjectDisposedException . If your application uses either System.Threading.Thread.Interrupt or System.Threading.Tasks.Task you should use SimpleFSDirectory in favor of NIOFSDirectory . Inheritance System.Object Directory BaseDirectory FSDirectory NIOFSDirectory Implements System.IDisposable Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public class NIOFSDirectory : FSDirectory, IDisposable Constructors | Improve this Doc View Source NIOFSDirectory(DirectoryInfo) Create a new NIOFSDirectory for the named location and NativeFSLockFactory . Declaration public NIOFSDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source NIOFSDirectory(DirectoryInfo, LockFactory) Create a new NIOFSDirectory for the named location. Declaration public NIOFSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source NIOFSDirectory(String) Create a new NIOFSDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public NIOFSDirectory(string path) Parameters Type Name Description System.String path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source NIOFSDirectory(String, LockFactory) Create a new NIOFSDirectory for the named location. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public NIOFSDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.NIOFSIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.NIOFSIndexInput.html",
    "title": "Class NIOFSDirectory.NIOFSIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NIOFSDirectory.NIOFSIndexInput Reads bytes with the Lucene.Net.Support.IO.StreamExtensions.Read(System.IO.Stream,J2N.IO.ByteBuffer,System.Int64) extension method for System.IO.Stream . Inheritance System.Object DataInput IndexInput BufferedIndexInput NIOFSDirectory.NIOFSIndexInput Implements System.IDisposable Inherited Members BufferedIndexInput.BUFFER_SIZE BufferedIndexInput.MERGE_BUFFER_SIZE BufferedIndexInput.m_buffer BufferedIndexInput.ReadByte() BufferedIndexInput.SetBufferSize(Int32) BufferedIndexInput.BufferSize BufferedIndexInput.ReadBytes(Byte[], Int32, Int32) BufferedIndexInput.ReadBytes(Byte[], Int32, Int32, Boolean) BufferedIndexInput.ReadInt16() BufferedIndexInput.ReadInt32() BufferedIndexInput.ReadInt64() BufferedIndexInput.ReadVInt32() BufferedIndexInput.ReadVInt64() BufferedIndexInput.GetFilePointer() BufferedIndexInput.Seek(Int64) BufferedIndexInput.FlushBuffer(IndexOutput, Int64) BufferedIndexInput.GetBufferSize(IOContext) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax protected class NIOFSIndexInput : BufferedIndexInput, IDisposable Constructors | Improve this Doc View Source NIOFSIndexInput(String, FileStream, IOContext) Declaration public NIOFSIndexInput(string resourceDesc, FileStream fc, IOContext context) Parameters Type Name Description System.String resourceDesc System.IO.FileStream fc IOContext context | Improve this Doc View Source NIOFSIndexInput(String, FileStream, Int64, Int64, Int32) Declaration public NIOFSIndexInput(string resourceDesc, FileStream fc, long off, long length, int bufferSize) Parameters Type Name Description System.String resourceDesc System.IO.FileStream fc System.Int64 off System.Int64 length System.Int32 bufferSize Fields | Improve this Doc View Source m_channel the file channel we will read from Declaration protected readonly FileStream m_channel Field Value Type Description System.IO.FileStream | Improve this Doc View Source m_end end offset (start+length) Declaration protected readonly long m_end Field Value Type Description System.Int64 | Improve this Doc View Source m_off start offset: non-zero in the slice case Declaration protected readonly long m_off Field Value Type Description System.Int64 Properties | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides BufferedIndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source NewBuffer(Byte[]) Declaration protected override void NewBuffer(byte[] newBuffer) Parameters Type Name Description System.Byte [] newBuffer Overrides BufferedIndexInput.NewBuffer(Byte[]) | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Declaration protected override void ReadInternal(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides BufferedIndexInput.ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos Overrides BufferedIndexInput.SeekInternal(Int64) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.NoLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NoLockFactory.html",
    "title": "Class NoLockFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoLockFactory Use this LockFactory to disable locking entirely. Only one instance of this lock is created. You should call GetNoLockFactory() to get the instance. Inheritance System.Object LockFactory NoLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix 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.Store Assembly : Lucene.Net.dll Syntax public class NoLockFactory : LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source GetNoLockFactory() Declaration public static NoLockFactory GetNoLockFactory() Returns Type Description NoLockFactory | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.NRTCachingDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NRTCachingDirectory.html",
    "title": "Class NRTCachingDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NRTCachingDirectory Wraps a RAMDirectory around any provided delegate directory, to be used during NRT search. This class is likely only useful in a near-real-time context, where indexing rate is lowish but reopen rate is highish, resulting in many tiny files being written. This directory keeps such segments (as well as the segments produced by merging them, as long as they are small enough), in RAM. This is safe to use: when your app calls Commit() , all cached files will be flushed from the cached and sync'd. Here's a simple example usage: Directory fsDir = FSDirectory.Open(new DirectoryInfo(\"/path/to/index\")); NRTCachingDirectory cachedFSDir = new NRTCachingDirectory(fsDir, 5.0, 60.0); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_48, analyzer); IndexWriter writer = new IndexWriter(cachedFSDir, conf); This will cache all newly flushed segments, all merges whose expected segment size is <= 5 MB, unless the net cached bytes exceeds 60 MB at which point all writes will not be cached (until the net bytes falls below 60 MB). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory NRTCachingDirectory Implements System.IDisposable Inherited Members Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.EnsureOpen() 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.Store Assembly : Lucene.Net.dll Syntax public class NRTCachingDirectory : Directory, IDisposable Constructors | Improve this Doc View Source NRTCachingDirectory(Directory, Double, Double) We will cache a newly created output if 1) it's a flush or a merge and the estimated size of the merged segment is <= maxMergeSizeMB, and 2) the total cached bytes is <= maxCachedMB Declaration public NRTCachingDirectory(Directory delegate, double maxMergeSizeMB, double maxCachedMB) Parameters Type Name Description Directory delegate System.Double maxMergeSizeMB System.Double maxCachedMB Properties | Improve this Doc View Source Delegate Declaration public virtual Directory Delegate { get; } Property Value Type Description Directory | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Dispose this directory, which flushes any cached files to the delegate and then disposes the delegate. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source DoCacheWrite(String, IOContext) Subclass can override this to customize logic; return true if this file should be written to the RAMDirectory . Declaration protected virtual bool DoCacheWrite(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description System.Boolean | Improve this Doc View Source FileExists(String) Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source GetSizeInBytes() Returns how many bytes are being used by the RAMDirectory cache Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source ListCachedFiles() Declaration public virtual string[] ListCachedFiles() Returns Type Description System.String [] | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> fileNames) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > fileNames Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.OutputStreamDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.OutputStreamDataOutput.html",
    "title": "Class OutputStreamDataOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OutputStreamDataOutput A DataOutput wrapping a plain System.IO.Stream . Inheritance System.Object DataOutput OutputStreamDataOutput Implements System.IDisposable Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Store Assembly : Lucene.Net.dll Syntax public class OutputStreamDataOutput : DataOutput, IDisposable Constructors | Improve this Doc View Source OutputStreamDataOutput(Stream) Declaration public OutputStreamDataOutput(Stream os) Parameters Type Name Description System.IO.Stream os Methods | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMDirectory.html",
    "title": "Class RAMDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RAMDirectory A memory-resident Directory implementation. Locking implementation is by default the SingleInstanceLockFactory but can be changed with SetLockFactory(LockFactory) . Warning: This class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. This class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. It is recommended to materialize large indexes on disk and use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. Inheritance System.Object Directory BaseDirectory RAMDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public class RAMDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source RAMDirectory() Constructs an empty Directory . Declaration public RAMDirectory() | Improve this Doc View Source RAMDirectory(Directory, IOContext) Creates a new RAMDirectory instance from a different Directory implementation. This can be used to load a disk-based index into memory. Warning: this class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. this class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. For disk-based indexes it is recommended to use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. Note that the resulting RAMDirectory instance is fully independent from the original Directory (it is a complete copy). Any subsequent changes to the original Directory will not be visible in the RAMDirectory instance. Declaration public RAMDirectory(Directory dir, IOContext context) Parameters Type Name Description Directory dir a Directory value IOContext context io context Exceptions Type Condition System.IO.IOException if an error occurs Fields | Improve this Doc View Source m_fileMap Declaration protected readonly ConcurrentDictionary<string, RAMFile> m_fileMap Field Value Type Description System.Collections.Concurrent.ConcurrentDictionary < System.String , RAMFile > | Improve this Doc View Source m_sizeInBytes Declaration protected readonly AtomicInt64 m_sizeInBytes Field Value Type Description J2N.Threading.Atomic.AtomicInt64 Methods | Improve this Doc View Source CreateOutput(String, IOContext) Creates a new, empty file in the directory with the given name. Returns a stream writing this file. Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) Exceptions Type Condition System.IO.IOException if the file does not exist | Improve this Doc View Source Dispose(Boolean) Closes the store to future operations, releasing associated memory. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Returns true iff the named file exists in this directory. Declaration [Obsolete(\"this method will be removed in 5.0\")] public override sealed bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length in bytes of a file in the directory. Declaration public override sealed long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) Exceptions Type Condition System.IO.IOException if the file does not exist | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source GetSizeInBytes() Return total size in bytes of all files in this directory. This is currently quantized to Lucene.Net.Store.RAMOutputStream.BUFFER_SIZE . Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override sealed string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source NewRAMFile() Returns a new RAMFile for storing data. this method can be overridden to return different RAMFile impls, that e.g. override NewBuffer(Int32) . Declaration protected virtual RAMFile NewRAMFile() Returns Type Description RAMFile | Improve this Doc View Source OpenInput(String, IOContext) Returns a stream reading an existing file. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMFile.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMFile.html",
    "title": "Class RAMFile | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RAMFile Represents a file in RAM as a list of byte[] buffers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RAMFile 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.Store Assembly : Lucene.Net.dll Syntax public class RAMFile Constructors | Improve this Doc View Source RAMFile() File used as buffer, in no RAMDirectory Declaration public RAMFile() | Improve this Doc View Source RAMFile(RAMDirectory) Declaration public RAMFile(RAMDirectory directory) Parameters Type Name Description RAMDirectory directory Fields | Improve this Doc View Source m_buffers Declaration protected List<byte[]> m_buffers Field Value Type Description System.Collections.Generic.List < System.Byte []> | Improve this Doc View Source m_sizeInBytes Declaration protected long m_sizeInBytes Field Value Type Description System.Int64 Properties | Improve this Doc View Source Length For non-stream access from thread that might be concurrent with writing Declaration public virtual long Length { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source NumBuffers Declaration protected int NumBuffers { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddBuffer(Int32) Declaration protected byte[] AddBuffer(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Byte [] | Improve this Doc View Source GetBuffer(Int32) Declaration protected byte[] GetBuffer(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Byte [] | Improve this Doc View Source GetSizeInBytes() Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source NewBuffer(Int32) Expert: allocate a new buffer. Subclasses can allocate differently. Declaration protected virtual byte[] NewBuffer(int size) Parameters Type Name Description System.Int32 size size of allocated buffer. Returns Type Description System.Byte [] allocated buffer."
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMInputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMInputStream.html",
    "title": "Class RAMInputStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RAMInputStream A memory-resident IndexInput implementation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataInput IndexInput RAMInputStream Implements System.IDisposable Inherited Members IndexInput.Dispose() IndexInput.ToString() IndexInput.Clone() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax public class RAMInputStream : IndexInput, IDisposable Constructors | Improve this Doc View Source RAMInputStream(String, RAMFile) Declaration public RAMInputStream(string name, RAMFile f) Parameters Type Name Description System.String name RAMFile f Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMOutputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMOutputStream.html",
    "title": "Class RAMOutputStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RAMOutputStream A memory-resident IndexOutput implementation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataOutput IndexOutput RAMOutputStream Implements System.IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Store Assembly : Lucene.Net.dll Syntax public class RAMOutputStream : IndexOutput, IDisposable Constructors | Improve this Doc View Source RAMOutputStream() Construct an empty output buffer. Declaration public RAMOutputStream() | Improve this Doc View Source RAMOutputStream(RAMFile) Declaration public RAMOutputStream(RAMFile f) Parameters Type Name Description RAMFile f Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; set; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source GetSizeInBytes() Returns byte usage of all buffers. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source Reset() Resets this to an empty file. Declaration public virtual void Reset() | Improve this Doc View Source Seek(Int64) Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) | Improve this Doc View Source WriteTo(DataOutput) Copy the current contents of this buffer to the named output. Declaration public virtual void WriteTo(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source WriteTo(Byte[], Int32) Copy the current contents of this buffer to output byte array Declaration public virtual void WriteTo(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes System.Int32 offset Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimitedDirectoryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimitedDirectoryWrapper.html",
    "title": "Class RateLimitedDirectoryWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RateLimitedDirectoryWrapper A Directory wrapper that allows IndexOutput rate limiting using IO context ( IOContext.UsageContext ) specific rate limiters ( RateLimiter ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory FilterDirectory RateLimitedDirectoryWrapper Implements System.IDisposable Inherited Members FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ListAll() FilterDirectory.FileExists(String) FilterDirectory.DeleteFile(String) FilterDirectory.FileLength(String) FilterDirectory.Sync(ICollection<String>) FilterDirectory.OpenInput(String, IOContext) FilterDirectory.MakeLock(String) FilterDirectory.ClearLock(String) FilterDirectory.Dispose(Boolean) FilterDirectory.SetLockFactory(LockFactory) FilterDirectory.GetLockID() FilterDirectory.LockFactory FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() 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.Store Assembly : Lucene.Net.dll Syntax public sealed class RateLimitedDirectoryWrapper : FilterDirectory, IDisposable Constructors | Improve this Doc View Source RateLimitedDirectoryWrapper(Directory) Declaration public RateLimitedDirectoryWrapper(Directory wrapped) Parameters Type Name Description Directory wrapped Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides Directory.Copy(Directory, String, String, IOContext) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides FilterDirectory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source GetMaxWriteMBPerSec(IOContext.UsageContext) See SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public double GetMaxWriteMBPerSec(IOContext.UsageContext context) Parameters Type Name Description IOContext.UsageContext context Returns Type Description System.Double Exceptions Type Condition System.ObjectDisposedException if the Directory is already disposed | Improve this Doc View Source SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) Sets the maximum (approx) MB/sec allowed by all write IO performed by IndexOutput created with the given IOContext.UsageContext . Pass null for mbPerSec to have no limit. NOTE : For already created IndexOutput instances there is no guarantee this new rate will apply to them; it will only be guaranteed to apply for new created IndexOutput instances. NOTE : this is an optional operation and might not be respected by all Directory implementations. Currently only buffered ( FSDirectory ) Directory implementations use rate-limiting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void SetMaxWriteMBPerSec(double? mbPerSec, IOContext.UsageContext context) Parameters Type Name Description System.Nullable < System.Double > mbPerSec IOContext.UsageContext context Exceptions Type Condition System.ObjectDisposedException if the Directory is already disposed | Improve this Doc View Source SetRateLimiter(RateLimiter, IOContext.UsageContext) Sets the rate limiter to be used to limit (approx) MB/sec allowed by all IO performed with the given context ( IOContext.UsageContext ). Pass null to have no limit. Passing an instance of rate limiter compared to setting it using SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) allows to use the same limiter instance across several directories globally limiting IO across them. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void SetRateLimiter(RateLimiter mergeWriteRateLimiter, IOContext.UsageContext context) Parameters Type Name Description RateLimiter mergeWriteRateLimiter IOContext.UsageContext context Exceptions Type Condition System.ObjectDisposedException if the Directory is already disposed Implements System.IDisposable See Also SetRateLimiter(RateLimiter, IOContext.UsageContext)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimiter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimiter.html",
    "title": "Class RateLimiter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RateLimiter Abstract base class to rate limit IO. Typically implementations are shared across multiple IndexInput s or IndexOutput s (for example those involved all merging). Those IndexInput s and IndexOutput s would call Pause(Int64) whenever they want to read bytes or write bytes. Inheritance System.Object RateLimiter RateLimiter.SimpleRateLimiter 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.Store Assembly : Lucene.Net.dll Syntax public abstract class RateLimiter Properties | Improve this Doc View Source MbPerSec The current mb per second rate limit. Declaration public abstract double MbPerSec { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source Pause(Int64) Pauses, if necessary, to keep the instantaneous IO rate at or below the target. Note: the implementation is thread-safe Declaration public abstract long Pause(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.Int64 the pause time in nano seconds | Improve this Doc View Source SetMbPerSec(Double) Sets an updated mb per second rate limit. Declaration public abstract void SetMbPerSec(double mbPerSec) Parameters Type Name Description System.Double mbPerSec"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimiter.SimpleRateLimiter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimiter.SimpleRateLimiter.html",
    "title": "Class RateLimiter.SimpleRateLimiter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RateLimiter.SimpleRateLimiter Simple class to rate limit IO. Inheritance System.Object RateLimiter RateLimiter.SimpleRateLimiter 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.Store Assembly : Lucene.Net.dll Syntax public class SimpleRateLimiter : RateLimiter Constructors | Improve this Doc View Source SimpleRateLimiter(Double) mbPerSec is the MB/sec max IO rate Declaration public SimpleRateLimiter(double mbPerSec) Parameters Type Name Description System.Double mbPerSec Properties | Improve this Doc View Source MbPerSec The current mb per second rate limit. Declaration public override double MbPerSec { get; } Property Value Type Description System.Double Overrides RateLimiter.MbPerSec Methods | Improve this Doc View Source Pause(Int64) Pauses, if necessary, to keep the instantaneous IO rate at or below the target. NOTE: multiple threads may safely use this, however the implementation is not perfectly thread safe but likely in practice this is harmless (just means in some rare cases the rate might exceed the target). It's best to call this with a biggish count, not one byte at a time. Declaration public override long Pause(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.Int64 the pause time in nano seconds Overrides RateLimiter.Pause(Int64) | Improve this Doc View Source SetMbPerSec(Double) Sets an updated mb per second rate limit. Declaration public override void SetMbPerSec(double mbPerSec) Parameters Type Name Description System.Double mbPerSec Overrides RateLimiter.SetMbPerSec(Double)"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.html",
    "title": "Class SimpleFSDirectory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFSDirectory A straightforward implementation of FSDirectory using System.IO.FileStream . However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. Inheritance System.Object Directory BaseDirectory FSDirectory SimpleFSDirectory Implements System.IDisposable Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) 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.Store Assembly : Lucene.Net.dll Syntax public class SimpleFSDirectory : FSDirectory, IDisposable Constructors | Improve this Doc View Source SimpleFSDirectory(DirectoryInfo) Create a new SimpleFSDirectory for the named location and NativeFSLockFactory . Declaration public SimpleFSDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SimpleFSDirectory(DirectoryInfo, LockFactory) Create a new SimpleFSDirectory for the named location. Declaration public SimpleFSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SimpleFSDirectory(String) Create a new SimpleFSDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public SimpleFSDirectory(string path) Parameters Type Name Description System.String path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SimpleFSDirectory(String, LockFactory) Create a new SimpleFSDirectory for the named location. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public SimpleFSDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.html",
    "title": "Class SimpleFSDirectory.SimpleFSIndexInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFSDirectory.SimpleFSIndexInput Reads bytes with System.IO.FileStream.Seek(System.Int64,System.IO.SeekOrigin) followed by System.IO.FileStream.Read(System.Byte[],System.Int32,System.Int32) . Inheritance System.Object DataInput IndexInput BufferedIndexInput SimpleFSDirectory.SimpleFSIndexInput Implements System.IDisposable Inherited Members BufferedIndexInput.BUFFER_SIZE BufferedIndexInput.MERGE_BUFFER_SIZE BufferedIndexInput.m_buffer BufferedIndexInput.ReadByte() BufferedIndexInput.SetBufferSize(Int32) BufferedIndexInput.NewBuffer(Byte[]) BufferedIndexInput.BufferSize BufferedIndexInput.ReadBytes(Byte[], Int32, Int32) BufferedIndexInput.ReadBytes(Byte[], Int32, Int32, Boolean) BufferedIndexInput.ReadInt16() BufferedIndexInput.ReadInt32() BufferedIndexInput.ReadInt64() BufferedIndexInput.ReadVInt32() BufferedIndexInput.ReadVInt64() BufferedIndexInput.GetFilePointer() BufferedIndexInput.Seek(Int64) BufferedIndexInput.FlushBuffer(IndexOutput, Int64) BufferedIndexInput.GetBufferSize(IOContext) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Store Assembly : Lucene.Net.dll Syntax protected class SimpleFSIndexInput : BufferedIndexInput, IDisposable Constructors | Improve this Doc View Source SimpleFSIndexInput(String, FileStream, IOContext) Declaration public SimpleFSIndexInput(string resourceDesc, FileStream file, IOContext context) Parameters Type Name Description System.String resourceDesc System.IO.FileStream file IOContext context | Improve this Doc View Source SimpleFSIndexInput(String, FileStream, Int64, Int64, Int32) Declaration public SimpleFSIndexInput(string resourceDesc, FileStream file, long off, long length, int bufferSize) Parameters Type Name Description System.String resourceDesc System.IO.FileStream file System.Int64 off System.Int64 length System.Int32 bufferSize Fields | Improve this Doc View Source m_end end offset (start+length) Declaration protected readonly long m_end Field Value Type Description System.Int64 | Improve this Doc View Source m_file the file channel we will read from Declaration protected readonly FileStream m_file Field Value Type Description System.IO.FileStream | Improve this Doc View Source m_off start offset: non-zero in the slice case Declaration protected readonly long m_off Field Value Type Description System.Int64 Properties | Improve this Doc View Source IsClone is this instance a clone and hence does not own the file to close it Declaration public bool IsClone { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsFDValid Declaration public virtual bool IsFDValid { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides BufferedIndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) IndexInput methods Declaration protected override void ReadInternal(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides BufferedIndexInput.ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long position) Parameters Type Name Description System.Int64 position Overrides BufferedIndexInput.SeekInternal(Int64) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSLockFactory.html",
    "title": "Class SimpleFSLockFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SimpleFSLockFactory Implements LockFactory using System.IO.File.WriteAllText(System.String,System.String,System.Text.Encoding) (writes the file with UTF8 encoding and no byte order mark). Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change to all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory SimpleFSLockFactory Inherited Members FSLockFactory.m_lockDir FSLockFactory.SetLockDir(DirectoryInfo) FSLockFactory.LockDir FSLockFactory.ToString() LockFactory.m_lockPrefix LockFactory.LockPrefix 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.Store Assembly : Lucene.Net.dll Syntax public class SimpleFSLockFactory : FSLockFactory Constructors | Improve this Doc View Source SimpleFSLockFactory() Create a SimpleFSLockFactory instance, with null (unset) lock directory. When you pass this factory to a FSDirectory subclass, the lock directory is automatically set to the directory itself. Be sure to create one instance for each directory your create! Declaration public SimpleFSLockFactory() | Improve this Doc View Source SimpleFSLockFactory(DirectoryInfo) Instantiate using the provided directory (as a System.IO.DirectoryInfo instance). Declaration public SimpleFSLockFactory(DirectoryInfo lockDir) Parameters Type Name Description System.IO.DirectoryInfo lockDir where lock files should be created. | Improve this Doc View Source SimpleFSLockFactory(String) Instantiate using the provided directory name ( System.String ). Declaration public SimpleFSLockFactory(string lockDirName) Parameters Type Name Description System.String lockDirName where lock files should be created. Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.SingleInstanceLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SingleInstanceLockFactory.html",
    "title": "Class SingleInstanceLockFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SingleInstanceLockFactory Implements LockFactory for a single in-process instance, meaning all locking will take place through this one instance. Only use this LockFactory when you are certain all IndexReader s and IndexWriter s for a given index are running against a single shared in-process Directory instance. This is currently the default locking for RAMDirectory . Inheritance System.Object LockFactory SingleInstanceLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix 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.Store Assembly : Lucene.Net.dll Syntax public class SingleInstanceLockFactory : LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.TrackingDirectoryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.TrackingDirectoryWrapper.html",
    "title": "Class TrackingDirectoryWrapper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TrackingDirectoryWrapper A delegating Directory that records which files were written to and deleted. Inheritance System.Object Directory FilterDirectory TrackingDirectoryWrapper Implements System.IDisposable Inherited Members FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ListAll() FilterDirectory.FileExists(String) FilterDirectory.FileLength(String) FilterDirectory.Sync(ICollection<String>) FilterDirectory.OpenInput(String, IOContext) FilterDirectory.MakeLock(String) FilterDirectory.ClearLock(String) FilterDirectory.Dispose(Boolean) FilterDirectory.SetLockFactory(LockFactory) FilterDirectory.GetLockID() FilterDirectory.LockFactory FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() 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.Store Assembly : Lucene.Net.dll Syntax public sealed class TrackingDirectoryWrapper : FilterDirectory, IDisposable Constructors | Improve this Doc View Source TrackingDirectoryWrapper(Directory) Declaration public TrackingDirectoryWrapper(Directory in) Parameters Type Name Description Directory in Properties | Improve this Doc View Source CreatedFiles Declaration public ISet<string> CreatedFiles { get; } Property Value Type Description System.Collections.Generic.ISet < System.String > Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides Directory.Copy(Directory, String, String, IOContext) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides FilterDirectory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides FilterDirectory.DeleteFile(String) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.VerifyingLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.VerifyingLockFactory.html",
    "title": "Class VerifyingLockFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VerifyingLockFactory A LockFactory that wraps another LockFactory and verifies that each lock obtain/release is \"correct\" (never results in two processes holding the lock at the same time). It does this by contacting an external server ( LockVerifyServer ) to assert that at most one process holds the lock at a time. To use this, you should also run LockVerifyServer on the host & port matching what you pass to the constructor. Inheritance System.Object LockFactory VerifyingLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix 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.Store Assembly : Lucene.Net.dll Syntax public class VerifyingLockFactory : LockFactory Constructors | Improve this Doc View Source VerifyingLockFactory(LockFactory, Stream) Creates a new VerifyingLockFactory instance. Declaration public VerifyingLockFactory(LockFactory lf, Stream stream) Parameters Type Name Description LockFactory lf the LockFactory that we are testing System.IO.Stream stream the socket's stream input/output to LockVerifyServer Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockVerifyServer LockStressTest"
  },
  "api/Lucene.Net/Lucene.Net.Util.AlreadySetException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AlreadySetException.html",
    "title": "Class AlreadySetException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AlreadySetException Thrown when Set(T) is called more than once. Inheritance System.Object System.Exception System.SystemException System.InvalidOperationException AlreadySetException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class AlreadySetException : InvalidOperationException, ISerializable Constructors | Improve this Doc View Source AlreadySetException() Initializes a new instance of AlreadySetException . Declaration public AlreadySetException() Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ArrayUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ArrayUtil.html",
    "title": "Class ArrayUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ArrayUtil Methods for manipulating arrays. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ArrayUtil 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.Util Assembly : Lucene.Net.dll Syntax public sealed class ArrayUtil Fields | Improve this Doc View Source MAX_ARRAY_LENGTH Maximum length for an array; we set this to \"a bit\" below System.Int32.MaxValue because the exact max allowed byte[] is JVM dependent, so we want to avoid a case where a large value worked during indexing on one JVM but failed later at search time with a different JVM. Declaration public static readonly int MAX_ARRAY_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Byte[], Int32, Byte[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(byte[] left, int offsetLeft, byte[] right, int offsetRight, int length) Parameters Type Name Description System.Byte [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Byte [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Lucene.Net.Support.Arrays.Equals``1(``0[],``0[]) | Improve this Doc View Source Equals(Char[], Int32, Char[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(char[] left, int offsetLeft, char[] right, int offsetRight, int length) Parameters Type Name Description System.Char [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Char [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Lucene.Net.Support.Arrays.Equals``1(``0[],``0[]) | Improve this Doc View Source Equals(Int32[], Int32, Int32[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(int[] left, int offsetLeft, int[] right, int offsetRight, int length) Parameters Type Name Description System.Int32 [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Int32 [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Lucene.Net.Support.Arrays.Equals``1(``0[],``0[]) | Improve this Doc View Source GetHashCode(Byte[], Int32, Int32) Returns hash of bytes in range start (inclusive) to end (inclusive) Declaration public static int GetHashCode(byte[] array, int start, int end) Parameters Type Name Description System.Byte [] array System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source GetHashCode(Char[], Int32, Int32) Returns hash of chars in range start (inclusive) to end (inclusive) Declaration public static int GetHashCode(char[] array, int start, int end) Parameters Type Name Description System.Char [] array System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source GetNaturalComparer<T>() Get the natural System.Collections.Generic.IComparer<T> for the provided object class. The comparer returned depends on the argument: If the type is System.String , the comparer returned uses the System.String.CompareOrdinal(System.String,System.String) to make the comparison to ensure that the current culture doesn't affect the results. This is the default string comparison used in Java, and what Lucene's design depends on. If the type implements System.IComparable<T> , the comparer uses System.IComparable<T>.CompareTo(T) for the comparison. This allows the use of types with custom comparison schemes. If neither of the above conditions are true, will default to System.Collections.Generic.Comparer`1.Default . NOTE: This was naturalComparer() in Lucene Declaration public static IComparer<T> GetNaturalComparer<T>() Returns Type Description System.Collections.Generic.IComparer <T> Type Parameters Name Description T | Improve this Doc View Source GetShrinkSize(Int32, Int32, Int32) Declaration public static int GetShrinkSize(int currentSize, int targetSize, int bytesPerElement) Parameters Type Name Description System.Int32 currentSize System.Int32 targetSize System.Int32 bytesPerElement Returns Type Description System.Int32 | Improve this Doc View Source Grow(Boolean[]) Declaration public static bool[] Grow(bool[] array) Parameters Type Name Description System.Boolean [] array Returns Type Description System.Boolean [] | Improve this Doc View Source Grow(Boolean[], Int32) Declaration public static bool[] Grow(bool[] array, int minSize) Parameters Type Name Description System.Boolean [] array System.Int32 minSize Returns Type Description System.Boolean [] | Improve this Doc View Source Grow(Byte[]) Declaration public static byte[] Grow(byte[] array) Parameters Type Name Description System.Byte [] array Returns Type Description System.Byte [] | Improve this Doc View Source Grow(Byte[], Int32) Declaration public static byte[] Grow(byte[] array, int minSize) Parameters Type Name Description System.Byte [] array System.Int32 minSize Returns Type Description System.Byte [] | Improve this Doc View Source Grow(Char[]) Declaration public static char[] Grow(char[] array) Parameters Type Name Description System.Char [] array Returns Type Description System.Char [] | Improve this Doc View Source Grow(Char[], Int32) Declaration public static char[] Grow(char[] array, int minSize) Parameters Type Name Description System.Char [] array System.Int32 minSize Returns Type Description System.Char [] | Improve this Doc View Source Grow(Double[]) Declaration public static double[] Grow(double[] array) Parameters Type Name Description System.Double [] array Returns Type Description System.Double [] | Improve this Doc View Source Grow(Double[], Int32) Declaration public static double[] Grow(double[] array, int minSize) Parameters Type Name Description System.Double [] array System.Int32 minSize Returns Type Description System.Double [] | Improve this Doc View Source Grow(Int16[]) Declaration public static short[] Grow(short[] array) Parameters Type Name Description System.Int16 [] array Returns Type Description System.Int16 [] | Improve this Doc View Source Grow(Int16[], Int32) Declaration public static short[] Grow(short[] array, int minSize) Parameters Type Name Description System.Int16 [] array System.Int32 minSize Returns Type Description System.Int16 [] | Improve this Doc View Source Grow(Int32[]) Declaration public static int[] Grow(int[] array) Parameters Type Name Description System.Int32 [] array Returns Type Description System.Int32 [] | Improve this Doc View Source Grow(Int32[], Int32) Declaration public static int[] Grow(int[] array, int minSize) Parameters Type Name Description System.Int32 [] array System.Int32 minSize Returns Type Description System.Int32 [] | Improve this Doc View Source Grow(Int32[][]) Declaration [CLSCompliant(false)] public static int[][] Grow(int[][] array) Parameters Type Name Description System.Int32 [][] array Returns Type Description System.Int32 [][] | Improve this Doc View Source Grow(Int32[][], Int32) Declaration [CLSCompliant(false)] public static int[][] Grow(int[][] array, int minSize) Parameters Type Name Description System.Int32 [][] array System.Int32 minSize Returns Type Description System.Int32 [][] | Improve this Doc View Source Grow(Int64[]) Declaration public static long[] Grow(long[] array) Parameters Type Name Description System.Int64 [] array Returns Type Description System.Int64 [] | Improve this Doc View Source Grow(Int64[], Int32) Declaration public static long[] Grow(long[] array, int minSize) Parameters Type Name Description System.Int64 [] array System.Int32 minSize Returns Type Description System.Int64 [] | Improve this Doc View Source Grow(SByte[], Int32) Declaration [CLSCompliant(false)] public static sbyte[] Grow(sbyte[] array, int minSize) Parameters Type Name Description System.SByte [] array System.Int32 minSize Returns Type Description System.SByte [] | Improve this Doc View Source Grow(Single[]) Declaration public static float[] Grow(float[] array) Parameters Type Name Description System.Single [] array Returns Type Description System.Single [] | Improve this Doc View Source Grow(Single[], Int32) Declaration public static float[] Grow(float[] array, int minSize) Parameters Type Name Description System.Single [] array System.Int32 minSize Returns Type Description System.Single [] | Improve this Doc View Source Grow(Single[][]) Declaration [CLSCompliant(false)] public static float[][] Grow(float[][] array) Parameters Type Name Description System.Single [][] array Returns Type Description System.Single [][] | Improve this Doc View Source Grow(Single[][], Int32) Declaration [CLSCompliant(false)] public static float[][] Grow(float[][] array, int minSize) Parameters Type Name Description System.Single [][] array System.Int32 minSize Returns Type Description System.Single [][] | Improve this Doc View Source IntroSort<T>(T[]) Sorts the given array in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a) Parameters Type Name Description T[] a Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], IComparer<T>) Sorts the given array using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, IComparer<T> comp) Parameters Type Name Description T[] a System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], Int32, Int32) Sorts the given array slice in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, int fromIndex, int toIndex) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], Int32, Int32, IComparer<T>) Sorts the given array slice using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, int fromIndex, int toIndex, IComparer<T> comp) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source Oversize(Int32, Int32) Returns an array size >= minTargetSize , generally over-allocating exponentially to achieve amortized linear-time cost as the array grows. NOTE: this was originally borrowed from Python 2.4.2 listobject.c sources (attribution in LICENSE.txt), but has now been substantially changed based on discussions from java-dev thread with subject \"Dynamic array reallocation algorithms\", started on Jan 12 2010. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int Oversize(int minTargetSize, int bytesPerElement) Parameters Type Name Description System.Int32 minTargetSize Minimum required value to be returned. System.Int32 bytesPerElement Bytes used by each element of the array. See constants in RamUsageEstimator . Returns Type Description System.Int32 | Improve this Doc View Source ParseInt32(Char[]) Parses the string argument as if it was an System.Int32 value and returns the result. Throws System.FormatException if the string does not represent an int quantity. NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars) Parameters Type Name Description System.Char [] chars A string representation of an int quantity. Returns Type Description System.Int32 The value represented by the argument Exceptions Type Condition System.FormatException If the argument could not be parsed as an int quantity. | Improve this Doc View Source ParseInt32(Char[], Int32, Int32) Parses a char array into an System.Int32 . NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars, int offset, int len) Parameters Type Name Description System.Char [] chars The character array System.Int32 offset The offset into the array System.Int32 len The length Returns Type Description System.Int32 the System.Int32 Exceptions Type Condition System.FormatException If it can't parse | Improve this Doc View Source ParseInt32(Char[], Int32, Int32, Int32) Parses the string argument as if it was an System.Int32 value and returns the result. Throws System.FormatException if the string does not represent an System.Int32 quantity. The second argument specifies the radix to use when parsing the value. NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars, int offset, int len, int radix) Parameters Type Name Description System.Char [] chars A string representation of an int quantity. System.Int32 offset System.Int32 len System.Int32 radix The base to use for conversion. Returns Type Description System.Int32 The value represented by the argument Exceptions Type Condition System.FormatException If the argument could not be parsed as an int quantity. | Improve this Doc View Source Shrink(Boolean[], Int32) Declaration public static bool[] Shrink(bool[] array, int targetSize) Parameters Type Name Description System.Boolean [] array System.Int32 targetSize Returns Type Description System.Boolean [] | Improve this Doc View Source Shrink(Byte[], Int32) Declaration public static byte[] Shrink(byte[] array, int targetSize) Parameters Type Name Description System.Byte [] array System.Int32 targetSize Returns Type Description System.Byte [] | Improve this Doc View Source Shrink(Char[], Int32) Declaration public static char[] Shrink(char[] array, int targetSize) Parameters Type Name Description System.Char [] array System.Int32 targetSize Returns Type Description System.Char [] | Improve this Doc View Source Shrink(Int16[], Int32) Declaration public static short[] Shrink(short[] array, int targetSize) Parameters Type Name Description System.Int16 [] array System.Int32 targetSize Returns Type Description System.Int16 [] | Improve this Doc View Source Shrink(Int32[], Int32) Declaration public static int[] Shrink(int[] array, int targetSize) Parameters Type Name Description System.Int32 [] array System.Int32 targetSize Returns Type Description System.Int32 [] | Improve this Doc View Source Shrink(Int32[][], Int32) Declaration [CLSCompliant(false)] public static int[][] Shrink(int[][] array, int targetSize) Parameters Type Name Description System.Int32 [][] array System.Int32 targetSize Returns Type Description System.Int32 [][] | Improve this Doc View Source Shrink(Int64[], Int32) Declaration public static long[] Shrink(long[] array, int targetSize) Parameters Type Name Description System.Int64 [] array System.Int32 targetSize Returns Type Description System.Int64 [] | Improve this Doc View Source Shrink(Single[][], Int32) Declaration [CLSCompliant(false)] public static float[][] Shrink(float[][] array, int targetSize) Parameters Type Name Description System.Single [][] array System.Int32 targetSize Returns Type Description System.Single [][] | Improve this Doc View Source Swap<T>(T[], Int32, Int32) Swap values stored in slots i and j Declaration public static void Swap<T>(T[] arr, int i, int j) Parameters Type Name Description T[] arr System.Int32 i System.Int32 j Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[]) Sorts the given array in natural order. this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a) Parameters Type Name Description T[] a Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], IComparer<T>) Sorts the given array using the System.Collections.Generic.IComparer<T> . this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, IComparer<T> comp) Parameters Type Name Description T[] a System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], Int32, Int32) Sorts the given array slice in natural order. this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, int fromIndex, int toIndex) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], Int32, Int32, IComparer<T>) Sorts the given array slice using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, int fromIndex, int toIndex, IComparer<T> comp) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source ToInt32Array(ICollection<Nullable<Int32>>) NOTE: This was toIntArray() in Lucene Declaration public static int[] ToInt32Array(ICollection<int?> ints) Parameters Type Name Description System.Collections.Generic.ICollection < System.Nullable < System.Int32 >> ints Returns Type Description System.Int32 []"
  },
  "api/Lucene.Net/Lucene.Net.Util.Attribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Attribute.html",
    "title": "Class Attribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Attribute Base class for Attributes that can be added to a AttributeSource . Attributes are used to add data in a dynamic, yet type-safe way to a source of usually streamed objects, e. g. a TokenStream . Inheritance System.Object Attribute NumericTokenStream.NumericTermAttribute CharTermAttribute FlagsAttribute KeywordAttribute OffsetAttribute PayloadAttribute PositionIncrementAttribute PositionLengthAttribute TypeAttribute BoostAttribute FuzzyTermsEnum.LevenshteinAutomataAttribute MaxNonCompetitiveBoostAttribute Implements IAttribute 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) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Attribute : IAttribute Methods | Improve this Doc View Source Clear() Clears the values in this Attribute and resets it to its default value. If this implementation implements more than one Attribute interface it clears all. Declaration public abstract void Clear() | Improve this Doc View Source Clone() Shallow clone. Subclasses must override this if they need to clone any members deeply, Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyTo(IAttribute) Copies the values from this Attribute into the passed-in target attribute. The target implementation must support all the IAttribute s this implementation supports. Declaration public abstract void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target | Improve this Doc View Source ReflectAsString(Boolean) This method returns the current attribute values as a string in the following format by calling the ReflectWith(IAttributeReflector) method: if prependAttClass =true: \"AttributeClass.Key=value,AttributeClass.Key=value\" if prependAttClass =false: \"key=value,key=value\" Declaration public string ReflectAsString(bool prependAttClass) Parameters Type Name Description System.Boolean prependAttClass Returns Type Description System.String See Also ReflectWith(IAttributeReflector) | Improve this Doc View Source ReflectWith(IAttributeReflector) This method is for introspection of attributes, it should simply add the key/values this attribute holds to the given IAttributeReflector . The default implementation calls Reflect(Type, String, Object) for all non-static fields from the implementing class, using the field name as key and the field value as value. The IAttribute class is also determined by Reflection. Please note that the default implementation can only handle single-Attribute implementations. Custom implementations look like this (e.g. for a combined attribute implementation): public void ReflectWith(IAttributeReflector reflector) { reflector.Reflect(typeof(ICharTermAttribute), \"term\", GetTerm()); reflector.Reflect(typeof(IPositionIncrementAttribute), \"positionIncrement\", GetPositionIncrement()); } If you implement this method, make sure that for each invocation, the same set of IAttribute interfaces and keys are passed to Reflect(Type, String, Object) in the same order, but possibly different values. So don't automatically exclude e.g. null properties! Declaration public virtual void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector See Also ReflectAsString(Boolean) | Improve this Doc View Source ToString() The default implementation of this method accesses all declared fields of this object and prints the values in the following syntax: public String ToString() { return \"start=\" + startOffset + \",end=\" + endOffset; } This method may be overridden by subclasses. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.AttributeFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.AttributeFactory.html",
    "title": "Class AttributeSource.AttributeFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AttributeSource.AttributeFactory An AttributeSource.AttributeFactory creates instances of Attribute s. Inheritance System.Object AttributeSource.AttributeFactory Token.TokenAttributeFactory 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.Util Assembly : Lucene.Net.dll Syntax public abstract class AttributeFactory Fields | Improve this Doc View Source DEFAULT_ATTRIBUTE_FACTORY This is the default factory that creates Attribute s using the System.Type of the supplied IAttribute interface by removing the I from the prefix. Declaration public static readonly AttributeSource.AttributeFactory DEFAULT_ATTRIBUTE_FACTORY Field Value Type Description AttributeSource.AttributeFactory Methods | Improve this Doc View Source CreateAttributeInstance<T>() returns an Attribute for the supplied IAttribute interface. Declaration public abstract Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.html",
    "title": "Class AttributeSource | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AttributeSource An AttributeSource contains a list of different Attribute s, and methods to add and get them. There can only be a single instance of an attribute in the same AttributeSource instance. This is ensured by passing in the actual type of the IAttribute to the AddAttribute<T>() , which then checks if an instance of that type is already present. If yes, it returns the instance, otherwise it creates a new instance and returns it. Inheritance System.Object AttributeSource TokenStream 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.Util Assembly : Lucene.Net.dll Syntax public class AttributeSource Constructors | Improve this Doc View Source AttributeSource() An AttributeSource using the default attribute factory DEFAULT_ATTRIBUTE_FACTORY . Declaration public AttributeSource() | Improve this Doc View Source AttributeSource(AttributeSource) An AttributeSource that uses the same attributes as the supplied one. Declaration public AttributeSource(AttributeSource input) Parameters Type Name Description AttributeSource input | Improve this Doc View Source AttributeSource(AttributeSource.AttributeFactory) An AttributeSource using the supplied AttributeSource.AttributeFactory for creating new IAttribute instances. Declaration public AttributeSource(AttributeSource.AttributeFactory factory) Parameters Type Name Description AttributeSource.AttributeFactory factory Properties | Improve this Doc View Source HasAttributes Returns true , if this AttributeSource has any attributes Declaration public bool HasAttributes { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddAttribute<T>() The caller must pass in an interface type that extends IAttribute . This method first checks if an instance of the corresponding class is already in this AttributeSource and returns it. Otherwise a new instance is created, added to this AttributeSource and returned. Declaration public T AddAttribute<T>() where T : IAttribute Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source AddAttributeImpl(Attribute) Expert: Adds a custom Attribute instance with one or more IAttribute interfaces. Please note: It is not guaranteed, that att is added to the AttributeSource , because the provided attributes may already exist. You should always retrieve the wanted attributes using GetAttribute<T>() after adding with this method and cast to your System.Type . The recommended way to use custom implementations is using an AttributeSource.AttributeFactory . Declaration public void AddAttributeImpl(Attribute att) Parameters Type Name Description Attribute att | Improve this Doc View Source CaptureState() Captures the state of all Attribute s. The return value can be passed to RestoreState(AttributeSource.State) to restore the state of this or another AttributeSource . Declaration public virtual AttributeSource.State CaptureState() Returns Type Description AttributeSource.State | Improve this Doc View Source ClearAttributes() Resets all Attribute s in this AttributeSource by calling Clear() on each IAttribute implementation. Declaration public void ClearAttributes() | Improve this Doc View Source CloneAttributes() Performs a clone of all Attribute instances returned in a new AttributeSource instance. This method can be used to e.g. create another TokenStream with exactly the same attributes (using AttributeSource(AttributeSource) ). You can also use it as a (non-performant) replacement for CaptureState() , if you need to look into / modify the captured state. Declaration public AttributeSource CloneAttributes() Returns Type Description AttributeSource | Improve this Doc View Source CopyTo(AttributeSource) Copies the contents of this AttributeSource to the given target AttributeSource . The given instance has to provide all IAttribute s this instance contains. The actual attribute implementations must be identical in both AttributeSource instances; ideally both AttributeSource instances should use the same AttributeSource.AttributeFactory . You can use this method as a replacement for RestoreState(AttributeSource.State) , if you use CloneAttributes() instead of CaptureState() . Declaration public void CopyTo(AttributeSource target) Parameters Type Name Description AttributeSource target | 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 GetAttribute<T>() The caller must pass in an interface type that extends IAttribute . Returns the instance of the corresponding Attribute contained in this AttributeSource Declaration public virtual T GetAttribute<T>() where T : IAttribute Returns Type Description T Type Parameters Name Description T Exceptions Type Condition System.ArgumentException if this AttributeSource does not contain the Attribute . It is recommended to always use AddAttribute<T>() even in consumers of TokenStream s, because you cannot know if a specific TokenStream really uses a specific Attribute . AddAttribute<T>() will automatically make the attribute available. If you want to only use the attribute, if it is available (to optimize consuming), use HasAttribute<T>() . | Improve this Doc View Source GetAttributeClassesEnumerator() Returns a new iterator that iterates the attribute classes in the same order they were added in. Declaration public IEnumerator<Type> GetAttributeClassesEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Type > | Improve this Doc View Source GetAttributeFactory() Returns the used AttributeSource.AttributeFactory . Declaration public AttributeSource.AttributeFactory GetAttributeFactory() Returns Type Description AttributeSource.AttributeFactory | Improve this Doc View Source GetAttributeImplsEnumerator() Returns a new iterator that iterates all unique IAttribute implementations. This iterator may contain less entries than GetAttributeClassesEnumerator() , if one instance implements more than one IAttribute interface. Declaration public IEnumerator<Attribute> GetAttributeImplsEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Attribute > | 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 HasAttribute<T>() The caller must pass in an interface type that extends IAttribute . Returns true , if this AttributeSource contains the corrsponding Attribute . Declaration public bool HasAttribute<T>() where T : IAttribute Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source ReflectAsString(Boolean) This method returns the current attribute values as a string in the following format by calling the ReflectWith(IAttributeReflector) method: if prependAttClass =true: \"AttributeClass.Key=value,AttributeClass.Key=value\" if prependAttClass =false: \"key=value,key=value\" Declaration public string ReflectAsString(bool prependAttClass) Parameters Type Name Description System.Boolean prependAttClass Returns Type Description System.String See Also ReflectWith(IAttributeReflector) | Improve this Doc View Source ReflectWith(IAttributeReflector) This method is for introspection of attributes, it should simply add the key/values this AttributeSource holds to the given IAttributeReflector . This method iterates over all IAttribute implementations and calls the corresponding ReflectWith(IAttributeReflector) method. Declaration public void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector See Also ReflectWith ( IAttributeReflector ) | Improve this Doc View Source RestoreState(AttributeSource.State) Restores this state by copying the values of all attribute implementations that this state contains into the attributes implementations of the targetStream. The targetStream must contain a corresponding instance for each argument contained in this state (e.g. it is not possible to restore the state of an AttributeSource containing a ICharTermAttribute into a AttributeSource using a Token instance as implementation). Note that this method does not affect attributes of the targetStream that are not contained in this state. In other words, if for example the targetStream contains an IOffsetAttribute , but this state doesn't, then the value of the IOffsetAttribute remains unchanged. It might be desirable to reset its value to the default, in which case the caller should first call ClearAttributes() ( TokenStream.ClearAttributes() on the targetStream. Declaration public void RestoreState(AttributeSource.State state) Parameters Type Name Description AttributeSource.State state | Improve this Doc View Source ToString() Returns a string consisting of the class's simple name, the hex representation of the identity hash code, and the current reflection of all attributes. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also ReflectAsString(Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.State.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.State.html",
    "title": "Class AttributeSource.State | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AttributeSource.State This class holds the state of an AttributeSource . Inheritance System.Object AttributeSource.State 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.Util Assembly : Lucene.Net.dll Syntax public sealed class State Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object See Also CaptureState () RestoreState ( AttributeSource.State )"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.Automaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.Automaton.html",
    "title": "Class Automaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Automaton Finite-state automaton with regular expression operations. Class invariants: An automaton is either represented explicitly (with State and Transition objects) or with a singleton string (see Singleton and ExpandSingleton() ) in case the automaton is known to accept exactly one string. (Implicitly, all states and transitions of an automaton are reachable from its initial state.) Automata are always reduced (see Reduce() ) and have no transitions to dead states (see RemoveDeadTransitions() ). If an automaton is nondeterministic, then IsDeterministic returns false (but the converse is not required). Automata provided as input to operations are generally assumed to be disjoint. If the states or transitions are manipulated manually, the RestoreInvariant() method and IsDeterministic setter should be used afterwards to restore representation invariants that are assumed by the built-in automata operations. Note: this class has internal mutable state and is not thread safe. It is the caller's responsibility to ensure any necessary synchronization if you wish to use the same Automaton from multiple threads. In general it is instead recommended to use a RunAutomaton for multithreaded matching: it is immutable, thread safe, and much faster. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Automaton 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public class Automaton Constructors | Improve this Doc View Source Automaton() Declaration public Automaton() | Improve this Doc View Source Automaton(State) Constructs a new automaton that accepts the empty language. Using this constructor, automata can be constructed manually from State and Transition objects. Declaration public Automaton(State initial) Parameters Type Name Description State initial See Also State Transition Fields | Improve this Doc View Source MINIMIZE_HOPCROFT Minimize using Hopcroft's O(n log n) algorithm. this is regarded as one of the most generally efficient algorithms that exist. Declaration public const int MINIMIZE_HOPCROFT = 2 Field Value Type Description System.Int32 See Also SetMinimization(Int32) Properties | Improve this Doc View Source Info Associates extra information with this automaton. Declaration public virtual object Info { get; set; } Property Value Type Description System.Object | Improve this Doc View Source IsDeterministic Returns deterministic flag for this automaton. Declaration public virtual bool IsDeterministic { get; set; } Property Value Type Description System.Boolean true if the automaton is definitely deterministic, false if the automaton may be nondeterministic | Improve this Doc View Source IsEmptyString See IsEmptyString(Automaton) . Declaration public virtual bool IsEmptyString { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Singleton Returns the singleton string for this automaton. An automaton that accepts exactly one string may be represented in singleton mode. In that case, this method may be used to obtain the string. Declaration public virtual string Singleton { get; } Property Value Type Description System.String String, null if this automaton is not in singleton mode. Methods | Improve this Doc View Source ClearNumberedStates() Declaration public virtual void ClearNumberedStates() | Improve this Doc View Source Clone() Returns a clone of this automaton. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Complement() See Complement(Automaton) . Declaration public virtual Automaton Complement() Returns Type Description Automaton | Improve this Doc View Source Concatenate(Automaton) See Concatenate(Automaton, Automaton) . Declaration public virtual Automaton Concatenate(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Concatenate(IList<Automaton>) See Concatenate(IList<Automaton>) . Declaration public static Automaton Concatenate(IList<Automaton> l) Parameters Type Name Description System.Collections.Generic.IList < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Determinize() See Determinize(Automaton) . Declaration public virtual void Determinize() | 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 ExpandSingleton() Expands singleton representation to normal representation. Does nothing if not in singleton representation. Declaration public virtual void ExpandSingleton() | Improve this Doc View Source GetAcceptStates() Returns the set of reachable accept states. Declaration public virtual ISet<State> GetAcceptStates() Returns Type Description System.Collections.Generic.ISet < State > Set of State objects. | 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 GetInitialState() Gets initial state. Declaration public virtual State GetInitialState() Returns Type Description State state | Improve this Doc View Source GetNumberedStates() Declaration public virtual State[] GetNumberedStates() Returns Type Description State [] | Improve this Doc View Source GetNumberOfStates() Returns the number of states in this automaton. Declaration public virtual int GetNumberOfStates() Returns Type Description System.Int32 | Improve this Doc View Source GetNumberOfTransitions() Returns the number of transitions in this automaton. This number is counted as the total number of edges, where one edge may be a character interval. Declaration public virtual int GetNumberOfTransitions() Returns Type Description System.Int32 | Improve this Doc View Source GetSortedTransitions() Returns a sorted array of transitions for each state (and sets state numbers). Declaration public virtual Transition[][] GetSortedTransitions() Returns Type Description Transition [][] | Improve this Doc View Source GetStartPoints() Returns sorted array of all interval start points. Declaration public virtual int[] GetStartPoints() Returns Type Description System.Int32 [] | Improve this Doc View Source Intersection(Automaton) See Intersection(Automaton, Automaton) . Declaration public virtual Automaton Intersection(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Minimize(Automaton) See Minimize(Automaton) . Returns the automaton being given as argument. Declaration public static Automaton Minimize(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Minus(Automaton) See Minus(Automaton, Automaton) . Declaration public virtual Automaton Minus(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Optional() See Optional(Automaton) . Declaration public virtual Automaton Optional() Returns Type Description Automaton | Improve this Doc View Source Reduce() Reduces this automaton. An automaton is \"reduced\" by combining overlapping and adjacent edge intervals with same destination. Declaration public virtual void Reduce() | Improve this Doc View Source RemoveDeadTransitions() Removes transitions to dead states and calls Reduce() . (A state is \"dead\" if no accept state is reachable from it.) Declaration public virtual void RemoveDeadTransitions() | Improve this Doc View Source Repeat() See Repeat(Automaton) . Declaration public virtual Automaton Repeat() Returns Type Description Automaton | Improve this Doc View Source Repeat(Int32) See Repeat(Automaton, Int32) . Declaration public virtual Automaton Repeat(int min) Parameters Type Name Description System.Int32 min Returns Type Description Automaton | Improve this Doc View Source Repeat(Int32, Int32) See Repeat(Automaton, Int32, Int32) . Declaration public virtual Automaton Repeat(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source RestoreInvariant() Restores representation invariant. This method must be invoked before any built-in automata operation is performed if automaton states or transitions are manipulated manually. Declaration public virtual void RestoreInvariant() See Also IsDeterministic | Improve this Doc View Source SetAllowMutate(Boolean) Sets or resets allow mutate flag. If this flag is set, then all automata operations may modify automata given as input; otherwise, operations will always leave input automata languages unmodified. By default, the flag is not set. Declaration public static bool SetAllowMutate(bool flag) Parameters Type Name Description System.Boolean flag if true , the flag is set Returns Type Description System.Boolean previous value of the flag | Improve this Doc View Source SetMinimization(Int32) Selects minimization algorithm (default: MINIMIZE_HOPCROFT ). Declaration public static void SetMinimization(int algorithm) Parameters Type Name Description System.Int32 algorithm minimization algorithm | Improve this Doc View Source SetMinimizeAlways(Boolean) Sets or resets minimize always flag. If this flag is set, then Minimize(Automaton) will automatically be invoked after all operations that otherwise may produce non-minimal automata. By default, the flag is not set. Declaration public static void SetMinimizeAlways(bool flag) Parameters Type Name Description System.Boolean flag if true , the flag is set | Improve this Doc View Source SetNumberedStates(State[]) Declaration public virtual void SetNumberedStates(State[] states) Parameters Type Name Description State [] states | Improve this Doc View Source SetNumberedStates(State[], Int32) Declaration public virtual void SetNumberedStates(State[] states, int count) Parameters Type Name Description State [] states System.Int32 count | Improve this Doc View Source SubsetOf(Automaton) See SubsetOf(Automaton, Automaton) . Declaration public virtual bool SubsetOf(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source ToDot() Returns Graphviz Dot representation of this automaton. Declaration public virtual string ToDot() Returns Type Description System.String | Improve this Doc View Source ToString() Returns a string representation of this automaton. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Union(Automaton) See Union(Automaton, Automaton) . Declaration public virtual Automaton Union(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Union(ICollection<Automaton>) See Union(ICollection<Automaton>) . Declaration public static Automaton Union(ICollection<Automaton> l) Parameters Type Name Description System.Collections.Generic.ICollection < Automaton > l Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicAutomata.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicAutomata.html",
    "title": "Class BasicAutomata | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicAutomata Construction of basic automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicAutomata 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public sealed class BasicAutomata Methods | Improve this Doc View Source MakeAnyChar() Returns a new (deterministic) automaton that accepts any single codepoint. Declaration public static Automaton MakeAnyChar() Returns Type Description Automaton | Improve this Doc View Source MakeAnyString() Returns a new (deterministic) automaton that accepts all strings. Declaration public static Automaton MakeAnyString() Returns Type Description Automaton | Improve this Doc View Source MakeChar(Int32) Returns a new (deterministic) automaton that accepts a single codepoint of the given value. Declaration public static Automaton MakeChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description Automaton | Improve this Doc View Source MakeCharRange(Int32, Int32) Returns a new (deterministic) automaton that accepts a single codepoint whose value is in the given interval (including both end points). Declaration public static Automaton MakeCharRange(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source MakeEmpty() Returns a new (deterministic) automaton with the empty language. Declaration public static Automaton MakeEmpty() Returns Type Description Automaton | Improve this Doc View Source MakeEmptyString() Returns a new (deterministic) automaton that accepts only the empty string. Declaration public static Automaton MakeEmptyString() Returns Type Description Automaton | Improve this Doc View Source MakeInterval(Int32, Int32, Int32) Returns a new automaton that accepts strings representing decimal non-negative integers in the given interval. Declaration public static Automaton MakeInterval(int min, int max, int digits) Parameters Type Name Description System.Int32 min Minimal value of interval. System.Int32 max Maximal value of interval (both end points are included in the interval). System.Int32 digits If > 0, use fixed number of digits (strings must be prefixed by 0's to obtain the right length) - otherwise, the number of digits is not fixed. Returns Type Description Automaton Exceptions Type Condition System.ArgumentException If min > max or if numbers in the interval cannot be expressed with the given fixed number of digits. | Improve this Doc View Source MakeString(Int32[], Int32, Int32) Declaration public static Automaton MakeString(int[] word, int offset, int length) Parameters Type Name Description System.Int32 [] word System.Int32 offset System.Int32 length Returns Type Description Automaton | Improve this Doc View Source MakeString(String) Returns a new (deterministic) automaton that accepts the single given string. Declaration public static Automaton MakeString(string s) Parameters Type Name Description System.String s Returns Type Description Automaton | Improve this Doc View Source MakeStringUnion(ICollection<BytesRef>) Returns a new (deterministic and minimal) automaton that accepts the union of the given collection of BytesRef s representing UTF-8 encoded strings. Declaration public static Automaton MakeStringUnion(ICollection<BytesRef> utf8Strings) Parameters Type Name Description System.Collections.Generic.ICollection < BytesRef > utf8Strings The input strings, UTF-8 encoded. The collection must be in sorted order. Returns Type Description Automaton An Automaton accepting all input strings. The resulting automaton is codepoint based (full unicode codepoints on transitions)."
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicOperations.html",
    "title": "Class BasicOperations | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BasicOperations Basic automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicOperations 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class BasicOperations Methods | Improve this Doc View Source AddEpsilons(Automaton, ICollection<StatePair>) Adds epsilon transitions to the given automaton. This method adds extra character interval transitions that are equivalent to the given set of epsilon transitions. Declaration public static void AddEpsilons(Automaton a, ICollection<StatePair> pairs) Parameters Type Name Description Automaton a Automaton. System.Collections.Generic.ICollection < StatePair > pairs Collection of StatePair objects representing pairs of source/destination states where epsilon transitions should be added. | Improve this Doc View Source Complement(Automaton) Returns a (deterministic) automaton that accepts the complement of the language of the given automaton. Complexity: linear in number of states (if already deterministic). Declaration public static Automaton Complement(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Concatenate(Automaton, Automaton) Returns an automaton that accepts the concatenation of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Concatenate(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Concatenate(IList<Automaton>) Returns an automaton that accepts the concatenation of the languages of the given automata. Complexity: linear in total number of states. Declaration public static Automaton Concatenate(IList<Automaton> l) Parameters Type Name Description System.Collections.Generic.IList < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Determinize(Automaton) Determinizes the given automaton. Worst case complexity: exponential in number of states. Declaration public static void Determinize(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source Intersection(Automaton, Automaton) Returns an automaton that accepts the intersection of the languages of the given automata. Never modifies the input automata languages. Complexity: quadratic in number of states. Declaration public static Automaton Intersection(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source IsEmpty(Automaton) Returns true if the given automaton accepts no strings. Declaration public static bool IsEmpty(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source IsEmptyString(Automaton) Returns true if the given automaton accepts the empty string and nothing else. Declaration public static bool IsEmptyString(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source IsTotal(Automaton) Returns true if the given automaton accepts all strings. Declaration public static bool IsTotal(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source Minus(Automaton, Automaton) Returns a (deterministic) automaton that accepts the intersection of the language of a1 and the complement of the language of a2 . As a side-effect, the automata may be determinized, if not already deterministic. Complexity: quadratic in number of states (if already deterministic). Declaration public static Automaton Minus(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Optional(Automaton) Returns an automaton that accepts the union of the empty string and the language of the given automaton. Complexity: linear in number of states. Declaration public static Automaton Optional(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton) Returns an automaton that accepts the Kleene star (zero or more concatenated repetitions) of the language of the given automaton. Never modifies the input automaton language. Complexity: linear in number of states. Declaration public static Automaton Repeat(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton, Int32) Returns an automaton that accepts min or more concatenated repetitions of the language of the given automaton. Complexity: linear in number of states and in min . Declaration public static Automaton Repeat(Automaton a, int min) Parameters Type Name Description Automaton a System.Int32 min Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton, Int32, Int32) Returns an automaton that accepts between min and max (including both) concatenated repetitions of the language of the given automaton. Complexity: linear in number of states and in min and max . Declaration public static Automaton Repeat(Automaton a, int min, int max) Parameters Type Name Description Automaton a System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source Run(Automaton, String) Returns true if the given string is accepted by the automaton. Complexity: linear in the length of the string. Note: for full performance, use the RunAutomaton class. Declaration public static bool Run(Automaton a, string s) Parameters Type Name Description Automaton a System.String s Returns Type Description System.Boolean | Improve this Doc View Source SameLanguage(Automaton, Automaton) Returns true if these two automata accept exactly the same language. This is a costly computation! Note also that a1 and a2 will be determinized as a side effect. Declaration public static bool SameLanguage(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description System.Boolean | Improve this Doc View Source SubsetOf(Automaton, Automaton) Returns true if the language of a1 is a subset of the language of a2 . As a side-effect, a2 is determinized if not already marked as deterministic. Complexity: quadratic in number of states. Declaration public static bool SubsetOf(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description System.Boolean | Improve this Doc View Source Union(Automaton, Automaton) Returns an automaton that accepts the union of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Union(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Union(ICollection<Automaton>) Returns an automaton that accepts the union of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Union(ICollection<Automaton> l) Parameters Type Name Description System.Collections.Generic.ICollection < Automaton > l Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.ByteRunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.ByteRunAutomaton.html",
    "title": "Class ByteRunAutomaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteRunAutomaton Automaton representation for matching UTF-8 byte[] . Inheritance System.Object RunAutomaton ByteRunAutomaton Inherited Members RunAutomaton.m_accept RunAutomaton.m_initial RunAutomaton.m_transitions RunAutomaton.ToString() RunAutomaton.Count RunAutomaton.IsAccept(Int32) RunAutomaton.InitialState RunAutomaton.GetCharIntervals() RunAutomaton.Step(Int32, Int32) RunAutomaton.GetHashCode() RunAutomaton.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class ByteRunAutomaton : RunAutomaton Constructors | Improve this Doc View Source ByteRunAutomaton(Automaton) Declaration public ByteRunAutomaton(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source ByteRunAutomaton(Automaton, Boolean) Expert: if utf8 is true, the input is already byte-based Declaration public ByteRunAutomaton(Automaton a, bool utf8) Parameters Type Name Description Automaton a System.Boolean utf8 Methods | Improve this Doc View Source Run(Byte[], Int32, Int32) Returns true if the given byte array is accepted by this automaton. Declaration public virtual bool Run(byte[] s, int offset, int length) Parameters Type Name Description System.Byte [] s System.Int32 offset System.Int32 length Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CharacterRunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CharacterRunAutomaton.html",
    "title": "Class CharacterRunAutomaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharacterRunAutomaton Automaton representation for matching char[] . Inheritance System.Object RunAutomaton CharacterRunAutomaton Inherited Members RunAutomaton.m_accept RunAutomaton.m_initial RunAutomaton.m_transitions RunAutomaton.ToString() RunAutomaton.Count RunAutomaton.IsAccept(Int32) RunAutomaton.InitialState RunAutomaton.GetCharIntervals() RunAutomaton.Step(Int32, Int32) RunAutomaton.GetHashCode() RunAutomaton.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class CharacterRunAutomaton : RunAutomaton Constructors | Improve this Doc View Source CharacterRunAutomaton(Automaton) Declaration public CharacterRunAutomaton(Automaton a) Parameters Type Name Description Automaton a Methods | Improve this Doc View Source Run(Char[], Int32, Int32) Returns true if the given string is accepted by this automaton. Declaration public virtual bool Run(char[] s, int offset, int length) Parameters Type Name Description System.Char [] s System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source Run(String) Returns true if the given string is accepted by this automaton. Declaration public virtual bool Run(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.AUTOMATON_TYPE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.AUTOMATON_TYPE.html",
    "title": "Enum CompiledAutomaton.AUTOMATON_TYPE | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum CompiledAutomaton.AUTOMATON_TYPE Automata are compiled into different internal forms for the most efficient execution depending upon the language they accept. Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public enum AUTOMATON_TYPE Fields Name Description ALL Automaton that accepts all possible strings. NONE Automaton that accepts no strings. NORMAL Catch-all for any other automata. PREFIX Automaton that matches all strings with a constant prefix. SINGLE Automaton that accepts only a single fixed string."
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.html",
    "title": "Class CompiledAutomaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CompiledAutomaton Immutable class holding compiled details for a given Automaton . The Automaton is deterministic, must not have dead states but is not necessarily minimal. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CompiledAutomaton 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public class CompiledAutomaton Constructors | Improve this Doc View Source CompiledAutomaton(Automaton) Declaration public CompiledAutomaton(Automaton automaton) Parameters Type Name Description Automaton automaton | Improve this Doc View Source CompiledAutomaton(Automaton, Nullable<Boolean>, Boolean) Declaration public CompiledAutomaton(Automaton automaton, bool? finite, bool simplify) Parameters Type Name Description Automaton automaton System.Nullable < System.Boolean > finite System.Boolean simplify Properties | Improve this Doc View Source CommonSuffixRef Shared common suffix accepted by the automaton. Only valid for NORMAL , and only when the automaton accepts an infinite language. Declaration public BytesRef CommonSuffixRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source Finite Indicates if the automaton accepts a finite set of strings. Null if this was not computed. Only valid for NORMAL . Declaration public bool? Finite { get; } Property Value Type Description System.Nullable < System.Boolean > | Improve this Doc View Source RunAutomaton Matcher for quickly determining if a byte[] is accepted. only valid for NORMAL . Declaration public ByteRunAutomaton RunAutomaton { get; } Property Value Type Description ByteRunAutomaton | Improve this Doc View Source SortedTransitions Two dimensional array of transitions, indexed by state number for traversal. The state numbering is consistent with RunAutomaton . Only valid for NORMAL . Declaration public Transition[][] SortedTransitions { get; } Property Value Type Description Transition [][] | Improve this Doc View Source Term For PREFIX , this is the prefix term; for SINGLE this is the singleton term. Declaration public BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source Type Declaration public CompiledAutomaton.AUTOMATON_TYPE Type { get; } Property Value Type Description CompiledAutomaton.AUTOMATON_TYPE Methods | 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 Floor(BytesRef, BytesRef) Finds largest term accepted by this Automaton, that's <= the provided input term. The result is placed in output; it's fine for output and input to point to the same BytesRef . The returned result is either the provided output, or null if there is no floor term (ie, the provided input term is before the first term accepted by this Automaton ). Declaration public virtual BytesRef Floor(BytesRef input, BytesRef output) Parameters Type Name Description BytesRef input BytesRef output Returns Type Description BytesRef | 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 GetTermsEnum(Terms) Declaration public virtual TermsEnum GetTermsEnum(Terms terms) Parameters Type Name Description Terms terms Returns Type Description TermsEnum | Improve this Doc View Source ToDot() Declaration public virtual string ToDot() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.html",
    "title": "Namespace Lucene.Net.Util.Automaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Automaton <!-- dk.brics.automaton Copyright (c) 2001-2009 Anders Moeller All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> Finite-state automaton for regular expressions. This package contains a full DFA/NFA implementation with Unicode alphabet and support for all standard (and a number of non-standard) regular expression operations. The most commonly used functionality is located in the classes Automaton and RegExp . For more information, go to the package home page at http://www.brics.dk/automaton/ . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Classes Automaton Finite-state automaton with regular expression operations. Class invariants: An automaton is either represented explicitly (with State and Transition objects) or with a singleton string (see Singleton and ExpandSingleton() ) in case the automaton is known to accept exactly one string. (Implicitly, all states and transitions of an automaton are reachable from its initial state.) Automata are always reduced (see Reduce() ) and have no transitions to dead states (see RemoveDeadTransitions() ). If an automaton is nondeterministic, then IsDeterministic returns false (but the converse is not required). Automata provided as input to operations are generally assumed to be disjoint. If the states or transitions are manipulated manually, the RestoreInvariant() method and IsDeterministic setter should be used afterwards to restore representation invariants that are assumed by the built-in automata operations. Note: this class has internal mutable state and is not thread safe. It is the caller's responsibility to ensure any necessary synchronization if you wish to use the same Automaton from multiple threads. In general it is instead recommended to use a RunAutomaton for multithreaded matching: it is immutable, thread safe, and much faster. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicAutomata Construction of basic automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicOperations Basic automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteRunAutomaton Automaton representation for matching UTF-8 byte[] . CharacterRunAutomaton Automaton representation for matching char[] . CompiledAutomaton Immutable class holding compiled details for a given Automaton . The Automaton is deterministic, must not have dead states but is not necessarily minimal. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LevenshteinAutomata Class to construct DFAs that match a word within some edit distance. Implements the algorithm described in: Schulz and Mihov: Fast String Correction with Levenshtein Automata This is a Lucene.NET EXPERIMENTAL API, use at your own risk MinimizationOperations Operations for minimizing automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk RegExp Regular Expression extension to Automaton . Regular expressions are built from the following abstract syntax: regexp ::= unionexp | unionexp ::= interexp | unionexp (union) | interexp interexp ::= concatexp & interexp (intersection) [OPTIONAL] | concatexp concatexp ::= repeatexp concatexp (concatenation) | repeatexp repeatexp ::= repeatexp ? (zero or one occurrence) | repeatexp * (zero or more occurrences) | repeatexp + (one or more occurrences) | repeatexp { n } ( n occurrences) | repeatexp { n ,} ( n or more occurrences) | repeatexp { n , m } ( n to m occurrences, including both) | complexp complexp ::= ~ complexp (complement) [OPTIONAL] | charclassexp charclassexp ::= [ charclasses ] (character class) | [^ charclasses ] (negated character class) | simpleexp charclasses ::= charclass charclasses | charclass charclass ::= charexp - charexp (character range, including end-points) | charexp simpleexp ::= charexp | . (any single character) | # (the empty language) [OPTIONAL] | @ (any string) [OPTIONAL] | \" <Unicode string without double-quotes> \" (a string) | ( ) (the empty string) | ( unionexp ) (precedence override) | < <identifier> > (named automaton) [OPTIONAL] | < n - m > (numerical interval) [OPTIONAL] charexp ::=<Unicode character>(a single non-reserved character) | </strong> <Unicode character> (a single character) The productions marked [OPTIONAL] are only allowed if specified by the syntax flags passed to the RegExp constructor. The reserved characters used in the (enabled) syntax must be escaped with backslash ( </code>) or double-quotes ( \"...\" ). (In contrast to other regexp syntaxes, this is required also in character classes.) Be aware that dash ( - ) has a special meaning in charclass expressions. An identifier is a string not containing right angle bracket ( > ) or dash ( - ). Numerical intervals are specified by non-negative decimal integers and include both end points, and if n and m have the same number of digits, then the conforming strings must have that length (i.e. prefixed by 0's). This is a Lucene.NET EXPERIMENTAL API, use at your own risk RunAutomaton Finite-state automaton with fast run operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpecialOperations Special automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk State Automaton state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StatePair Pair of states. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Transition Automaton transition. A transition, which belongs to a source state, consists of a Unicode codepoint interval and a destination state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk UTF32ToUTF8 Converts UTF-32 automata to the equivalent UTF-8 representation. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IAutomatonProvider Automaton provider for RegExp . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums CompiledAutomaton.AUTOMATON_TYPE Automata are compiled into different internal forms for the most efficient execution depending upon the language they accept. RegExpSyntax"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.IAutomatonProvider.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.IAutomatonProvider.html",
    "title": "Interface IAutomatonProvider | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAutomatonProvider Automaton provider for RegExp . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public interface IAutomatonProvider Methods | Improve this Doc View Source GetAutomaton(String) Returns automaton of the given name. Declaration Automaton GetAutomaton(string name) Parameters Type Name Description System.String name Automaton name. Returns Type Description Automaton Automaton. Exceptions Type Condition System.IO.IOException If errors occur. See Also ToAutomaton(IAutomatonProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.LevenshteinAutomata.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.LevenshteinAutomata.html",
    "title": "Class LevenshteinAutomata | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LevenshteinAutomata Class to construct DFAs that match a word within some edit distance. Implements the algorithm described in: Schulz and Mihov: Fast String Correction with Levenshtein Automata This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LevenshteinAutomata 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public class LevenshteinAutomata Constructors | Improve this Doc View Source LevenshteinAutomata(Int32[], Int32, Boolean) Expert: specify a custom maximum possible symbol (alphaMax); default is J2N.Character.MaxCodePoint . Declaration public LevenshteinAutomata(int[] word, int alphaMax, bool withTranspositions) Parameters Type Name Description System.Int32 [] word System.Int32 alphaMax System.Boolean withTranspositions | Improve this Doc View Source LevenshteinAutomata(String, Boolean) Create a new LevenshteinAutomata for some input string. Optionally count transpositions as a primitive edit. Declaration public LevenshteinAutomata(string input, bool withTranspositions) Parameters Type Name Description System.String input System.Boolean withTranspositions Fields | Improve this Doc View Source MAXIMUM_SUPPORTED_DISTANCE This is a Lucene.NET INTERNAL API, use at your own risk Declaration public const int MAXIMUM_SUPPORTED_DISTANCE = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source ToAutomaton(Int32) Compute a DFA that accepts all strings within an edit distance of n . All automata have the following properties: They are deterministic (DFA). There are no transitions to dead states. They are not minimal (some transitions could be combined). Declaration public virtual Automaton ToAutomaton(int n) Parameters Type Name Description System.Int32 n Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.MinimizationOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.MinimizationOperations.html",
    "title": "Class MinimizationOperations | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MinimizationOperations Operations for minimizing automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MinimizationOperations 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class MinimizationOperations Methods | Improve this Doc View Source Minimize(Automaton) Minimizes (and determinizes if not already deterministic) the given automaton. Declaration public static void Minimize(Automaton a) Parameters Type Name Description Automaton a See Also SetMinimization(Int32) | Improve this Doc View Source MinimizeHopcroft(Automaton) Minimizes the given automaton using Hopcroft's algorithm. Declaration public static void MinimizeHopcroft(Automaton a) Parameters Type Name Description Automaton a"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExp.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExp.html",
    "title": "Class RegExp | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RegExp Regular Expression extension to Automaton . Regular expressions are built from the following abstract syntax: regexp ::= unionexp | unionexp ::= interexp | unionexp (union) | interexp interexp ::= concatexp & interexp (intersection) [OPTIONAL] | concatexp concatexp ::= repeatexp concatexp (concatenation) | repeatexp repeatexp ::= repeatexp ? (zero or one occurrence) | repeatexp * (zero or more occurrences) | repeatexp + (one or more occurrences) | repeatexp { n } ( n occurrences) | repeatexp { n ,} ( n or more occurrences) | repeatexp { n , m } ( n to m occurrences, including both) | complexp complexp ::= ~ complexp (complement) [OPTIONAL] | charclassexp charclassexp ::= [ charclasses ] (character class) | [^ charclasses ] (negated character class) | simpleexp charclasses ::= charclass charclasses | charclass charclass ::= charexp - charexp (character range, including end-points) | charexp simpleexp ::= charexp | . (any single character) | # (the empty language) [OPTIONAL] | @ (any string) [OPTIONAL] | \" <Unicode string without double-quotes> \" (a string) | ( ) (the empty string) | ( unionexp ) (precedence override) | < <identifier> > (named automaton) [OPTIONAL] | < n - m > (numerical interval) [OPTIONAL] charexp ::=<Unicode character>(a single non-reserved character) | </strong> <Unicode character> (a single character) The productions marked [OPTIONAL] are only allowed if specified by the syntax flags passed to the RegExp constructor. The reserved characters used in the (enabled) syntax must be escaped with backslash ( </code>) or double-quotes ( \"...\" ). (In contrast to other regexp syntaxes, this is required also in character classes.) Be aware that dash ( - ) has a special meaning in charclass expressions. An identifier is a string not containing right angle bracket ( > ) or dash ( - ). Numerical intervals are specified by non-negative decimal integers and include both end points, and if n and m have the same number of digits, then the conforming strings must have that length (i.e. prefixed by 0's). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object RegExp 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) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class RegExp Constructors | Improve this Doc View Source RegExp(String) Constructs new RegExp from a string. Same as RegExp(s, RegExpSyntax.ALL) . Declaration public RegExp(string s) Parameters Type Name Description System.String s Regexp string. Exceptions Type Condition System.ArgumentException If an error occured while parsing the regular expression. | Improve this Doc View Source RegExp(String, RegExpSyntax) Constructs new RegExp from a string. Declaration public RegExp(string s, RegExpSyntax syntax_flags) Parameters Type Name Description System.String s Regexp string. RegExpSyntax syntax_flags Boolean 'or' of optional RegExpSyntax constructs to be enabled. Exceptions Type Condition System.ArgumentException If an error occured while parsing the regular expression Methods | Improve this Doc View Source GetIdentifiers() Returns set of automaton identifiers that occur in this regular expression. Declaration public virtual ISet<string> GetIdentifiers() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source SetAllowMutate(Boolean) Sets or resets allow mutate flag. If this flag is set, then automata construction uses mutable automata, which is slightly faster but not thread safe. By default, the flag is not set. Declaration public virtual bool SetAllowMutate(bool flag) Parameters Type Name Description System.Boolean flag If true , the flag is set Returns Type Description System.Boolean Previous value of the flag. | Improve this Doc View Source ToAutomaton() Constructs new Automaton from this RegExp . Same as ToAutomaton(null) (empty automaton map). Declaration public virtual Automaton ToAutomaton() Returns Type Description Automaton | Improve this Doc View Source ToAutomaton(IAutomatonProvider) Constructs new Automaton from this RegExp . The constructed automaton is minimal and deterministic and has no transitions to dead states. Declaration public virtual Automaton ToAutomaton(IAutomatonProvider automaton_provider) Parameters Type Name Description IAutomatonProvider automaton_provider Provider of automata for named identifiers. Returns Type Description Automaton Exceptions Type Condition System.ArgumentException If this regular expression uses a named identifier that is not available from the automaton provider. | Improve this Doc View Source ToAutomaton(IDictionary<String, Automaton>) Constructs new Automaton from this RegExp . The constructed automaton is minimal and deterministic and has no transitions to dead states. Declaration public virtual Automaton ToAutomaton(IDictionary<string, Automaton> automata) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , Automaton > automata A map from automaton identifiers to automata (of type Automaton ). Returns Type Description Automaton Exceptions Type Condition System.ArgumentException If this regular expression uses a named identifier that does not occur in the automaton map. | Improve this Doc View Source ToString() Constructs string from parsed regular expression. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExpSyntax.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExpSyntax.html",
    "title": "Enum RegExpSyntax | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum RegExpSyntax Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax [Flags] public enum RegExpSyntax Fields Name Description ALL Syntax flag, enables all optional regexp syntax. ANYSTRING Syntax flag, enables anystring ( @ ). AUTOMATON Syntax flag, enables named automata ( < identifier > ). COMPLEMENT Syntax flag, enables complement ( ~ ). EMPTY Syntax flag, enables empty language ( # ). INTERSECTION Syntax flag, enables intersection ( & ). INTERVAL Syntax flag, enables numerical intervals ( < n - m > ). NONE Syntax flag, enables no optional regexp syntax."
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RunAutomaton.html",
    "title": "Class RunAutomaton | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RunAutomaton Finite-state automaton with fast run operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object RunAutomaton ByteRunAutomaton CharacterRunAutomaton 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public abstract class RunAutomaton Constructors | Improve this Doc View Source RunAutomaton(Automaton, Int32, Boolean) Constructs a new RunAutomaton from a deterministic Automaton . Declaration public RunAutomaton(Automaton a, int maxInterval, bool tableize) Parameters Type Name Description Automaton a An automaton. System.Int32 maxInterval System.Boolean tableize Fields | Improve this Doc View Source m_accept Declaration protected readonly bool[] m_accept Field Value Type Description System.Boolean [] | Improve this Doc View Source m_initial Declaration protected readonly int m_initial Field Value Type Description System.Int32 | Improve this Doc View Source m_transitions Declaration protected readonly int[] m_transitions Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Count Returns number of states in automaton. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source InitialState Returns initial state. Declaration public int InitialState { get; } Property Value Type Description System.Int32 Methods | 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 GetCharIntervals() Returns array of codepoint class interval start points. The array should not be modified by the caller. Declaration public int[] GetCharIntervals() Returns Type Description System.Int32 [] | 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 IsAccept(Int32) Returns acceptance status for given state. Declaration public bool IsAccept(int state) Parameters Type Name Description System.Int32 state Returns Type Description System.Boolean | Improve this Doc View Source Step(Int32, Int32) Returns the state obtained by reading the given char from the given state. Returns -1 if not obtaining any such state. (If the original Automaton had no dead states, -1 is returned here if and only if a dead state is entered in an equivalent automaton with a total transition function.) Declaration public int Step(int state, int c) Parameters Type Name Description System.Int32 state System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source ToString() Returns a string representation of this automaton. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.SpecialOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.SpecialOperations.html",
    "title": "Class SpecialOperations | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SpecialOperations Special automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpecialOperations 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class SpecialOperations Methods | Improve this Doc View Source GetCommonPrefix(Automaton) Returns the longest string that is a prefix of all accepted strings and visits each state at most once. Declaration public static string GetCommonPrefix(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.String Common prefix. | Improve this Doc View Source GetCommonPrefixBytesRef(Automaton) Declaration public static BytesRef GetCommonPrefixBytesRef(Automaton a) Parameters Type Name Description Automaton a Returns Type Description BytesRef | Improve this Doc View Source GetCommonSuffix(Automaton) Returns the longest string that is a suffix of all accepted strings and visits each state at most once. Declaration public static string GetCommonSuffix(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.String Common suffix. | Improve this Doc View Source GetCommonSuffixBytesRef(Automaton) Declaration public static BytesRef GetCommonSuffixBytesRef(Automaton a) Parameters Type Name Description Automaton a Returns Type Description BytesRef | Improve this Doc View Source GetFiniteStrings(Automaton, Int32) Returns the set of accepted strings, assuming that at most limit strings are accepted. If more than limit strings are accepted, the first limit strings found are returned. If limit <0, then the limit is infinite. Declaration public static ISet<Int32sRef> GetFiniteStrings(Automaton a, int limit) Parameters Type Name Description Automaton a System.Int32 limit Returns Type Description System.Collections.Generic.ISet < Int32sRef > | Improve this Doc View Source IsFinite(Automaton) Returns true if the language of this automaton is finite. Declaration public static bool IsFinite(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source Reverse(Automaton) Reverses the language of the given (non-singleton) automaton while returning the set of new initial states. Declaration public static ISet<State> Reverse(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Collections.Generic.ISet < State >"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.State.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.State.html",
    "title": "Class State | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class State Automaton state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object State Implements System.IComparable < State > System.IEquatable < State > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class State : IComparable<State>, IEquatable<State> Constructors | Improve this Doc View Source State() Constructs a new state. Initially, the new state is a reject state. Declaration public State() Properties | Improve this Doc View Source Accept Sets acceptance for this state. If true , this state is an accept state. Declaration public virtual bool Accept { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Number Return this state's number. Expert: Will be useless unless GetNumberedStates() has been called first to number the states. Declaration public virtual int Number { get; } Property Value Type Description System.Int32 The number. | Improve this Doc View Source NumTransitions Declaration public virtual int NumTransitions { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TransitionsArray Declaration public Transition[] TransitionsArray { get; } Property Value Type Description Transition [] Methods | Improve this Doc View Source AddTransition(Transition) Adds an outgoing transition. Declaration public virtual void AddTransition(Transition t) Parameters Type Name Description Transition t Transition. | Improve this Doc View Source CompareTo(State) Compares this object with the specified object for order. States are ordered by the time of construction. Declaration public virtual int CompareTo(State s) Parameters Type Name Description State s Returns Type Description System.Int32 | Improve this Doc View Source Equals(State) Declaration public bool Equals(State other) Parameters Type Name Description State other Returns Type Description System.Boolean | 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 GetTransitions() Returns the set of outgoing transitions. Subsequent changes are reflected in the automaton. Declaration public virtual IEnumerable<Transition> GetTransitions() Returns Type Description System.Collections.Generic.IEnumerable < Transition > Transition set. | Improve this Doc View Source Reduce() Reduces this state. A state is \"reduced\" by combining overlapping and adjacent edge intervals with same destination. Declaration public virtual void Reduce() | Improve this Doc View Source SetTransitions(Transition[]) Declaration public virtual void SetTransitions(Transition[] transitions) Parameters Type Name Description Transition [] transitions | Improve this Doc View Source SortTransitions(IComparer<Transition>) Returns sorted list of outgoing transitions. Declaration public virtual void SortTransitions(IComparer<Transition> comparer) Parameters Type Name Description System.Collections.Generic.IComparer < Transition > comparer Comparer to sort with. | Improve this Doc View Source Step(Int32) Performs lookup in transitions, assuming determinism. Declaration public virtual State Step(int c) Parameters Type Name Description System.Int32 c Codepoint to look up. Returns Type Description State Destination state, null if no matching outgoing transition. See Also Step(Int32, ICollection<State>) | Improve this Doc View Source Step(Int32, ICollection<State>) Performs lookup in transitions, allowing nondeterminism. Declaration public virtual void Step(int c, ICollection<State> dest) Parameters Type Name Description System.Int32 c Codepoint to look up. System.Collections.Generic.ICollection < State > dest Collection where destination states are stored. See Also Step(Int32) | Improve this Doc View Source ToString() Returns string describing this state. Normally invoked via ToString() . Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source TrimTransitionsArray() Downsizes transitionArray to numTransitions. Declaration public virtual void TrimTransitionsArray() Implements System.IComparable<T> System.IEquatable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.StatePair.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.StatePair.html",
    "title": "Class StatePair | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StatePair Pair of states. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StatePair 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public class StatePair Constructors | Improve this Doc View Source StatePair(State, State) Constructs a new state pair. Declaration public StatePair(State s1, State s2) Parameters Type Name Description State s1 First state. State s2 Second state. Properties | Improve this Doc View Source FirstState Returns first component of this pair. Declaration public virtual State FirstState { get; } Property Value Type Description State First state. | Improve this Doc View Source SecondState Returns second component of this pair. Declaration public virtual State SecondState { get; } Property Value Type Description State Second state. Methods | Improve this Doc View Source Equals(Object) Checks for equality. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Object to compare with. Returns Type Description System.Boolean true if obj represents the same pair of states as this pair. Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns hash code. Declaration public override int GetHashCode() Returns Type Description System.Int32 Hash code. Overrides System.Object.GetHashCode()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.Transition.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.Transition.html",
    "title": "Class Transition | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Transition Automaton transition. A transition, which belongs to a source state, consists of a Unicode codepoint interval and a destination state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Transition 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public class Transition Constructors | Improve this Doc View Source Transition(Int32, State) Constructs a new singleton interval transition. Declaration public Transition(int c, State to) Parameters Type Name Description System.Int32 c Transition codepoint. State to Destination state. | Improve this Doc View Source Transition(Int32, Int32, State) Constructs a new transition. Both end points are included in the interval. Declaration public Transition(int min, int max, State to) Parameters Type Name Description System.Int32 min Transition interval minimum. System.Int32 max Transition interval maximum. State to Destination state. Fields | Improve this Doc View Source COMPARE_BY_DEST_THEN_MIN_MAX Declaration public static readonly IComparer<Transition> COMPARE_BY_DEST_THEN_MIN_MAX Field Value Type Description System.Collections.Generic.IComparer < Transition > | Improve this Doc View Source COMPARE_BY_MIN_MAX_THEN_DEST Declaration public static readonly IComparer<Transition> COMPARE_BY_MIN_MAX_THEN_DEST Field Value Type Description System.Collections.Generic.IComparer < Transition > Properties | Improve this Doc View Source Dest Returns destination of this transition. Declaration public virtual State Dest { get; } Property Value Type Description State | Improve this Doc View Source Max Returns maximum of this transition interval. Declaration public virtual int Max { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Min Returns minimum of this transition interval. Declaration public virtual int Min { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Clones this transition. Declaration public virtual object Clone() Returns Type Description System.Object Clone with same character interval and destination state. | Improve this Doc View Source Equals(Object) Checks for equality. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Object to compare with. Returns Type Description System.Boolean true if obj is a transition with same character interval and destination state as this transition. Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns hash code. The hash code is based on the character interval (not the destination state). Declaration public override int GetHashCode() Returns Type Description System.Int32 Hash code. Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Returns a string describing this state. Normally invoked via ToString() . Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.UTF32ToUTF8.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.UTF32ToUTF8.html",
    "title": "Class UTF32ToUTF8 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UTF32ToUTF8 Converts UTF-32 automata to the equivalent UTF-8 representation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object UTF32ToUTF8 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.Util.Automaton Assembly : Lucene.Net.dll Syntax public sealed class UTF32ToUTF8 Methods | Improve this Doc View Source Convert(Automaton) Converts an incoming utf32 Automaton to an equivalent utf8 one. The incoming automaton need not be deterministic. Note that the returned automaton will not in general be deterministic, so you must determinize it if that's needed. Declaration public Automaton Convert(Automaton utf32) Parameters Type Name Description Automaton utf32 Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.html",
    "title": "Class Bits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Bits Inheritance System.Object Bits 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.Util Assembly : Lucene.Net.dll Syntax public static class Bits Fields | Improve this Doc View Source EMPTY_ARRAY Declaration public static readonly IBits[] EMPTY_ARRAY Field Value Type Description IBits []"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.MatchAllBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.MatchAllBits.html",
    "title": "Class Bits.MatchAllBits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Bits.MatchAllBits Bits impl of the specified length with all bits set. Inheritance System.Object Bits.MatchAllBits Implements IBits Inherited Members System.Object.Equals(System.Object) 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.Util Assembly : Lucene.Net.dll Syntax public class MatchAllBits : IBits Constructors | Improve this Doc View Source MatchAllBits(Int32) Declaration public MatchAllBits(int len) Parameters Type Name Description System.Int32 len Properties | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.MatchNoBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.MatchNoBits.html",
    "title": "Class Bits.MatchNoBits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Bits.MatchNoBits Bits impl of the specified length with no bits set. Inheritance System.Object Bits.MatchNoBits Implements IBits Inherited Members System.Object.Equals(System.Object) 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.Util Assembly : Lucene.Net.dll Syntax public class MatchNoBits : IBits Constructors | Improve this Doc View Source MatchNoBits(Int32) Declaration public MatchNoBits(int len) Parameters Type Name Description System.Int32 len Properties | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.BitUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BitUtil.html",
    "title": "Class BitUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BitUtil A variety of high efficiency bit twiddling routines. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BitUtil 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.Util Assembly : Lucene.Net.dll Syntax public sealed class BitUtil Methods | Improve this Doc View Source BitCount(Byte) Return the number of bits sets in b . Declaration public static int BitCount(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Int32 | Improve this Doc View Source BitList(Byte) Return the list of bits which are set in b encoded as followed: (i >>> (4 * n)) & 0x0F is the offset of the n-th set bit of the given byte plus one, or 0 if there are n or less bits set in the given byte. For example bitList(12) returns 0x43: 0x43 & 0x0F is 3, meaning the the first bit set is at offset 3-1 = 2, (0x43 >>> 4) & 0x0F is 4, meaning there is a second bit set at offset 4-1=3, (0x43 >>> 8) & 0x0F is 0, meaning there is no more bit set in this byte. Declaration public static int BitList(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Int32 | Improve this Doc View Source NextHighestPowerOfTwo(Int32) Returns the next highest power of two, or the current value if it's already a power of two or zero Declaration public static int NextHighestPowerOfTwo(int v) Parameters Type Name Description System.Int32 v Returns Type Description System.Int32 | Improve this Doc View Source NextHighestPowerOfTwo(Int64) Returns the next highest power of two, or the current value if it's already a power of two or zero Declaration public static long NextHighestPowerOfTwo(long v) Parameters Type Name Description System.Int64 v Returns Type Description System.Int64 | Improve this Doc View Source Pop_AndNot(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of A & ~B. Neither array is modified. Declaration public static long Pop_AndNot(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Array(Int64[], Int32, Int32) Returns the number of set bits in an array of System.Int64 s. Declaration public static long Pop_Array(long[] arr, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Intersect(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of the two sets after an intersection. Neither array is modified. Declaration public static long Pop_Intersect(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Union(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of the union of two sets. Neither array is modified. Declaration public static long Pop_Union(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Xor(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of A ^ B Neither array is modified. Declaration public static long Pop_Xor(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.BroadWord.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BroadWord.html",
    "title": "Class BroadWord | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BroadWord Methods and constants inspired by the article \"Broadword Implementation of Rank/Select Queries\" by Sebastiano Vigna, January 30, 2012: algorithm 1: Lucene.Net.Util.BroadWord.BitCount(System.Int64) , count of set bits in a System.Int64 algorithm 2: Select(Int64, Int32) , selection of a set bit in a System.Int64 , bytewise signed smaller < 8 operator: SmallerUpTo7_8(Int64, Int64) . shortwise signed smaller < 16 operator: SmallerUpto15_16(Int64, Int64) . some of the Lk and Hk constants that are used by the above: L8 L8_L , H8 H8_L , L9 L9_L , L16 L16_L and H16 H8_L . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BroadWord 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.Util Assembly : Lucene.Net.dll Syntax public sealed class BroadWord Fields | Improve this Doc View Source H16_L Declaration public static readonly long H16_L Field Value Type Description System.Int64 | Improve this Doc View Source H8_L Hk = Lk << (k-1) . These contain the high bit of each group of k bits. The suffix _L indicates the System.Int64 implementation. Declaration public static readonly long H8_L Field Value Type Description System.Int64 | Improve this Doc View Source L16_L Declaration public const long L16_L = 281479271743489L Field Value Type Description System.Int64 | Improve this Doc View Source L8_L Lk denotes the constant whose ones are in position 0, k, 2k, . . . These contain the low bit of each group of k bits. The suffix _L indicates the System.Int64 implementation. Declaration public const long L8_L = 72340172838076673L Field Value Type Description System.Int64 | Improve this Doc View Source L9_L Declaration public const long L9_L = -9205322385119247871L Field Value Type Description System.Int64 Methods | Improve this Doc View Source NotEquals0_8(Int64) An unsigned bytewise not equals 0 operator. This uses the following numbers of basic System.Int64 operations: 2 or, 1 and, 1 minus. Declaration public static long NotEquals0_8(long x) Parameters Type Name Description System.Int64 x Returns Type Description System.Int64 A System.Int64 with bits set in the H8_L positions corresponding to each unsigned byte that does not equal 0. | Improve this Doc View Source Select(Int64, Int32) Select a 1-bit from a System.Int64 . Declaration public static int Select(long x, int r) Parameters Type Name Description System.Int64 x System.Int32 r Returns Type Description System.Int32 The index of the r-th 1 bit in x, or if no such bit exists, 72. | Improve this Doc View Source SelectNaive(Int64, Int32) Naive implementation of Select(Int64, Int32) , using J2N.Numerics.BitOperation.TrailingZeroCount(System.Int64) repetitively. Works relatively fast for low ranks. Declaration public static int SelectNaive(long x, int r) Parameters Type Name Description System.Int64 x System.Int32 r Returns Type Description System.Int32 The index of the r-th 1 bit in x, or if no such bit exists, 72. | Improve this Doc View Source Smalleru_8(Int64, Int64) An unsigned bytewise smaller < 8 operator. This uses the following numbers of basic System.Int64 operations: 3 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long Smalleru_8(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A System.Int64 with bits set in the H8_L positions corresponding to each input unsigned byte pair that compares smaller. | Improve this Doc View Source SmallerUpto15_16(Int64, Int64) A bytewise smaller < 16 operator. This uses the following numbers of basic System.Int64 operations: 1 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long SmallerUpto15_16(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A System.Int64 with bits set in the H16_L positions corresponding to each input signed short pair that compares smaller. | Improve this Doc View Source SmallerUpTo7_8(Int64, Int64) A signed bytewise smaller < 8 operator, for operands 0L<= x, y <=0x7L. This uses the following numbers of basic System.Int64 operations: 1 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long SmallerUpTo7_8(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A System.Int64 with bits set in the H8_L positions corresponding to each input signed byte pair that compares smaller."
  },
  "api/Lucene.Net/Lucene.Net.Util.BundleResourceManagerFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BundleResourceManagerFactory.html",
    "title": "Class BundleResourceManagerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BundleResourceManagerFactory This implementation of IResourceManagerFactory uses a convention to retrieve resources. In Java NLS, the convention is to use the same name for the resource key propeties and for the resource file names. This presents a problem for .NET because the resource generator already creates an internal class with the same name as the .resx file. To work around this, we use the convention of appending the suffix \"Bundle\" to the end of the type the resource key propeties are stored in. For example, if our constants are stored in a class named ErrorMessages, the type that will be looked up by this factory will be ErrorMessagesBundle (which is the name of the .resx file that should be added to your project). This implementation can be inherited to use a different convention or can be replaced to get the resources from an external source. Inheritance System.Object BundleResourceManagerFactory Implements IResourceManagerFactory 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.Util Assembly : Lucene.Net.dll Syntax public class BundleResourceManagerFactory : IResourceManagerFactory Properties | Improve this Doc View Source ResourceSuffix The suffix to append to the resource key class name to locate the embedded resource. Declaration protected virtual string ResourceSuffix { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Create(Type) Creates a System.Resources.ResourceManager instance using the specified resourceSource . Declaration public virtual ResourceManager Create(Type resourceSource) Parameters Type Name Description System.Type resourceSource The type representing the resource to retrieve. Returns Type Description System.Resources.ResourceManager A new System.Resources.ResourceManager instance. | Improve this Doc View Source GetResourceName(Type) Gets the fully-qualified name of the bundle as it would appear using System.Reflection.Assembly.GetManifestResourceNames , without the .resources extension. This is the name that is passed to the baseName parameter of System.Resources.ResourceManager.#ctor(System.String,System.Reflection.Assembly) . Declaration protected virtual string GetResourceName(Type clazz) Parameters Type Name Description System.Type clazz The type of the NLS-derived class where the field strings are located that identify resources. Returns Type Description System.String The resource name. | Improve this Doc View Source Release(ResourceManager) Releases the System.Resources.ResourceManager instance including any disposable dependencies. Declaration public virtual void Release(ResourceManager manager) Parameters Type Name Description System.Resources.ResourceManager manager The System.Resources.ResourceManager to release. Implements IResourceManagerFactory"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.Allocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.Allocator.html",
    "title": "Class ByteBlockPool.Allocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteBlockPool.Allocator Abstract class for allocating and freeing byte blocks. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectAllocator ByteBlockPool.DirectTrackingAllocator RecyclingByteBlockAllocator 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.Util Assembly : Lucene.Net.dll Syntax public abstract class Allocator Constructors | Improve this Doc View Source Allocator(Int32) Declaration protected Allocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetByteBlock() Declaration public virtual byte[] GetByteBlock() Returns Type Description System.Byte [] | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public abstract void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end | Improve this Doc View Source RecycleByteBlocks(IList<Byte[]>) Declaration public virtual void RecycleByteBlocks(IList<byte[]> blocks) Parameters Type Name Description System.Collections.Generic.IList < System.Byte []> blocks"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectAllocator.html",
    "title": "Class ByteBlockPool.DirectAllocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteBlockPool.DirectAllocator A simple ByteBlockPool.Allocator that never recycles. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) ByteBlockPool.Allocator.GetByteBlock() 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.Util Assembly : Lucene.Net.dll Syntax public sealed class DirectAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source DirectAllocator() Declaration public DirectAllocator() | Improve this Doc View Source DirectAllocator(Int32) Declaration public DirectAllocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Methods | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectTrackingAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectTrackingAllocator.html",
    "title": "Class ByteBlockPool.DirectTrackingAllocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteBlockPool.DirectTrackingAllocator A simple ByteBlockPool.Allocator that never recycles, but tracks how much total RAM is in use. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectTrackingAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) 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.Util Assembly : Lucene.Net.dll Syntax public class DirectTrackingAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source DirectTrackingAllocator(Counter) Declaration public DirectTrackingAllocator(Counter bytesUsed) Parameters Type Name Description Counter bytesUsed | Improve this Doc View Source DirectTrackingAllocator(Int32, Counter) Declaration public DirectTrackingAllocator(int blockSize, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize Counter bytesUsed Methods | Improve this Doc View Source GetByteBlock() Declaration public override byte[] GetByteBlock() Returns Type Description System.Byte [] Overrides ByteBlockPool.Allocator.GetByteBlock() | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.html",
    "title": "Class ByteBlockPool | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteBlockPool Class that Posting and PostingVector use to write byte streams into shared fixed-size byte[] arrays. The idea is to allocate slices of increasing lengths. For example, the first slice is 5 bytes, the next slice is 14, etc. We start by writing our bytes into the first 5 bytes. When we hit the end of the slice, we allocate the next slice and then write the address of the new slice into the last 4 bytes of the previous slice (the \"forwarding address\"). Each slice is filled with 0's initially, and we mark the end with a non-zero byte. This way the methods that are writing into the slice don't need to record its length and instead allocate a new slice once they hit a non-zero byte. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ByteBlockPool 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.Util Assembly : Lucene.Net.dll Syntax public sealed class ByteBlockPool Constructors | Improve this Doc View Source ByteBlockPool(ByteBlockPool.Allocator) Declaration public ByteBlockPool(ByteBlockPool.Allocator allocator) Parameters Type Name Description ByteBlockPool.Allocator allocator Fields | Improve this Doc View Source BYTE_BLOCK_MASK Declaration public static readonly int BYTE_BLOCK_MASK Field Value Type Description System.Int32 | Improve this Doc View Source BYTE_BLOCK_SHIFT Declaration public static readonly int BYTE_BLOCK_SHIFT Field Value Type Description System.Int32 | Improve this Doc View Source BYTE_BLOCK_SIZE Declaration public static readonly int BYTE_BLOCK_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source FIRST_LEVEL_SIZE The first level size for new slices Declaration public static readonly int FIRST_LEVEL_SIZE Field Value Type Description System.Int32 See Also NewSlice(Int32) | Improve this Doc View Source LEVEL_SIZE_ARRAY An array holding the level sizes for byte slices. Declaration public static readonly int[] LEVEL_SIZE_ARRAY Field Value Type Description System.Int32 [] | Improve this Doc View Source NEXT_LEVEL_ARRAY An array holding the offset into the LEVEL_SIZE_ARRAY to quickly navigate to the next slice level. Declaration public static readonly int[] NEXT_LEVEL_ARRAY Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Buffer Current head buffer Declaration public byte[] Buffer { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Buffers Array of buffers currently used in the pool. Buffers are allocated if needed don't modify this outside of this class. Declaration public byte[][] Buffers { get; set; } Property Value Type Description System.Byte [][] | Improve this Doc View Source ByteOffset Current head offset Declaration public int ByteOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteUpto Where we are in head buffer Declaration public int ByteUpto { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AllocSlice(Byte[], Int32) Creates a new byte slice with the given starting size and returns the slices offset in the pool. Declaration public int AllocSlice(byte[] slice, int upto) Parameters Type Name Description System.Byte [] slice System.Int32 upto Returns Type Description System.Int32 | Improve this Doc View Source Append(BytesRef) Appends the bytes in the provided BytesRef at the current position. Declaration public void Append(BytesRef bytes) Parameters Type Name Description BytesRef bytes | Improve this Doc View Source NewSlice(Int32) Allocates a new slice with the given size. Declaration public int NewSlice(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 See Also FIRST_LEVEL_SIZE | Improve this Doc View Source NextBuffer() Advances the pool to its next buffer. This method should be called once after the constructor to initialize the pool. In contrast to the constructor a Reset() call will advance the pool to its first buffer immediately. Declaration public void NextBuffer() | Improve this Doc View Source ReadBytes(Int64, Byte[], Int32, Int32) Reads bytes bytes out of the pool starting at the given offset with the given length into the given byte array at offset off . Note: this method allows to copy across block boundaries. Declaration public void ReadBytes(long offset, byte[] bytes, int off, int length) Parameters Type Name Description System.Int64 offset System.Byte [] bytes System.Int32 off System.Int32 length | Improve this Doc View Source Reset() Resets the pool to its initial state reusing the first buffer and fills all buffers with 0 bytes before they reused or passed to RecycleByteBlocks(Byte[][], Int32, Int32) . Calling NextBuffer() is not needed after reset. Declaration public void Reset() | Improve this Doc View Source Reset(Boolean, Boolean) Expert: Resets the pool to its initial state reusing the first buffer. Calling NextBuffer() is not needed after reset. Declaration public void Reset(bool zeroFillBuffers, bool reuseFirst) Parameters Type Name Description System.Boolean zeroFillBuffers if true the buffers are filled with 0 . this should be set to true if this pool is used with slices. System.Boolean reuseFirst if true the first buffer will be reused and calling NextBuffer() is not needed after reset if the block pool was used before ie. NextBuffer() was called before. | Improve this Doc View Source SetBytesRef(BytesRef, Int32) Declaration public void SetBytesRef(BytesRef term, int textStart) Parameters Type Name Description BytesRef term System.Int32 textStart"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRef.html",
    "title": "Class BytesRef | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRef Represents byte[] , as a slice (offset + length) into an existing byte[] . The Bytes property should never be null ; use EMPTY_BYTES if necessary. Important note: Unless otherwise noted, Lucene uses this class to represent terms that are encoded as UTF8 bytes in the index. To convert them to a .NET System.String (which is UTF16), use Utf8ToString() . Using code like new String(bytes, offset, length) to do this is wrong , as it does not respect the correct character set and may return wrong results (depending on the platform's defaults)! Inheritance System.Object BytesRef Implements System.IComparable < BytesRef > System.IComparable 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.Util Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class BytesRef : IComparable<BytesRef>, IComparable Constructors | Improve this Doc View Source BytesRef() Create a BytesRef with EMPTY_BYTES Declaration public BytesRef() | Improve this Doc View Source BytesRef(ICharSequence) Initialize the byte[] from the UTF8 bytes for the provided J2N.Text.ICharSequence . Declaration public BytesRef(ICharSequence text) Parameters Type Name Description J2N.Text.ICharSequence text This must be well-formed unicode text, with no unpaired surrogates. | Improve this Doc View Source BytesRef(Byte[]) This instance will directly reference bytes w/o making a copy. bytes should not be null . Declaration public BytesRef(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source BytesRef(Byte[], Int32, Int32) This instance will directly reference bytes w/o making a copy. bytes should not be null . Declaration public BytesRef(byte[] bytes, int offset, int length) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 length | Improve this Doc View Source BytesRef(Int32) Create a BytesRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public BytesRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source BytesRef(String) Initialize the byte[] from the UTF8 bytes for the provided System.String . Declaration public BytesRef(string text) Parameters Type Name Description System.String text This must be well-formed unicode text, with no unpaired surrogates. Fields | Improve this Doc View Source EMPTY_BYTES An empty byte array for convenience Declaration public static readonly byte[] EMPTY_BYTES Field Value Type Description System.Byte [] Properties | Improve this Doc View Source Bytes The contents of the BytesRef. Should never be null . Declaration public byte[] Bytes { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Length Length of used bytes. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid byte. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source UTF8SortedAsUnicodeComparer Declaration public static IComparer<BytesRef> UTF8SortedAsUnicodeComparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source UTF8SortedAsUTF16Comparer Declaration [Obsolete(\"this comparer is only a transition mechanism\")] public static IComparer<BytesRef> UTF8SortedAsUTF16Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Append(BytesRef) Appends the bytes from the given BytesRef NOTE: if this would exceed the array size, this method creates a new reference array. Declaration public void Append(BytesRef other) Parameters Type Name Description BytesRef other | Improve this Doc View Source BytesEquals(BytesRef) Expert: Compares the bytes against another BytesRef , returning true if the bytes are equal. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public bool BytesEquals(BytesRef other) Parameters Type Name Description BytesRef other Another BytesRef , should not be null . Returns Type Description System.Boolean | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying bytes are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(BytesRef) | Improve this Doc View Source CompareTo(BytesRef) Unsigned byte order comparison Declaration public int CompareTo(BytesRef other) Parameters Type Name Description BytesRef other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(Object) Unsigned byte order comparison Declaration public int CompareTo(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source CopyBytes(BytesRef) Copies the bytes from the given BytesRef NOTE: if this would exceed the array size, this method creates a new reference array. Declaration public void CopyBytes(BytesRef other) Parameters Type Name Description BytesRef other | Improve this Doc View Source CopyChars(ICharSequence) Copies the UTF8 bytes for this J2N.Text.ICharSequence . Declaration public void CopyChars(ICharSequence text) Parameters Type Name Description J2N.Text.ICharSequence text Must be well-formed unicode text, with no unpaired surrogates or invalid UTF16 code units. | Improve this Doc View Source CopyChars(String) Copies the UTF8 bytes for this System.String . Declaration public void CopyChars(string text) Parameters Type Name Description System.String text Must be well-formed unicode text, with no unpaired surrogates or invalid UTF16 code units. | Improve this Doc View Source DeepCopyOf(BytesRef) Creates a new BytesRef that points to a copy of the bytes from other . The returned BytesRef will have a length of other.Length and an offset of zero. Declaration public static BytesRef DeepCopyOf(BytesRef other) Parameters Type Name Description BytesRef other Returns Type Description BytesRef | 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() Calculates the hash code as required by Lucene.Net.Index.TermsHash during indexing. This is currently implemented as MurmurHash3 (32 bit), using the seed from GOOD_FAST_HASH_SEED , but is subject to change from release to release. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Returns hex encoded bytes, eg [0x6c 0x75 0x63 0x65 0x6e 0x65] Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Utf8ToString() Interprets stored bytes as UTF8 bytes, returning the resulting System.String . Declaration public string Utf8ToString() Returns Type Description System.String Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefArray.html",
    "title": "Class BytesRefArray | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefArray A simple append only random-access BytesRef array that stores full copies of the appended bytes in a ByteBlockPool . Note: this class is not Thread-Safe! This is a Lucene.NET INTERNAL API, use at your own risk This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BytesRefArray 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.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRefArray Constructors | Improve this Doc View Source BytesRefArray(Counter) Creates a new BytesRefArray with a counter to track allocated bytes Declaration public BytesRefArray(Counter bytesUsed) Parameters Type Name Description Counter bytesUsed Properties | Improve this Doc View Source Length Returns the current size of this BytesRefArray . NOTE: This was size() in Lucene. Declaration public int Length { get; } Property Value Type Description System.Int32 The current size of this BytesRefArray Methods | Improve this Doc View Source Append(BytesRef) Appends a copy of the given BytesRef to this BytesRefArray . Declaration public int Append(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to append Returns Type Description System.Int32 The index of the appended bytes | Improve this Doc View Source Clear() Clears this BytesRefArray Declaration public void Clear() | Improve this Doc View Source Get(BytesRef, Int32) Returns the n'th element of this BytesRefArray Declaration public BytesRef Get(BytesRef spare, int index) Parameters Type Name Description BytesRef spare A spare BytesRef instance System.Int32 index The elements index to retrieve Returns Type Description BytesRef The n'th element of this BytesRefArray | Improve this Doc View Source GetIterator() Sugar for GetIterator(IComparer<BytesRef>) with a null comparer Declaration public IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator | Improve this Doc View Source GetIterator(IComparer<BytesRef>) Returns a IBytesRefIterator with point in time semantics. The iterator provides access to all so far appended BytesRef instances. If a non null IComparer{BytesRef} is provided the iterator will iterate the byte values in the order specified by the comparer. Otherwise the order is the same as the values were appended. This is a non-destructive operation. Declaration public IBytesRefIterator GetIterator(IComparer<BytesRef> comp) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comp Returns Type Description IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.BytesStartArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.BytesStartArray.html",
    "title": "Class BytesRefHash.BytesStartArray | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefHash.BytesStartArray Manages allocation of the per-term addresses. Inheritance System.Object BytesRefHash.BytesStartArray BytesRefHash.DirectBytesStartArray 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.Util Assembly : Lucene.Net.dll Syntax public abstract class BytesStartArray Methods | Improve this Doc View Source BytesUsed() A Counter reference holding the number of bytes used by this BytesRefHash.BytesStartArray . The BytesRefHash uses this reference to track it memory usage. Declaration public abstract Counter BytesUsed() Returns Type Description Counter a J2N.Threading.Atomic.AtomicInt64 reference holding the number of bytes used by this BytesRefHash.BytesStartArray . | Improve this Doc View Source Clear() Clears the BytesRefHash.BytesStartArray and returns the cleared instance. Declaration public abstract int[] Clear() Returns Type Description System.Int32 [] The cleared instance, this might be null . | Improve this Doc View Source Grow() Grows the BytesRefHash.BytesStartArray . Declaration public abstract int[] Grow() Returns Type Description System.Int32 [] The grown array. | Improve this Doc View Source Init() Initializes the BytesRefHash.BytesStartArray . This call will allocate memory. Declaration public abstract int[] Init() Returns Type Description System.Int32 [] The initialized bytes start array."
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.DirectBytesStartArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.DirectBytesStartArray.html",
    "title": "Class BytesRefHash.DirectBytesStartArray | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefHash.DirectBytesStartArray A simple BytesRefHash.BytesStartArray that tracks memory allocation using a private Counter instance. Inheritance System.Object BytesRefHash.BytesStartArray BytesRefHash.DirectBytesStartArray 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.Util Assembly : Lucene.Net.dll Syntax public class DirectBytesStartArray : BytesRefHash.BytesStartArray Constructors | Improve this Doc View Source DirectBytesStartArray(Int32) Declaration public DirectBytesStartArray(int initSize) Parameters Type Name Description System.Int32 initSize | Improve this Doc View Source DirectBytesStartArray(Int32, Counter) Declaration public DirectBytesStartArray(int initSize, Counter counter) Parameters Type Name Description System.Int32 initSize Counter counter Fields | Improve this Doc View Source m_initSize Declaration protected readonly int m_initSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source BytesUsed() Declaration public override Counter BytesUsed() Returns Type Description Counter Overrides BytesRefHash.BytesStartArray.BytesUsed() | Improve this Doc View Source Clear() Declaration public override int[] Clear() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Clear() | Improve this Doc View Source Grow() Declaration public override int[] Grow() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Grow() | Improve this Doc View Source Init() Declaration public override int[] Init() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Init()"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.html",
    "title": "Class BytesRefHash | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefHash BytesRefHash is a special purpose hash-map like data-structure optimized for BytesRef instances. BytesRefHash maintains mappings of byte arrays to ids (Map<BytesRef,int>) storing the hashed bytes efficiently in continuous storage. The mapping to the id is encapsulated inside BytesRefHash and is guaranteed to be increased for each added BytesRef . Note: The maximum capacity BytesRef instance passed to Add(BytesRef) must not be longer than BYTE_BLOCK_SIZE -2. The internal storage is limited to 2GB total byte storage. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BytesRefHash 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.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRefHash : IDisposable Constructors | Improve this Doc View Source BytesRefHash() Creates a new BytesRefHash with a ByteBlockPool using a ByteBlockPool.DirectAllocator . Declaration public BytesRefHash() | Improve this Doc View Source BytesRefHash(ByteBlockPool) Creates a new BytesRefHash Declaration public BytesRefHash(ByteBlockPool pool) Parameters Type Name Description ByteBlockPool pool | Improve this Doc View Source BytesRefHash(ByteBlockPool, Int32, BytesRefHash.BytesStartArray) Creates a new BytesRefHash Declaration public BytesRefHash(ByteBlockPool pool, int capacity, BytesRefHash.BytesStartArray bytesStartArray) Parameters Type Name Description ByteBlockPool pool System.Int32 capacity BytesRefHash.BytesStartArray bytesStartArray Fields | Improve this Doc View Source DEFAULT_CAPACITY Declaration public const int DEFAULT_CAPACITY = 16 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Returns the number of BytesRef values in this BytesRefHash . NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 The number of BytesRef values in this BytesRefHash . Methods | Improve this Doc View Source Add(BytesRef) Adds a new BytesRef Declaration public int Add(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to hash Returns Type Description System.Int32 The id the given bytes are hashed if there was no mapping for the given bytes, otherwise (-(id)-1) . this guarantees that the return value will always be >= 0 if the given bytes haven't been hashed before. Exceptions Type Condition BytesRefHash.MaxBytesLengthExceededException if the given bytes are > 2 + BYTE_BLOCK_SIZE | Improve this Doc View Source AddByPoolOffset(Int32) Adds a \"arbitrary\" int offset instead of a BytesRef term. This is used in the indexer to hold the hash for term vectors, because they do not redundantly store the byte[] term directly and instead reference the byte[] term already stored by the postings BytesRefHash . See Lucene.Net.Index.TermsHashPerField.Add(System.Int32) . Declaration public int AddByPoolOffset(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source ByteStart(Int32) Returns the bytesStart offset into the internally used ByteBlockPool for the given bytesID Declaration public int ByteStart(int bytesID) Parameters Type Name Description System.Int32 bytesID The id to look up Returns Type Description System.Int32 The bytesStart offset into the internally used ByteBlockPool for the given id | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Clear(Boolean) Clears the BytesRef which maps to the given BytesRef Declaration public void Clear(bool resetPool) Parameters Type Name Description System.Boolean resetPool | Improve this Doc View Source Compact() Returns the ids array in arbitrary order. Valid ids start at offset of 0 and end at a limit of Count - 1 Note: this is a destructive operation. Clear() must be called in order to reuse this BytesRefHash instance. Declaration public int[] Compact() Returns Type Description System.Int32 [] | Improve this Doc View Source Dispose() Closes the BytesRefHash and releases all internally used memory Declaration public void Dispose() | Improve this Doc View Source Find(BytesRef) Returns the id of the given BytesRef . Declaration public int Find(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to look for Returns Type Description System.Int32 The id of the given bytes, or -1 if there is no mapping for the given bytes. | Improve this Doc View Source Get(Int32, BytesRef) Populates and returns a BytesRef with the bytes for the given bytesID. Note: the given bytesID must be a positive integer less than the current size ( Count ) Declaration public BytesRef Get(int bytesID, BytesRef ref) Parameters Type Name Description System.Int32 bytesID The id BytesRef ref The BytesRef to populate Returns Type Description BytesRef The given BytesRef instance populated with the bytes for the given bytesID | Improve this Doc View Source Reinit() Reinitializes the BytesRefHash after a previous Clear() call. If Clear() has not been called previously this method has no effect. Declaration public void Reinit() | Improve this Doc View Source Sort(IComparer<BytesRef>) Returns the values array sorted by the referenced byte values. Note: this is a destructive operation. Clear() must be called in order to reuse this BytesRefHash instance. Declaration public int[] Sort(IComparer<BytesRef> comp) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comp The IComparer{BytesRef} used for sorting Returns Type Description System.Int32 [] Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.MaxBytesLengthExceededException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.MaxBytesLengthExceededException.html",
    "title": "Class BytesRefHash.MaxBytesLengthExceededException | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefHash.MaxBytesLengthExceededException Thrown if a BytesRef exceeds the BytesRefHash limit of BYTE_BLOCK_SIZE -2. Inheritance System.Object System.Exception BytesRefHash.MaxBytesLengthExceededException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MaxBytesLengthExceededException : Exception, ISerializable Implements System.Runtime.Serialization.ISerializable Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefIterator.html",
    "title": "Class BytesRefIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefIterator LUCENENET specific class to make the syntax of creating an empty IBytesRefIterator the same as it was in Lucene. Example: var iter = BytesRefIterator.Empty; Inheritance System.Object BytesRefIterator 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.Util Assembly : Lucene.Net.dll Syntax public class BytesRefIterator Fields | Improve this Doc View Source EMPTY Singleton BytesRefIterator that iterates over 0 BytesRefs. Declaration public static readonly IBytesRefIterator EMPTY Field Value Type Description IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Util.CharsRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CharsRef.html",
    "title": "Class CharsRef | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharsRef Represents char[] , as a slice (offset + Length) into an existing char[] . The Chars property should never be null ; use EMPTY_CHARS if necessary. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CharsRef Implements System.IComparable < CharsRef > J2N.Text.ICharSequence 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.Util Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class CharsRef : IComparable<CharsRef>, ICharSequence Constructors | Improve this Doc View Source CharsRef() Creates a new CharsRef initialized an empty array zero-Length Declaration public CharsRef() | Improve this Doc View Source CharsRef(Char[], Int32, Int32) Creates a new CharsRef initialized with the given chars , offset and length . Declaration public CharsRef(char[] chars, int offset, int length) Parameters Type Name Description System.Char [] chars System.Int32 offset System.Int32 length | Improve this Doc View Source CharsRef(Int32) Creates a new CharsRef initialized with an array of the given capacity . Declaration public CharsRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source CharsRef(String) Creates a new CharsRef initialized with the given System.String character array. Declaration public CharsRef(string string) Parameters Type Name Description System.String string Fields | Improve this Doc View Source EMPTY_CHARS An empty character array for convenience Declaration public static readonly char[] EMPTY_CHARS Field Value Type Description System.Char [] Properties | Improve this Doc View Source Chars The contents of the CharsRef . Should never be null . Declaration public char[] Chars { get; set; } Property Value Type Description System.Char [] | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Length of used characters. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid character. Declaration public int Offset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UTF16SortedAsUTF8Comparer Declaration [Obsolete(\"this comparer is only a transition mechanism\")] public static IComparer<CharsRef> UTF16SortedAsUTF8Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < CharsRef > Methods | Improve this Doc View Source Append(Char[], Int32, Int32) Appends the given array to this CharsRef . Declaration public void Append(char[] otherChars, int otherOffset, int otherLength) Parameters Type Name Description System.Char [] otherChars System.Int32 otherOffset System.Int32 otherLength | Improve this Doc View Source CharsEquals(CharsRef) Declaration public bool CharsEquals(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description System.Boolean | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying characters are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(CharsRef) | Improve this Doc View Source CompareTo(CharsRef) Signed System.Int32 order comparison Declaration public int CompareTo(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyChars(CharsRef) Copies the given CharsRef referenced content into this instance. Declaration public void CopyChars(CharsRef other) Parameters Type Name Description CharsRef other The CharsRef to copy. | Improve this Doc View Source CopyChars(Char[], Int32, Int32) Copies the given array into this CharsRef . Declaration public void CopyChars(char[] otherChars, int otherOffset, int otherLength) Parameters Type Name Description System.Char [] otherChars System.Int32 otherOffset System.Int32 otherLength | Improve this Doc View Source DeepCopyOf(CharsRef) Creates a new CharsRef that points to a copy of the chars from other . The returned CharsRef will have a Length of other.Length and an offset of zero. Declaration public static CharsRef DeepCopyOf(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description CharsRef | 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 Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source Subsequence(Int32, Int32) Declaration public ICharSequence Subsequence(int startIndex, int length) Parameters Type Name Description System.Int32 startIndex System.Int32 length Returns Type Description J2N.Text.ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source ICharSequence.HasValue Declaration bool ICharSequence.HasValue { get; } Returns Type Description System.Boolean Implements System.IComparable<T> J2N.Text.ICharSequence"
  },
  "api/Lucene.Net/Lucene.Net.Util.CollectionUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CollectionUtil.html",
    "title": "Class CollectionUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CollectionUtil Methods for manipulating (sorting) collections. Sort methods work directly on the supplied lists and don't copy to/from arrays before/after. For medium size collections as used in the Lucene indexer that is much more efficient. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CollectionUtil 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.Util Assembly : Lucene.Net.dll Syntax public sealed class CollectionUtil Methods | Improve this Doc View Source IntroSort<T>(IList<T>) Sorts the given random access System.Collections.Generic.IList<T> in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(IList<T> list, IComparer<T> comp) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comp The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>) Sorts the given System.Collections.Generic.IList<T> in natural order. This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(IList<T> list, IComparer<T> comp) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comp The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.CommandLineUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CommandLineUtil.html",
    "title": "Class CommandLineUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CommandLineUtil Class containing some useful methods used by command line tools Inheritance System.Object CommandLineUtil 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.Util Assembly : Lucene.Net.dll Syntax public sealed class CommandLineUtil Methods | Improve this Doc View Source LoadDirectoryClass(String) Loads a specific Directory implementation. Declaration public static Type LoadDirectoryClass(string clazzName) Parameters Type Name Description System.String clazzName The name of the Directory class to load. Returns Type Description System.Type The Directory class loaded. Exceptions Type Condition System.TypeLoadException If the specified class cannot be found. | Improve this Doc View Source LoadFSDirectoryClass(String) Loads a specific FSDirectory implementation. Declaration public static Type LoadFSDirectoryClass(string clazzName) Parameters Type Name Description System.String clazzName The name of the FSDirectory class to load. Returns Type Description System.Type The FSDirectory class loaded. Exceptions Type Condition System.TypeLoadException If the specified class cannot be found. | Improve this Doc View Source NewFSDirectory(String, DirectoryInfo) Creates a specific FSDirectory instance starting from its class name. Declaration public static FSDirectory NewFSDirectory(string clazzName, DirectoryInfo dir) Parameters Type Name Description System.String clazzName The name of the FSDirectory class to load. System.IO.DirectoryInfo dir The System.IO.DirectoryInfo to be used as parameter constructor. Returns Type Description FSDirectory The new FSDirectory instance | Improve this Doc View Source NewFSDirectory(Type, DirectoryInfo) Creates a new specific FSDirectory instance. Declaration public static FSDirectory NewFSDirectory(Type clazz, DirectoryInfo dir) Parameters Type Name Description System.Type clazz The class of the object to be created System.IO.DirectoryInfo dir The System.IO.DirectoryInfo to be used as parameter constructor Returns Type Description FSDirectory The new FSDirectory instance. Exceptions Type Condition System.MissingMethodException If the Directory does not have a constructor that takes System.IO.DirectoryInfo . System.MemberAccessException If the class is abstract or an interface. System.TypeLoadException If the constructor does not have public visibility. System.Reflection.TargetInvocationException If the constructor throws an exception"
  },
  "api/Lucene.Net/Lucene.Net.Util.Constants.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Constants.html",
    "title": "Class Constants | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Constants Some useful constants. Inheritance System.Object Constants 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.Util Assembly : Lucene.Net.dll Syntax public static class Constants Fields | Improve this Doc View Source FREE_BSD True iff running on FreeBSD Declaration public static readonly bool FREE_BSD Field Value Type Description System.Boolean | Improve this Doc View Source LINUX True iff running on Linux. Declaration public static readonly bool LINUX Field Value Type Description System.Boolean | Improve this Doc View Source LUCENE_MAIN_VERSION this is the internal Lucene version, recorded into each segment. NOTE: we track per-segment version as a System.String with the \"X.Y\" format (no minor version), e.g. \"4.0\", \"3.1\", \"3.0\" . Alpha and Beta versions will have numbers like \"X.Y.0.Z\" , anything else is not allowed. This is done to prevent people from using indexes created with ALPHA/BETA versions with the released version. Declaration public static readonly string LUCENE_MAIN_VERSION Field Value Type Description System.String | Improve this Doc View Source LUCENE_VERSION This is the Lucene version for display purposes. Declaration public static readonly string LUCENE_VERSION Field Value Type Description System.String | Improve this Doc View Source MAC_OS_X True iff running on Mac OS X Declaration public static readonly bool MAC_OS_X Field Value Type Description System.Boolean | Improve this Doc View Source OS_ARCH Declaration public static readonly string OS_ARCH Field Value Type Description System.String | Improve this Doc View Source OS_NAME The value of System.Runtime.InteropServices.RuntimeInformation.OSDescription , excluding the version number. Declaration public static readonly string OS_NAME Field Value Type Description System.String | Improve this Doc View Source OS_VERSION Declaration public static readonly string OS_VERSION Field Value Type Description System.String | Improve this Doc View Source RUNTIME_IS_64BIT NOTE: This was JRE_IS_64BIT in Lucene Declaration public static readonly bool RUNTIME_IS_64BIT Field Value Type Description System.Boolean | Improve this Doc View Source RUNTIME_VENDOR NOTE: This was JAVA_VENDOR in Lucene Declaration public static readonly string RUNTIME_VENDOR Field Value Type Description System.String | Improve this Doc View Source RUNTIME_VERSION The value of the version parsed from System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription . NOTE: This was JAVA_VERSION in Lucene Declaration public static readonly string RUNTIME_VERSION Field Value Type Description System.String | Improve this Doc View Source SUN_OS True iff running on SunOS. Declaration public static readonly bool SUN_OS Field Value Type Description System.Boolean | Improve this Doc View Source WINDOWS True iff running on Windows. Declaration public static readonly bool WINDOWS Field Value Type Description System.Boolean Methods | Improve this Doc View Source MainVersionWithoutAlphaBeta() Returns a LUCENE_MAIN_VERSION without any ALPHA/BETA qualifier Used by test only! Declaration public static string MainVersionWithoutAlphaBeta() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Counter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Counter.html",
    "title": "Class Counter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Counter Simple counter class This is a Lucene.NET INTERNAL API, use at your own risk This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Counter 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.Util Assembly : Lucene.Net.dll Syntax public abstract class Counter Methods | Improve this Doc View Source AddAndGet(Int64) Adds the given delta to the counters current value. Declaration public abstract long AddAndGet(long delta) Parameters Type Name Description System.Int64 delta The delta to add. Returns Type Description System.Int64 The counters updated value. | Improve this Doc View Source Get() Returns the counters current value. Declaration public abstract long Get() Returns Type Description System.Int64 The counters current value. | Improve this Doc View Source NewCounter() Returns a new counter. The returned counter is not thread-safe. Declaration public static Counter NewCounter() Returns Type Description Counter | Improve this Doc View Source NewCounter(Boolean) Returns a new counter. Declaration public static Counter NewCounter(bool threadSafe) Parameters Type Name Description System.Boolean threadSafe true if the returned counter can be used by multiple threads concurrently. Returns Type Description Counter A new counter."
  },
  "api/Lucene.Net/Lucene.Net.Util.DisposableThreadLocal-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DisposableThreadLocal-1.html",
    "title": "Class DisposableThreadLocal<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DisposableThreadLocal<T> Java's builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dereference the things you had stored in it, even once the ThreadLocal instance itself is no longer referenced. This is because there is single, master map stored for each thread, which all ThreadLocals share, and that master map only periodically purges \"stale\" entries. While not technically a memory leak, because eventually the memory will be reclaimed, it can take a long time and you can easily hit System.OutOfMemoryException because from the GC's standpoint the stale entries are not reclaimable. This class works around that, by only enrolling WeakReference values into the ThreadLocal, and separately holding a hard reference to each stored value. When you call Dispose() , these hard references are cleared and then GC is freely able to reclaim space by objects stored in it. You should not call Dispose() until all threads are done using the instance. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DisposableThreadLocal<T> 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.Util Assembly : Lucene.Net.dll Syntax public class DisposableThreadLocal<T> : IDisposable Type Parameters Name Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Get() Declaration public virtual T Get() Returns Type Description T | Improve this Doc View Source InitialValue() Declaration protected virtual T InitialValue() Returns Type Description T | Improve this Doc View Source Set(T) Declaration public virtual void Set(T object) Parameters Type Name Description T object Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.DocIdBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DocIdBitSet.html",
    "title": "Class DocIdBitSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DocIdBitSet Simple DocIdSet and DocIdSetIterator backed by a System.Collections.BitArray Inheritance System.Object DocIdSet DocIdBitSet Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) 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.Util Assembly : Lucene.Net.dll Syntax public class DocIdBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source DocIdBitSet(BitArray) Declaration public DocIdBitSet(BitArray bitSet) Parameters Type Name Description System.Collections.BitArray bitSet Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source BitSet Returns the underlying System.Collections.BitArray . Declaration public virtual BitArray BitSet { get; } Property Value Type Description System.Collections.BitArray | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.CloneableKey.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.CloneableKey.html",
    "title": "Class DoubleBarrelLRUCache.CloneableKey | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleBarrelLRUCache.CloneableKey Object providing clone(); the key class must subclass this. Inheritance System.Object DoubleBarrelLRUCache.CloneableKey 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.Util Assembly : Lucene.Net.dll Syntax public abstract class CloneableKey Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.html",
    "title": "Class DoubleBarrelLRUCache | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleBarrelLRUCache LUCENENET specific class to nest the DoubleBarrelLRUCache.CloneableKey so it can be accessed without referencing the generic closing types of DoubleBarrelLRUCache<TKey, TValue> . Inheritance System.Object DoubleBarrelLRUCache DoubleBarrelLRUCache <TKey, TValue> 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.Util Assembly : Lucene.Net.dll Syntax public abstract class DoubleBarrelLRUCache"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache-2.html",
    "title": "Class DoubleBarrelLRUCache<TKey, TValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class DoubleBarrelLRUCache<TKey, TValue> Simple concurrent LRU cache, using a \"double barrel\" approach where two ConcurrentHashMaps record entries. At any given time, one hash is primary and the other is secondary. Get(TKey) first checks primary, and if that's a miss, checks secondary. If secondary has the entry, it's promoted to primary ( NOTE : the key is cloned at this point). Once primary is full, the secondary is cleared and the two are swapped. This is not as space efficient as other possible concurrent approaches (see LUCENE-2075): to achieve perfect LRU(N) it requires 2*N storage. But, this approach is relatively simple and seems in practice to not grow unbounded in size when under hideously high load. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DoubleBarrelLRUCache DoubleBarrelLRUCache<TKey, TValue> 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.Util Assembly : Lucene.Net.dll Syntax public sealed class DoubleBarrelLRUCache<TKey, TValue> : DoubleBarrelLRUCache where TKey : DoubleBarrelLRUCache.CloneableKey Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source DoubleBarrelLRUCache(Int32) Declaration public DoubleBarrelLRUCache(int maxCount) Parameters Type Name Description System.Int32 maxCount Methods | Improve this Doc View Source Get(TKey) Declaration public TValue Get(TKey key) Parameters Type Name Description TKey key Returns Type Description TValue | Improve this Doc View Source Put(TKey, TValue) Declaration public void Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value"
  },
  "api/Lucene.Net/Lucene.Net.Util.ExceptionExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ExceptionExtensions.html",
    "title": "Class ExceptionExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExceptionExtensions Extensions to the System.Exception class to allow for adding and retrieving suppressed exceptions, like you can do in Java. Inheritance System.Object ExceptionExtensions 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.Util Assembly : Lucene.Net.dll Syntax public static class ExceptionExtensions Fields | Improve this Doc View Source SUPPRESSED_EXCEPTIONS_KEY Declaration public static readonly string SUPPRESSED_EXCEPTIONS_KEY Field Value Type Description System.String Methods | Improve this Doc View Source AddSuppressed(Exception, Exception) Declaration public static void AddSuppressed(this Exception e, Exception exception) Parameters Type Name Description System.Exception e System.Exception exception | Improve this Doc View Source GetSuppressed(Exception) Declaration public static Exception[] GetSuppressed(this Exception e) Parameters Type Name Description System.Exception e Returns Type Description System.Exception [] | Improve this Doc View Source GetSuppressedAsList(Exception) Declaration public static IList<Exception> GetSuppressedAsList(this Exception e) Parameters Type Name Description System.Exception e Returns Type Description System.Collections.Generic.IList < System.Exception >"
  },
  "api/Lucene.Net/Lucene.Net.Util.ExcludeServiceAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ExcludeServiceAttribute.html",
    "title": "Class ExcludeServiceAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ExcludeServiceAttribute Base class for Attribute types that exclude services from Reflection scanning. Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludeCodecFromScanAttribute ExcludeDocValuesFormatFromScanAttribute ExcludePostingsFormatFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Util Assembly : Lucene.Net.dll Syntax public abstract class ExcludeServiceAttribute : Attribute"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.html",
    "title": "Class FieldCacheSanityChecker | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheSanityChecker Provides methods for sanity checking that entries in the FieldCache are not wasteful or inconsistent. Lucene 2.9 Introduced numerous enhancements into how the FieldCache is used by the low levels of Lucene searching (for Sorting and ValueSourceQueries) to improve both the speed for Sorting, as well as reopening of IndexReaders. But these changes have shifted the usage of FieldCache from \"top level\" IndexReaders (frequently a MultiReader or DirectoryReader) down to the leaf level SegmentReaders. As a result, existing applications that directly access the FieldCache may find RAM usage increase significantly when upgrading to 2.9 or Later. This class provides an API for these applications (or their Unit tests) to check at run time if the FieldCache contains \"insane\" usages of the FieldCache. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldCacheSanityChecker 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.Util Assembly : Lucene.Net.dll Syntax public sealed class FieldCacheSanityChecker Constructors | Improve this Doc View Source FieldCacheSanityChecker() Declaration public FieldCacheSanityChecker() | Improve this Doc View Source FieldCacheSanityChecker(Boolean) Declaration public FieldCacheSanityChecker(bool estimateRam) Parameters Type Name Description System.Boolean estimateRam If set, estimate size for all FieldCache.CacheEntry objects will be calculated. Methods | Improve this Doc View Source Check(FieldCache.CacheEntry[]) Tests a CacheEntry[] for indication of \"insane\" cache usage. NOTE: FieldCache CreationPlaceholder objects are ignored. (:TODO: is this a bad idea? are we masking a real problem?) Declaration public FieldCacheSanityChecker.Insanity[] Check(params FieldCache.CacheEntry[] cacheEntries) Parameters Type Name Description FieldCache.CacheEntry [] cacheEntries Returns Type Description FieldCacheSanityChecker.Insanity [] | Improve this Doc View Source CheckSanity(FieldCache.CacheEntry[]) Quick and dirty convenience method that instantiates an instance with \"good defaults\" and uses it to test the FieldCache.CacheEntry s Declaration public static FieldCacheSanityChecker.Insanity[] CheckSanity(params FieldCache.CacheEntry[] cacheEntries) Parameters Type Name Description FieldCache.CacheEntry [] cacheEntries Returns Type Description FieldCacheSanityChecker.Insanity [] See Also Check(FieldCache.CacheEntry[]) | Improve this Doc View Source CheckSanity(IFieldCache) Quick and dirty convenience method Declaration public static FieldCacheSanityChecker.Insanity[] CheckSanity(IFieldCache cache) Parameters Type Name Description IFieldCache cache Returns Type Description FieldCacheSanityChecker.Insanity [] See Also Check(FieldCache.CacheEntry[]) See Also IFieldCache FieldCacheSanityChecker.Insanity FieldCacheSanityChecker.InsanityType"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.Insanity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.Insanity.html",
    "title": "Class FieldCacheSanityChecker.Insanity | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheSanityChecker.Insanity Simple container for a collection of related FieldCache.CacheEntry objects that in conjunction with each other represent some \"insane\" usage of the IFieldCache . Inheritance System.Object FieldCacheSanityChecker.Insanity 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) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Insanity Constructors | Improve this Doc View Source Insanity(FieldCacheSanityChecker.InsanityType, String, FieldCache.CacheEntry[]) Declaration public Insanity(FieldCacheSanityChecker.InsanityType type, string msg, params FieldCache.CacheEntry[] entries) Parameters Type Name Description FieldCacheSanityChecker.InsanityType type System.String msg FieldCache.CacheEntry [] entries Properties | Improve this Doc View Source CacheEntries FieldCache.CacheEntry objects which suggest a problem Declaration public FieldCache.CacheEntry[] CacheEntries { get; } Property Value Type Description FieldCache.CacheEntry [] | Improve this Doc View Source Msg Description of the insane behavior Declaration public string Msg { get; } Property Value Type Description System.String | Improve this Doc View Source Type Type of insane behavior this object represents Declaration public FieldCacheSanityChecker.InsanityType Type { get; } Property Value Type Description FieldCacheSanityChecker.InsanityType Methods | Improve this Doc View Source ToString() Multi-Line representation of this FieldCacheSanityChecker.Insanity object, starting with the Type and Msg, followed by each CacheEntry.ToString() on it's own line prefaced by a tab character Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.InsanityType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.InsanityType.html",
    "title": "Class FieldCacheSanityChecker.InsanityType | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FieldCacheSanityChecker.InsanityType An Enumeration of the different types of \"insane\" behavior that may be detected in a IFieldCache . Inheritance System.Object FieldCacheSanityChecker.InsanityType 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) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class InsanityType Fields | Improve this Doc View Source EXPECTED Indicates an expected bit of \"insanity\". This may be useful for clients that wish to preserve/log information about insane usage but indicate that it was expected. Declaration public static readonly FieldCacheSanityChecker.InsanityType EXPECTED Field Value Type Description FieldCacheSanityChecker.InsanityType | Improve this Doc View Source SUBREADER Indicates an overlap in cache usage on a given field in sub/super readers. Declaration public static readonly FieldCacheSanityChecker.InsanityType SUBREADER Field Value Type Description FieldCacheSanityChecker.InsanityType | Improve this Doc View Source VALUEMISMATCH Indicates entries have the same reader+fieldname but different cached values. This can happen if different datatypes, or parsers are used -- and while it's not necessarily a bug it's typically an indication of a possible problem. NOTE: Only the reader, fieldname, and cached value are actually tested -- if two cache entries have different parsers or datatypes but the cached values are the same Object (== not just Equal()) this method does not consider that a red flag. This allows for subtle variations in the way a Parser is specified (null vs DEFAULT_INT64_PARSER, etc...) Declaration public static readonly FieldCacheSanityChecker.InsanityType VALUEMISMATCH Field Value Type Description FieldCacheSanityChecker.InsanityType Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also SUBREADER VALUEMISMATCH EXPECTED"
  },
  "api/Lucene.Net/Lucene.Net.Util.FilterIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FilterIterator-1.html",
    "title": "Class FilterIterator<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FilterIterator<T> An System.Collections.Generic.IEnumerator<T> implementation that filters elements with a boolean predicate. Inheritance System.Object FilterIterator<T> Implements System.Collections.Generic.IEnumerator <T> System.Collections.IEnumerator 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.Util Assembly : Lucene.Net.dll Syntax public abstract class FilterIterator<T> : IEnumerator<T>, IEnumerator, IDisposable Type Parameters Name Description T Constructors | Improve this Doc View Source FilterIterator(IEnumerator<T>) Declaration public FilterIterator(IEnumerator<T> baseIterator) Parameters Type Name Description System.Collections.Generic.IEnumerator <T> baseIterator Properties | Improve this Doc View Source Current Declaration public T Current { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source PredicateFunction(T) Returns true , if this element should be set to Current by Lucene.Net.Util.FilterIterator`1.SetNext . Declaration protected abstract bool PredicateFunction(T object) Parameters Type Name Description T object Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable See Also PredicateFunction(T)"
  },
  "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.FixedBitSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.FixedBitSetIterator.html",
    "title": "Class FixedBitSet.FixedBitSetIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FixedBitSet.FixedBitSetIterator A DocIdSetIterator which iterates over set bits in a FixedBitSet . Inheritance System.Object DocIdSetIterator FixedBitSet.FixedBitSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Util Assembly : Lucene.Net.dll Syntax public sealed class FixedBitSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source FixedBitSetIterator(FixedBitSet) Creates an iterator over the given FixedBitSet . Declaration public FixedBitSetIterator(FixedBitSet bits) Parameters Type Name Description FixedBitSet bits | Improve this Doc View Source FixedBitSetIterator(Int64[], Int32, Int32) Creates an iterator over the given array of bits. Declaration public FixedBitSetIterator(long[] bits, int numBits, int wordLength) Parameters Type Name Description System.Int64 [] bits System.Int32 numBits System.Int32 wordLength Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.html",
    "title": "Class FixedBitSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FixedBitSet BitSet of fixed length (numBits), backed by accessible ( GetBits() ) long[], accessed with an int index, implementing GetBits() and DocIdSet . If you need to manage more than 2.1B bits, use Int64BitSet . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet FixedBitSet Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) 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.Util Assembly : Lucene.Net.dll Syntax public sealed class FixedBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source FixedBitSet(Int32) Declaration public FixedBitSet(int numBits) Parameters Type Name Description System.Int32 numBits | Improve this Doc View Source FixedBitSet(Int64[], Int32) Declaration public FixedBitSet(long[] storedBits, int numBits) Parameters Type Name Description System.Int64 [] storedBits System.Int32 numBits Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source And(DocIdSetIterator) Does in-place AND of the bits provided by the iterator. Declaration public void And(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source And(FixedBitSet) this = this AND other Declaration public void And(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source AndNot(DocIdSetIterator) Does in-place AND NOT of the bits provided by the iterator. Declaration public void AndNot(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source AndNot(FixedBitSet) this = this AND NOT other Declaration public void AndNot(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source AndNotCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of \"a and not b\" or \"intersection(a, not(b))\". Neither set is modified. Declaration public static long AndNotCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Bits2words(Int32) Returns the number of 64 bit words it would take to hold numBits Declaration public static int Bits2words(int numBits) Parameters Type Name Description System.Int32 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Returns number of set bits. NOTE: this visits every System.Int64 in the backing bits array, and the result is not internally cached! Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source Clear(Int32) Declaration public void Clear(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source Clear(Int32, Int32) Clears a range of bits. Declaration public void Clear(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public FixedBitSet Clone() Returns Type Description FixedBitSet | Improve this Doc View Source EnsureCapacity(FixedBitSet, Int32) If the given FixedBitSet is large enough to hold numBits , returns the given bits, otherwise returns a new FixedBitSet which can hold the requested number of bits. NOTE: the returned bitset reuses the underlying long[] of the given bits if possible. Also, calling Length on the returned bits may return a value greater than numBits . Declaration public static FixedBitSet EnsureCapacity(FixedBitSet bits, int numBits) Parameters Type Name Description FixedBitSet bits System.Int32 numBits Returns Type Description FixedBitSet | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Flip(Int32, Int32) Flips a range of bits Declaration public void Flip(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to flip | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndClear(Int32) Declaration public bool GetAndClear(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int32) Declaration public bool GetAndSet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetBits() Expert. Declaration public long[] GetBits() Returns Type Description System.Int64 [] | 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 GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source IntersectionCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of the intersection of the two sets. Neither set is modified. Declaration public static long IntersectionCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Intersects(FixedBitSet) Returns true if the sets have any elements in common Declaration public bool Intersects(FixedBitSet other) Parameters Type Name Description FixedBitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int32) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public int NextSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source Or(DocIdSetIterator) Does in-place OR of the bits provided by the iterator. Declaration public void Or(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source Or(FixedBitSet) this = this OR other Declaration public void Or(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source PrevSetBit(Int32) Returns the index of the last set bit before or on the index specified. -1 is returned if there are no more set bits. Declaration public int PrevSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source Set(Int32) Declaration public void Set(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source Set(Int32, Int32) Sets a range of bits Declaration public void Set(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to set | Improve this Doc View Source UnionCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of the union of the two sets. Neither set is modified. Declaration public static long UnionCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Xor(DocIdSetIterator) Does in-place XOR of the bits provided by the iterator. Declaration public void Xor(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source Xor(FixedBitSet) this = this XOR other Declaration public void Xor(FixedBitSet other) Parameters Type Name Description FixedBitSet other Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.Arc-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.Arc-1.html",
    "title": "Class Builder.Arc<S> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Builder.Arc<S> Expert: holds a pending (seen but not yet serialized) arc. Inheritance System.Object Builder.Arc<S> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public class Arc<S> Type Parameters Name Description S Properties | Improve this Doc View Source IsFinal Declaration public bool IsFinal { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Label Declaration public int Label { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NextFinalOutput Declaration public S NextFinalOutput { get; set; } Property Value Type Description S | Improve this Doc View Source Output Declaration public S Output { get; set; } Property Value Type Description S | Improve this Doc View Source Target Declaration public Builder.INode Target { get; set; } Property Value Type Description Builder.INode"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.CompiledNode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.CompiledNode.html",
    "title": "Class Builder.CompiledNode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Builder.CompiledNode Inheritance System.Object Builder.CompiledNode Implements Builder.INode 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class CompiledNode : Builder.INode Properties | Improve this Doc View Source IsCompiled Declaration public bool IsCompiled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Node Declaration public long Node { get; set; } Property Value Type Description System.Int64 Implements Builder.INode"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.FreezeTail-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.FreezeTail-1.html",
    "title": "Class Builder.FreezeTail<S> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Builder.FreezeTail<S> Expert: this is invoked by Builder whenever a suffix is serialized. Inheritance System.Object Builder.FreezeTail<S> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class FreezeTail<S> Type Parameters Name Description S Methods | Improve this Doc View Source Freeze(Builder.UnCompiledNode<S>[], Int32, Int32sRef) Declaration public abstract void Freeze(Builder.UnCompiledNode<S>[] frontier, int prefixLenPlus1, Int32sRef prevInput) Parameters Type Name Description Builder.UnCompiledNode <S>[] frontier System.Int32 prefixLenPlus1 Int32sRef prevInput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.html",
    "title": "Class Builder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Builder LUCENENET specific type used to access nested types of Builder<T> without referring to its generic closing type. Inheritance System.Object Builder Builder <T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class Builder"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.INode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.INode.html",
    "title": "Interface Builder.INode | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface Builder.INode Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public interface INode Properties | Improve this Doc View Source IsCompiled Declaration bool IsCompiled { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.UnCompiledNode-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.UnCompiledNode-1.html",
    "title": "Class Builder.UnCompiledNode<S> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Builder.UnCompiledNode<S> Expert: holds a pending (seen but not yet serialized) Node. Inheritance System.Object Builder.UnCompiledNode<S> Implements Builder.INode 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class UnCompiledNode<S> : Builder.INode Type Parameters Name Description S Constructors | Improve this Doc View Source UnCompiledNode(Builder<S>, Int32) Declaration public UnCompiledNode(Builder<S> owner, int depth) Parameters Type Name Description Builder <S> owner System.Int32 depth The node's depth starting from the automaton root. Needed for LUCENE-2934 (node expansion based on conditions other than the fanout size). Properties | Improve this Doc View Source Arcs Declaration public Builder.Arc<S>[] Arcs { get; set; } Property Value Type Description Builder.Arc <S>[] | Improve this Doc View Source Depth this node's depth, starting from the automaton root. Declaration public int Depth { get; } Property Value Type Description System.Int32 | Improve this Doc View Source InputCount Declaration public long InputCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IsCompiled Declaration public bool IsCompiled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsFinal Declaration public bool IsFinal { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NumArcs Declaration public int NumArcs { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Output Declaration public S Output { get; set; } Property Value Type Description S Methods | Improve this Doc View Source AddArc(Int32, Builder.INode) Declaration public void AddArc(int label, Builder.INode target) Parameters Type Name Description System.Int32 label Builder.INode target | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source DeleteLast(Int32, Builder.INode) Declaration public void DeleteLast(int label, Builder.INode target) Parameters Type Name Description System.Int32 label Builder.INode target | Improve this Doc View Source GetLastOutput(Int32) Declaration public S GetLastOutput(int labelToMatch) Parameters Type Name Description System.Int32 labelToMatch Returns Type Description S | Improve this Doc View Source PrependOutput(S) Declaration public void PrependOutput(S outputPrefix) Parameters Type Name Description S outputPrefix | Improve this Doc View Source ReplaceLast(Int32, Builder.INode, S, Boolean) Declaration public void ReplaceLast(int labelToMatch, Builder.INode target, S nextFinalOutput, bool isFinal) Parameters Type Name Description System.Int32 labelToMatch Builder.INode target S nextFinalOutput System.Boolean isFinal | Improve this Doc View Source SetLastOutput(Int32, S) Declaration public void SetLastOutput(int labelToMatch, S newOutput) Parameters Type Name Description System.Int32 labelToMatch S newOutput Implements Builder.INode"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder-1.html",
    "title": "Class Builder<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Builder<T> Builds a minimal FST (maps an Int32sRef term to an arbitrary output) from pre-sorted terms with outputs. The FST becomes an FSA if you use NoOutputs. The FST is written on-the-fly into a compact serialized format byte array, which can be saved to / loaded from a Directory or used directly for traversal. The FST is always finite (no cycles). NOTE: The algorithm is described at http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 The parameterized type is the output type. See the subclasses of Outputs<T> . FSTs larger than 2.1GB are now possible (as of Lucene 4.2). FSTs containing more than 2.1B nodes are also now possible, however they cannot be packed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Builder Builder<T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public class Builder<T> : Builder Type Parameters Name Description T Constructors | Improve this Doc View Source Builder(FST.INPUT_TYPE, Outputs<T>) Instantiates an FST/FSA builder without any pruning. A shortcut to Builder(FST.INPUT_TYPE, Int32, Int32, Boolean, Boolean, Int32, Outputs<T>, Builder.FreezeTail<T>, Boolean, Single, Boolean, Int32) with pruning options turned off. Declaration public Builder(FST.INPUT_TYPE inputType, Outputs<T> outputs) Parameters Type Name Description FST.INPUT_TYPE inputType Outputs <T> outputs | Improve this Doc View Source Builder(FST.INPUT_TYPE, Int32, Int32, Boolean, Boolean, Int32, Outputs<T>, Builder.FreezeTail<T>, Boolean, Single, Boolean, Int32) Instantiates an FST/FSA builder with all the possible tuning and construction tweaks. Read parameter documentation carefully. Declaration public Builder(FST.INPUT_TYPE inputType, int minSuffixCount1, int minSuffixCount2, bool doShareSuffix, bool doShareNonSingletonNodes, int shareMaxTailLength, Outputs<T> outputs, Builder.FreezeTail<T> freezeTail, bool doPackFST, float acceptableOverheadRatio, bool allowArrayArcs, int bytesPageBits) Parameters Type Name Description FST.INPUT_TYPE inputType The input type (transition labels). Can be anything from FST.INPUT_TYPE enumeration. Shorter types will consume less memory. Strings (character sequences) are represented as BYTE4 (full unicode codepoints). System.Int32 minSuffixCount1 If pruning the input graph during construction, this threshold is used for telling if a node is kept or pruned. If transition_count(node) >= minSuffixCount1, the node is kept. System.Int32 minSuffixCount2 (Note: only Mike McCandless knows what this one is really doing...) System.Boolean doShareSuffix If true , the shared suffixes will be compacted into unique paths. this requires an additional RAM-intensive hash map for lookups in memory. Setting this parameter to false creates a single suffix path for all input sequences. this will result in a larger FST, but requires substantially less memory and CPU during building. System.Boolean doShareNonSingletonNodes Only used if doShareSuffix is true . Set this to true to ensure FST is fully minimal, at cost of more CPU and more RAM during building. System.Int32 shareMaxTailLength Only used if doShareSuffix is true . Set this to System.Int32.MaxValue to ensure FST is fully minimal, at cost of more CPU and more RAM during building. Outputs <T> outputs The output type for each input sequence. Applies only if building an FST. For FSA, use Singleton and NoOutput as the singleton output object. Builder.FreezeTail <T> freezeTail System.Boolean doPackFST Pass true to create a packed FST. System.Single acceptableOverheadRatio How to trade speed for space when building the FST. this option is only relevant when doPackFST is true. GetMutable(Int32, Int32, Single) System.Boolean allowArrayArcs Pass false to disable the array arc optimization while building the FST; this will make the resulting FST smaller but slower to traverse. System.Int32 bytesPageBits How many bits wide to make each byte[] block in the Lucene.Net.Util.Fst.BytesStore ; if you know the FST will be large then make this larger. For example 15 bits = 32768 byte pages. Properties | Improve this Doc View Source MappedStateCount Declaration public virtual long MappedStateCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TermCount Declaration public virtual long TermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotStateCount Declaration public virtual long TotStateCount { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(Int32sRef, T) It's OK to add the same input twice in a row with different outputs, as long as outputs impls the merge method. Note that input is fully consumed after this method is returned (so caller is free to reuse), but output is not. So if your outputs are changeable (eg ByteSequenceOutputs or Int32SequenceOutputs ) then you cannot reuse across calls. Declaration public virtual void Add(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output | Improve this Doc View Source Finish() Returns final FST. NOTE: this will return null if nothing is accepted by the FST. Declaration public virtual FST<T> Finish() Returns Type Description FST <T> | Improve this Doc View Source GetFstSizeInBytes() Declaration public virtual long GetFstSizeInBytes() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.ByteSequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.ByteSequenceOutputs.html",
    "title": "Class ByteSequenceOutputs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ByteSequenceOutputs An FST Outputs{BytesRef} implementation where each output is a sequence of bytes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < BytesRef > ByteSequenceOutputs Inherited Members Outputs<BytesRef>.WriteFinalOutput(BytesRef, DataOutput) Outputs<BytesRef>.ReadFinalOutput(DataInput) Outputs<BytesRef>.Merge(BytesRef, BytesRef) 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class ByteSequenceOutputs : Outputs<BytesRef> Properties | Improve this Doc View Source NoOutput Declaration public override BytesRef NoOutput { get; } Property Value Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static ByteSequenceOutputs Singleton { get; } Property Value Type Description ByteSequenceOutputs Methods | Improve this Doc View Source Add(BytesRef, BytesRef) Declaration public override BytesRef Add(BytesRef prefix, BytesRef output) Parameters Type Name Description BytesRef prefix BytesRef output Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Add(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Common(BytesRef, BytesRef) Declaration public override BytesRef Common(BytesRef output1, BytesRef output2) Parameters Type Name Description BytesRef output1 BytesRef output2 Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Common(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source OutputToString(BytesRef) Declaration public override string OutputToString(BytesRef output) Parameters Type Name Description BytesRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.OutputToString(Lucene.Net.Util.BytesRef) | Improve this Doc View Source Read(DataInput) Declaration public override BytesRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(BytesRef, BytesRef) Declaration public override BytesRef Subtract(BytesRef output, BytesRef inc) Parameters Type Name Description BytesRef output BytesRef inc Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Subtract(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Write(BytesRef, DataOutput) Declaration public override void Write(BytesRef prefix, DataOutput out) Parameters Type Name Description BytesRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Write(Lucene.Net.Util.BytesRef, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.html",
    "title": "Class BytesRefFSTEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. BytesRefFSTEnum.InputOutput{T} rather than BytesRefFSTEnum{T}.InputOutput{T}) Inheritance System.Object BytesRefFSTEnum 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class BytesRefFSTEnum"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.InputOutput-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.InputOutput-1.html",
    "title": "Class BytesRefFSTEnum.InputOutput<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefFSTEnum.InputOutput<T> Holds a single input ( BytesRef ) + output pair. Inheritance System.Object BytesRefFSTEnum.InputOutput<T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public class InputOutput<T> Type Parameters Name Description T Properties | Improve this Doc View Source Input Declaration public BytesRef Input { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum-1.html",
    "title": "Class BytesRefFSTEnum<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BytesRefFSTEnum<T> Enumerates all input ( BytesRef ) + output pairs in an FST. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum <T> BytesRefFSTEnum<T> Inherited Members FSTEnum<T>.m_fst FSTEnum<T>.m_arcs FSTEnum<T>.m_output FSTEnum<T>.NO_OUTPUT FSTEnum<T>.m_fstReader FSTEnum<T>.m_scratchArc FSTEnum<T>.m_upto FSTEnum<T>.m_targetLength FSTEnum<T>.RewindPrefix() FSTEnum<T>.DoNext() FSTEnum<T>.DoSeekCeil() FSTEnum<T>.DoSeekFloor() FSTEnum<T>.DoSeekExact() 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class BytesRefFSTEnum<T> : FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source BytesRefFSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration public BytesRefFSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Properties | Improve this Doc View Source Current Declaration public BytesRefFSTEnum.InputOutput<T> Current { get; } Property Value Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source CurrentLabel Declaration protected override int CurrentLabel { get; set; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.CurrentLabel | Improve this Doc View Source TargetLabel Declaration protected override int TargetLabel { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.TargetLabel Methods | Improve this Doc View Source Grow() Declaration protected override void Grow() Overrides Lucene.Net.Util.Fst.FSTEnum<T>.Grow() | Improve this Doc View Source Next() Declaration public BytesRefFSTEnum.InputOutput<T> Next() Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekCeil(BytesRef) Seeks to smallest term that's >= target. Declaration public BytesRefFSTEnum.InputOutput<T> SeekCeil(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekExact(BytesRef) Seeks to exactly this term, returning null if the term doesn't exist. This is faster than using SeekFloor(BytesRef) or SeekCeil(BytesRef) because it short-circuits as soon the match is not found. Declaration public BytesRefFSTEnum.InputOutput<T> SeekExact(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekFloor(BytesRef) Seeks to biggest term that's <= target. Declaration public BytesRefFSTEnum.InputOutput<T> SeekFloor(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.CharSequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.CharSequenceOutputs.html",
    "title": "Class CharSequenceOutputs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class CharSequenceOutputs An FST Outputs<T> implementation where each output is a sequence of characters. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < CharsRef > CharSequenceOutputs Inherited Members Outputs<CharsRef>.WriteFinalOutput(CharsRef, DataOutput) Outputs<CharsRef>.ReadFinalOutput(DataInput) Outputs<CharsRef>.Merge(CharsRef, CharsRef) 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class CharSequenceOutputs : Outputs<CharsRef> Properties | Improve this Doc View Source NoOutput Declaration public override CharsRef NoOutput { get; } Property Value Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static CharSequenceOutputs Singleton { get; } Property Value Type Description CharSequenceOutputs Methods | Improve this Doc View Source Add(CharsRef, CharsRef) Declaration public override CharsRef Add(CharsRef prefix, CharsRef output) Parameters Type Name Description CharsRef prefix CharsRef output Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Add(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source Common(CharsRef, CharsRef) Declaration public override CharsRef Common(CharsRef output1, CharsRef output2) Parameters Type Name Description CharsRef output1 CharsRef output2 Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Common(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source OutputToString(CharsRef) Declaration public override string OutputToString(CharsRef output) Parameters Type Name Description CharsRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.OutputToString(Lucene.Net.Util.CharsRef) | Improve this Doc View Source Read(DataInput) Declaration public override CharsRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(CharsRef, CharsRef) Declaration public override CharsRef Subtract(CharsRef output, CharsRef inc) Parameters Type Name Description CharsRef output CharsRef inc Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Subtract(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source Write(CharsRef, DataOutput) Declaration public override void Write(CharsRef prefix, DataOutput out) Parameters Type Name Description CharsRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Write(Lucene.Net.Util.CharsRef, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.Arc-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.Arc-1.html",
    "title": "Class FST.Arc<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FST.Arc<T> Represents a single arc. Inheritance System.Object FST.Arc<T> 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) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Arc<T> Type Parameters Name Description T Properties | Improve this Doc View Source IsFinal Declaration public virtual bool IsFinal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsLast Declaration public virtual bool IsLast { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Label Declaration public int Label { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NextFinalOutput Declaration public T NextFinalOutput { get; set; } Property Value Type Description T | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T | Improve this Doc View Source Target To node (ord or address) Declaration public long Target { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(FST.Arc<T>) Return this Declaration public FST.Arc<T> CopyFrom(FST.Arc<T> other) Parameters Type Name Description FST.Arc <T> other Returns Type Description FST.Arc <T> | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.BytesReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.BytesReader.html",
    "title": "Class FST.BytesReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FST.BytesReader Reads bytes stored in an FST. Inheritance System.Object DataInput FST.BytesReader Inherited Members DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class BytesReader : DataInput Properties | Improve this Doc View Source IsReversed Returns true if this reader uses reversed bytes under-the-hood. Declaration public abstract bool IsReversed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Position Current read position Declaration public abstract long Position { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source SkipBytes(Int32) Skips bytes. Declaration public abstract void SkipBytes(int count) Parameters Type Name Description System.Int32 count"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.html",
    "title": "Class FST | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FST LUCENENET specific: This new base class is to mimic Java's ability to use nested types without specifying a type parameter. i.e. FST.BytesReader instead of FST<BytesRef>.BytesReader Inheritance System.Object FST 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class FST Constructors | Improve this Doc View Source FST() Declaration public FST() Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_BITS Declaration public static readonly int DEFAULT_MAX_BLOCK_BITS Field Value Type Description System.Int32 | Improve this Doc View Source END_LABEL If arc has this label then that arc is final/accepted Declaration public static readonly int END_LABEL Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_NUM_ARCS_DEEP Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_NUM_ARCS_DEEP = 10 Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_NUM_ARCS_SHALLOW Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_NUM_ARCS_SHALLOW = 5 Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_SHALLOW_DISTANCE Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_SHALLOW_DISTANCE = 3 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Read<T>(FileInfo, Outputs<T>) Reads an automaton from a file. Declaration public static FST<T> Read<T>(FileInfo file, Outputs<T> outputs) Parameters Type Name Description System.IO.FileInfo file Outputs <T> outputs Returns Type Description FST <T> Type Parameters Name Description T | Improve this Doc View Source TargetHasArcs<T>(FST.Arc<T>) returns true if the node at this address has any outgoing arcs Declaration public static bool TargetHasArcs<T>(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description System.Boolean Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.INPUT_TYPE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.INPUT_TYPE.html",
    "title": "Enum FST.INPUT_TYPE | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum FST.INPUT_TYPE Specifies allowed range of each int input label for this FST. Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public enum INPUT_TYPE Fields Name Description BYTE1 BYTE2 BYTE4"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST-1.html",
    "title": "Class FST<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FST<T> Represents an finite state machine (FST), using a compact byte[] format. The format is similar to what's used by Morfologik ( http://sourceforge.net/projects/morfologik ). See the FST package documentation for some simple examples. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FST<T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class FST<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FST(DataInput, Outputs<T>) Load a previously saved FST. Declaration public FST(DataInput in, Outputs<T> outputs) Parameters Type Name Description DataInput in Outputs <T> outputs | Improve this Doc View Source FST(DataInput, Outputs<T>, Int32) Load a previously saved FST; maxBlockBits allows you to control the size of the byte[] pages used to hold the FST bytes. Declaration public FST(DataInput in, Outputs<T> outputs, int maxBlockBits) Parameters Type Name Description DataInput in Outputs <T> outputs System.Int32 maxBlockBits Properties | Improve this Doc View Source ArcCount Declaration public long ArcCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source ArcWithOutputCount Declaration public long ArcWithOutputCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source EmptyOutput Declaration public T EmptyOutput { get; set; } Property Value Type Description T | Improve this Doc View Source InputType Declaration public FST.INPUT_TYPE InputType { get; } Property Value Type Description FST.INPUT_TYPE | Improve this Doc View Source NodeCount Declaration public long NodeCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Outputs Declaration public Outputs<T> Outputs { get; } Property Value Type Description Outputs <T> Methods | Improve this Doc View Source FindTargetArc(Int32, FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Finds an arc leaving the incoming arc , replacing the arc in place. this returns null if the arc was not found, else the incoming arc . Declaration public FST.Arc<T> FindTargetArc(int labelToMatch, FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int32 labelToMatch FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source GetBytesReader() Returns a FST.BytesReader for this FST, positioned at position 0. Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader | Improve this Doc View Source GetFirstArc(FST.Arc<T>) Fills virtual 'start' arc, ie, an empty incoming arc to the FST's start node Declaration public FST.Arc<T> GetFirstArc(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description FST.Arc <T> | Improve this Doc View Source GetSizeInBytes() Returns bytes used to represent the FST Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ReadFirstRealTargetArc(Int64, FST.Arc<T>, FST.BytesReader) Declaration public FST.Arc<T> ReadFirstRealTargetArc(long node, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int64 node FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadFirstTargetArc(FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Follow the follow arc and read the first arc of its target; this changes the provided arc (2nd arg) in-place and returns it. Declaration public FST.Arc<T> ReadFirstTargetArc(FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> Returns the second argument ( arc ). | Improve this Doc View Source ReadLastTargetArc(FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Follows the follow arc and reads the last arc of its target; this changes the provided arc (2nd arg) in-place and returns it. Declaration public FST.Arc<T> ReadLastTargetArc(FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> Returns the second argument ( arc ). | Improve this Doc View Source ReadNextArc(FST.Arc<T>, FST.BytesReader) In-place read; returns the arc. Declaration public FST.Arc<T> ReadNextArc(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadNextArcLabel(FST.Arc<T>, FST.BytesReader) Peeks at next arc's label; does not alter arc . Do not call this if arc.IsLast! Declaration public int ReadNextArcLabel(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description System.Int32 | Improve this Doc View Source ReadNextRealArc(FST.Arc<T>, FST.BytesReader) Never returns null , but you should never call this if arc.IsLast is true . Declaration public FST.Arc<T> ReadNextRealArc(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadRootArcs(FST.Arc<T>[]) Declaration public void ReadRootArcs(FST.Arc<T>[] arcs) Parameters Type Name Description FST.Arc <T>[] arcs | Improve this Doc View Source Save(DataOutput) Declaration public void Save(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source Save(FileInfo) Writes an automaton to a file. Declaration public void Save(FileInfo file) Parameters Type Name Description System.IO.FileInfo file | Improve this Doc View Source TargetHasArcs(FST.Arc<T>) returns true if the node at this address has any outgoing arcs Declaration public static bool TargetHasArcs(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FSTEnum-1.html",
    "title": "Class FSTEnum<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class FSTEnum<T> Can Next() and Advance() through the terms in an FST This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum<T> BytesRefFSTEnum<T> Int32sRefFSTEnum<T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration protected FSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Fields | Improve this Doc View Source m_arcs Declaration protected FST.Arc<T>[] m_arcs Field Value Type Description FST.Arc <T>[] | Improve this Doc View Source m_fst Declaration protected readonly FST<T> m_fst Field Value Type Description FST <T> | Improve this Doc View Source m_fstReader Declaration protected readonly FST.BytesReader m_fstReader Field Value Type Description FST.BytesReader | Improve this Doc View Source m_output Declaration protected T[] m_output Field Value Type Description T[] | Improve this Doc View Source m_scratchArc Declaration protected readonly FST.Arc<T> m_scratchArc Field Value Type Description FST.Arc <T> | Improve this Doc View Source m_targetLength Declaration protected int m_targetLength Field Value Type Description System.Int32 | Improve this Doc View Source m_upto Declaration protected int m_upto Field Value Type Description System.Int32 | Improve this Doc View Source NO_OUTPUT Declaration protected readonly T NO_OUTPUT Field Value Type Description T Properties | Improve this Doc View Source CurrentLabel Declaration protected abstract int CurrentLabel { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TargetLabel Declaration protected abstract int TargetLabel { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source DoNext() Declaration protected virtual void DoNext() | Improve this Doc View Source DoSeekCeil() Seeks to smallest term that's >= target. Declaration protected virtual void DoSeekCeil() | Improve this Doc View Source DoSeekExact() Seeks to exactly target term. Declaration protected virtual bool DoSeekExact() Returns Type Description System.Boolean | Improve this Doc View Source DoSeekFloor() Seeks to largest term that's <= target. Declaration protected virtual void DoSeekFloor() | Improve this Doc View Source Grow() Declaration protected abstract void Grow() | Improve this Doc View Source RewindPrefix() Rewinds enum state to match the shared prefix between current term and target term Declaration protected void RewindPrefix()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.html",
    "title": "Namespace Lucene.Net.Util.Fst | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Fst <!-- 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. --> Misc FST classes. Classes Builder LUCENENET specific type used to access nested types of Builder<T> without referring to its generic closing type. Builder.Arc<S> Expert: holds a pending (seen but not yet serialized) arc. Builder.CompiledNode Builder.FreezeTail<S> Expert: this is invoked by Builder whenever a suffix is serialized. Builder.UnCompiledNode<S> Expert: holds a pending (seen but not yet serialized) Node. Builder<T> Builds a minimal FST (maps an Int32sRef term to an arbitrary output) from pre-sorted terms with outputs. The FST becomes an FSA if you use NoOutputs. The FST is written on-the-fly into a compact serialized format byte array, which can be saved to / loaded from a Directory or used directly for traversal. The FST is always finite (no cycles). NOTE: The algorithm is described at http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 The parameterized type is the output type. See the subclasses of Outputs<T> . FSTs larger than 2.1GB are now possible (as of Lucene 4.2). FSTs containing more than 2.1B nodes are also now possible, however they cannot be packed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteSequenceOutputs An FST Outputs{BytesRef} implementation where each output is a sequence of bytes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BytesRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. BytesRefFSTEnum.InputOutput{T} rather than BytesRefFSTEnum{T}.InputOutput{T}) BytesRefFSTEnum.InputOutput<T> Holds a single input ( BytesRef ) + output pair. BytesRefFSTEnum<T> Enumerates all input ( BytesRef ) + output pairs in an FST. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CharSequenceOutputs An FST Outputs<T> implementation where each output is a sequence of characters. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FST LUCENENET specific: This new base class is to mimic Java's ability to use nested types without specifying a type parameter. i.e. FST.BytesReader instead of FST<BytesRef>.BytesReader FST.Arc<T> Represents a single arc. FST.BytesReader Reads bytes stored in an FST. FST<T> Represents an finite state machine (FST), using a compact byte[] format. The format is similar to what's used by Morfologik ( http://sourceforge.net/projects/morfologik ). See the FST package documentation for some simple examples. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTEnum<T> Can Next() and Advance() through the terms in an FST This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32SequenceOutputs An FST Outputs<T> implementation where each output is a sequence of System.Int32 s. NOTE: This was IntSequenceOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32sRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. Int32sRefFSTEnum.InputOutput{T} rather than Int32sRefFSTEnum{T}.InputOutput{T} ) NOTE: This was Int32sRefFSTEnum{T} in Lucene Int32sRefFSTEnum.InputOutput<T> Holds a single input ( Int32sRef ) + output pair. Int32sRefFSTEnum<T> Enumerates all input ( Int32sRef ) + output pairs in an FST. NOTE: This was IntsRefFSTEnum{T} in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk NoOutputs A null FST Outputs<T> implementation; use this if you just want to build an FSA. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Outputs<T> Represents the outputs for an FST, providing the basic algebra required for building and traversing the FST. Note that any operation that returns NO_OUTPUT must return the same singleton object from NoOutput . LUCENENET IMPORTANT: If T is a collection type, it must implement System.Collections.IStructuralEquatable in order to properly compare its nested values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PairOutputs<A, B> An FST Outputs<T> implementation, holding two other outputs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PairOutputs<A, B>.Pair Holds a single pair of two outputs. PositiveInt32Outputs An FST Outputs<T> implementation where each output is a non-negative value. NOTE: This was PositiveIntOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util Static helper methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util.FSTPath<T> Represents a path in TopNSearcher. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util.Result<T> Holds a single input ( Int32sRef ) + output, returned by ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) . Util.TopNSearcher<T> Utility class to find top N shortest paths from start point(s). Util.TopResults<T> Holds the results for a top N search using Util.TopNSearcher<T> Interfaces Builder.INode Enums FST.INPUT_TYPE Specifies allowed range of each int input label for this FST."
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32SequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32SequenceOutputs.html",
    "title": "Class Int32SequenceOutputs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32SequenceOutputs An FST Outputs<T> implementation where each output is a sequence of System.Int32 s. NOTE: This was IntSequenceOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < Int32sRef > Int32SequenceOutputs Inherited Members Outputs<Int32sRef>.WriteFinalOutput(Int32sRef, DataOutput) Outputs<Int32sRef>.ReadFinalOutput(DataInput) Outputs<Int32sRef>.Merge(Int32sRef, Int32sRef) 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32SequenceOutputs : Outputs<Int32sRef> Properties | Improve this Doc View Source NoOutput Declaration public override Int32sRef NoOutput { get; } Property Value Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static Int32SequenceOutputs Singleton { get; } Property Value Type Description Int32SequenceOutputs Methods | Improve this Doc View Source Add(Int32sRef, Int32sRef) Declaration public override Int32sRef Add(Int32sRef prefix, Int32sRef output) Parameters Type Name Description Int32sRef prefix Int32sRef output Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Add(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Common(Int32sRef, Int32sRef) Declaration public override Int32sRef Common(Int32sRef output1, Int32sRef output2) Parameters Type Name Description Int32sRef output1 Int32sRef output2 Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Common(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source OutputToString(Int32sRef) Declaration public override string OutputToString(Int32sRef output) Parameters Type Name Description Int32sRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.OutputToString(Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Read(DataInput) Declaration public override Int32sRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Int32sRef, Int32sRef) Declaration public override Int32sRef Subtract(Int32sRef output, Int32sRef inc) Parameters Type Name Description Int32sRef output Int32sRef inc Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Subtract(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Write(Int32sRef, DataOutput) Declaration public override void Write(Int32sRef prefix, DataOutput out) Parameters Type Name Description Int32sRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Write(Lucene.Net.Util.Int32sRef, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.html",
    "title": "Class Int32sRefFSTEnum | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32sRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. Int32sRefFSTEnum.InputOutput{T} rather than Int32sRefFSTEnum{T}.InputOutput{T} ) NOTE: This was Int32sRefFSTEnum{T} in Lucene Inheritance System.Object Int32sRefFSTEnum 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32sRefFSTEnum"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.InputOutput-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.InputOutput-1.html",
    "title": "Class Int32sRefFSTEnum.InputOutput<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32sRefFSTEnum.InputOutput<T> Holds a single input ( Int32sRef ) + output pair. Inheritance System.Object Int32sRefFSTEnum.InputOutput<T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public class InputOutput<T> Type Parameters Name Description T Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; set; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum-1.html",
    "title": "Class Int32sRefFSTEnum<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32sRefFSTEnum<T> Enumerates all input ( Int32sRef ) + output pairs in an FST. NOTE: This was IntsRefFSTEnum{T} in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum <T> Int32sRefFSTEnum<T> Inherited Members FSTEnum<T>.m_fst FSTEnum<T>.m_arcs FSTEnum<T>.m_output FSTEnum<T>.NO_OUTPUT FSTEnum<T>.m_fstReader FSTEnum<T>.m_scratchArc FSTEnum<T>.m_upto FSTEnum<T>.m_targetLength FSTEnum<T>.RewindPrefix() FSTEnum<T>.DoNext() FSTEnum<T>.DoSeekCeil() FSTEnum<T>.DoSeekFloor() FSTEnum<T>.DoSeekExact() 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32sRefFSTEnum<T> : FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source Int32sRefFSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration public Int32sRefFSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Properties | Improve this Doc View Source Current Declaration public Int32sRefFSTEnum.InputOutput<T> Current { get; } Property Value Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source CurrentLabel Declaration protected override int CurrentLabel { get; set; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.CurrentLabel | Improve this Doc View Source TargetLabel Declaration protected override int TargetLabel { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.TargetLabel Methods | Improve this Doc View Source Grow() Declaration protected override void Grow() Overrides Lucene.Net.Util.Fst.FSTEnum<T>.Grow() | Improve this Doc View Source Next() Declaration public Int32sRefFSTEnum.InputOutput<T> Next() Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekCeil(Int32sRef) Seeks to smallest term that's >= target. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekCeil(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekExact(Int32sRef) Seeks to exactly this term, returning null if the term doesn't exist. This is faster than using SeekFloor(Int32sRef) or SeekCeil(Int32sRef) because it short-circuits as soon the match is not found. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekExact(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekFloor(Int32sRef) Seeks to biggest term that's <= target. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekFloor(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.NoOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.NoOutputs.html",
    "title": "Class NoOutputs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NoOutputs A null FST Outputs<T> implementation; use this if you just want to build an FSA. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Object > NoOutputs Inherited Members Outputs<Object>.WriteFinalOutput(Object, DataOutput) Outputs<Object>.ReadFinalOutput(DataInput) 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class NoOutputs : Outputs<object> Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput | Improve this Doc View Source Singleton Declaration public static NoOutputs Singleton { get; } Property Value Type Description NoOutputs Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object output, object inc) Parameters Type Name Description System.Object output System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object prefix, DataOutput out) Parameters Type Name Description System.Object prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Outputs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Outputs-1.html",
    "title": "Class Outputs<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Outputs<T> Represents the outputs for an FST, providing the basic algebra required for building and traversing the FST. Note that any operation that returns NO_OUTPUT must return the same singleton object from NoOutput . LUCENENET IMPORTANT: If T is a collection type, it must implement System.Collections.IStructuralEquatable in order to properly compare its nested values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs<T> ByteSequenceOutputs CharSequenceOutputs Int32SequenceOutputs NoOutputs PairOutputs<A, B> PositiveInt32Outputs 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.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class Outputs<T> Type Parameters Name Description T Properties | Improve this Doc View Source NoOutput NOTE: this output is compared with == so you must ensure that all methods return the single object if it's really no output Declaration public abstract T NoOutput { get; } Property Value Type Description T Methods | Improve this Doc View Source Add(T, T) Eg add(\"foo\", \"bar\") -> \"foobar\" Declaration public abstract T Add(T prefix, T output) Parameters Type Name Description T prefix T output Returns Type Description T | Improve this Doc View Source Common(T, T) Eg common(\"foobar\", \"food\") -> \"foo\" Declaration public abstract T Common(T output1, T output2) Parameters Type Name Description T output1 T output2 Returns Type Description T | Improve this Doc View Source Merge(T, T) Declaration public virtual T Merge(T first, T second) Parameters Type Name Description T first T second Returns Type Description T | Improve this Doc View Source OutputToString(T) Declaration public abstract string OutputToString(T output) Parameters Type Name Description T output Returns Type Description System.String | Improve this Doc View Source Read(DataInput) Decode an output value previously written with Write(T, DataOutput) . Declaration public abstract T Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description T | Improve this Doc View Source ReadFinalOutput(DataInput) Decode an output value previously written with WriteFinalOutput(T, DataOutput) . By default this just calls Read(DataInput) . Declaration public virtual T ReadFinalOutput(DataInput in) Parameters Type Name Description DataInput in Returns Type Description T | Improve this Doc View Source Subtract(T, T) Eg subtract(\"foobar\", \"foo\") -> \"bar\" Declaration public abstract T Subtract(T output, T inc) Parameters Type Name Description T output T inc Returns Type Description T | Improve this Doc View Source Write(T, DataOutput) Encode an output value into a DataOutput . Declaration public abstract void Write(T output, DataOutput out) Parameters Type Name Description T output DataOutput out | Improve this Doc View Source WriteFinalOutput(T, DataOutput) Encode an final node output value into a DataOutput . By default this just calls Write(T, DataOutput) . Declaration public virtual void WriteFinalOutput(T output, DataOutput out) Parameters Type Name Description T output DataOutput out"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.html",
    "title": "Class PairOutputs<A, B> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PairOutputs<A, B> An FST Outputs<T> implementation, holding two other outputs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < PairOutputs.Pair <>> PairOutputs<A, B> Inherited Members Outputs<PairOutputs<A, B>.Pair>.WriteFinalOutput(PairOutputs.Pair<>, DataOutput) Outputs<PairOutputs<A, B>.Pair>.ReadFinalOutput(DataInput) Outputs<PairOutputs<A, B>.Pair>.Merge(PairOutputs.Pair<>, PairOutputs.Pair<>) 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.Util.Fst Assembly : Lucene.Net.dll Syntax public class PairOutputs<A, B> : Outputs<PairOutputs<A, B>.Pair> Type Parameters Name Description A B Constructors | Improve this Doc View Source PairOutputs(Outputs<A>, Outputs<B>) Declaration public PairOutputs(Outputs<A> outputs1, Outputs<B> outputs2) Parameters Type Name Description Outputs <A> outputs1 Outputs <B> outputs2 Properties | Improve this Doc View Source NoOutput Declaration public override PairOutputs<A, B>.Pair NoOutput { get; } Property Value Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.NoOutput Methods | Improve this Doc View Source Add(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Add(PairOutputs<A, B>.Pair prefix, PairOutputs<A, B>.Pair output) Parameters Type Name Description PairOutputs.Pair <> prefix PairOutputs.Pair <> output Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Add(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source Common(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Common(PairOutputs<A, B>.Pair pair1, PairOutputs<A, B>.Pair pair2) Parameters Type Name Description PairOutputs.Pair <> pair1 PairOutputs.Pair <> pair2 Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Common(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source NewPair(A, B) Create a new PairOutputs<A, B>.Pair Declaration public virtual PairOutputs<A, B>.Pair NewPair(A a, B b) Parameters Type Name Description A a B b Returns Type Description PairOutputs.Pair <> | Improve this Doc View Source OutputToString(PairOutputs<A, B>.Pair) Declaration public override string OutputToString(PairOutputs<A, B>.Pair output) Parameters Type Name Description PairOutputs.Pair <> output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.OutputToString(Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source Read(DataInput) Declaration public override PairOutputs<A, B>.Pair Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Subtract(PairOutputs<A, B>.Pair output, PairOutputs<A, B>.Pair inc) Parameters Type Name Description PairOutputs.Pair <> output PairOutputs.Pair <> inc Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Subtract(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(PairOutputs<A, B>.Pair, DataOutput) Declaration public override void Write(PairOutputs<A, B>.Pair output, DataOutput writer) Parameters Type Name Description PairOutputs.Pair <> output DataOutput writer Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Write(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.Pair.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.Pair.html",
    "title": "Class PairOutputs<A, B>.Pair | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PairOutputs<A, B>.Pair Holds a single pair of two outputs. Inheritance System.Object PairOutputs<A, B>.Pair 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.Util.Fst Assembly : Lucene.Net.dll Syntax public class Pair Properties | Improve this Doc View Source Output1 Declaration public A Output1 { get; } Property Value Type Description A | Improve this Doc View Source Output2 Declaration public B Output2 { get; } Property Value Type Description B 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()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PositiveInt32Outputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PositiveInt32Outputs.html",
    "title": "Class PositiveInt32Outputs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PositiveInt32Outputs An FST Outputs<T> implementation where each output is a non-negative value. NOTE: This was PositiveIntOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Nullable < System.Int64 >> PositiveInt32Outputs Inherited Members Outputs<Nullable<Int64>>.WriteFinalOutput(Nullable<Int64>, DataOutput) Outputs<Nullable<Int64>>.ReadFinalOutput(DataInput) Outputs<Nullable<Int64>>.Merge(Nullable<Int64>, Nullable<Int64>) 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class PositiveInt32Outputs : Outputs<long?> Properties | Improve this Doc View Source NoOutput Declaration public override long? NoOutput { get; } Property Value Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.NoOutput | Improve this Doc View Source Singleton Declaration public static PositiveInt32Outputs Singleton { get; } Property Value Type Description PositiveInt32Outputs Methods | Improve this Doc View Source Add(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Add(long? prefix, long? output) Parameters Type Name Description System.Nullable < System.Int64 > prefix System.Nullable < System.Int64 > output Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Add(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source Common(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Common(long? output1, long? output2) Parameters Type Name Description System.Nullable < System.Int64 > output1 System.Nullable < System.Int64 > output2 Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Common(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source OutputToString(Nullable<Int64>) Declaration public override string OutputToString(long? output) Parameters Type Name Description System.Nullable < System.Int64 > output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.OutputToString(System.Nullable<System.Int64>) | Improve this Doc View Source Read(DataInput) Declaration public override long? Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Subtract(long? output, long? inc) Parameters Type Name Description System.Nullable < System.Int64 > output System.Nullable < System.Int64 > inc Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Subtract(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(Nullable<Int64>, DataOutput) Declaration public override void Write(long? output, DataOutput out) Parameters Type Name Description System.Nullable < System.Int64 > output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Write(System.Nullable<System.Int64>, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.FSTPath-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.FSTPath-1.html",
    "title": "Class Util.FSTPath<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Util.FSTPath<T> Represents a path in TopNSearcher. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Util.FSTPath<T> 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) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class FSTPath<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FSTPath(T, FST.Arc<T>, Int32sRef) Sole constructor Declaration public FSTPath(T cost, FST.Arc<T> arc, Int32sRef input) Parameters Type Name Description T cost FST.Arc <T> arc Int32sRef input Properties | Improve this Doc View Source Arc Declaration public FST.Arc<T> Arc { get; set; } Property Value Type Description FST.Arc <T> | Improve this Doc View Source Cost Declaration public T Cost { get; set; } Property Value Type Description T | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.html",
    "title": "Class Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Util Static helper methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Util 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Util Methods | Improve this Doc View Source Get<T>(FST<T>, BytesRef) Looks up the output for this input, or null if the input is not accepted Declaration public static T Get<T>(FST<T> fst, BytesRef input) Parameters Type Name Description FST <T> fst BytesRef input Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source Get<T>(FST<T>, Int32sRef) Looks up the output for this input, or null if the input is not accepted. Declaration public static T Get<T>(FST<T> fst, Int32sRef input) Parameters Type Name Description FST <T> fst Int32sRef input Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source GetByOutput(FST<Nullable<Int64>>, Int64) Reverse lookup (lookup by output instead of by input), in the special case when your FSTs outputs are strictly ascending. This locates the input/output pair where the output is equal to the target, and will return null if that output does not exist. NOTE: this only works with , only works when the outputs are ascending in order with the inputs. For example, simple ordinals (0, 1, 2, ...), or file offets (when appending to a file) fit this. Declaration public static Int32sRef GetByOutput(FST<long?> fst, long targetOutput) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Int64 targetOutput Returns Type Description Int32sRef | Improve this Doc View Source GetByOutput(FST<Nullable<Int64>>, Int64, FST.BytesReader, FST.Arc<Nullable<Int64>>, FST.Arc<Nullable<Int64>>, Int32sRef) Expert: like GetByOutput(FST<Nullable<Int64>>, Int64) except reusing FST.BytesReader , initial and scratch Arc, and result. Declaration public static Int32sRef GetByOutput(FST<long?> fst, long targetOutput, FST.BytesReader in, FST.Arc<long?> arc, FST.Arc<long?> scratchArc, Int32sRef result) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Int64 targetOutput FST.BytesReader in FST.Arc < System.Nullable < System.Int64 >> arc FST.Arc < System.Nullable < System.Int64 >> scratchArc Int32sRef result Returns Type Description Int32sRef | Improve this Doc View Source ReadCeilArc<T>(Int32, FST<T>, FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Reads the first arc greater or equal that the given label into the provided arc in place and returns it iff found, otherwise return null . Declaration public static FST.Arc<T> ReadCeilArc<T>(int label, FST<T> fst, FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int32 label the label to ceil on FST <T> fst the fst to operate on FST.Arc <T> follow the arc to follow reading the label from FST.Arc <T> arc the arc to read into in place FST.BytesReader in the fst's FST.BytesReader Returns Type Description FST.Arc <T> Type Parameters Name Description T | Improve this Doc View Source ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) Starting from node, find the top N min cost completions to a final node. Declaration public static Util.TopResults<T> ShortestPaths<T>(FST<T> fst, FST.Arc<T> fromNode, T startOutput, IComparer<T> comparer, int topN, bool allowEmptyString) Parameters Type Name Description FST <T> fst FST.Arc <T> fromNode T startOutput System.Collections.Generic.IComparer <T> comparer System.Int32 topN System.Boolean allowEmptyString Returns Type Description Util.TopResults <T> Type Parameters Name Description T | Improve this Doc View Source ToBytesRef(Int32sRef, BytesRef) Just converts Int32sRef to BytesRef ; you must ensure the System.Int32 values fit into a System.Byte . Declaration public static BytesRef ToBytesRef(Int32sRef input, BytesRef scratch) Parameters Type Name Description Int32sRef input BytesRef scratch Returns Type Description BytesRef | Improve this Doc View Source ToDot<T>(FST<T>, TextWriter, Boolean, Boolean) Dumps an FST<T> to a GraphViz's dot language description for visualization. Example of use: using (TextWriter sw = new StreamWriter(\"out.dot\")) { Util.ToDot(fst, sw, true, true); } and then, from command line: dot -Tpng -o out.png out.dot Note: larger FSTs (a few thousand nodes) won't even render, don't bother. If the FST is > 2.1 GB in size then this method will throw strange exceptions. See also http://www.graphviz.org/ . Declaration public static void ToDot<T>(FST<T> fst, TextWriter out, bool sameRank, bool labelStates) Parameters Type Name Description FST <T> fst System.IO.TextWriter out System.Boolean sameRank If true , the resulting dot file will try to order states in layers of breadth-first traversal. This may mess up arcs, but makes the output FST's structure a bit clearer. System.Boolean labelStates If true states will have labels equal to their offsets in their binary format. Expands the graph considerably. Type Parameters Name Description T | Improve this Doc View Source ToInt32sRef(BytesRef, Int32sRef) Just takes unsigned byte values from the BytesRef and converts into an Int32sRef . NOTE: This was toIntsRef() in Lucene Declaration public static Int32sRef ToInt32sRef(BytesRef input, Int32sRef scratch) Parameters Type Name Description BytesRef input Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF16(String, Int32sRef) Just maps each UTF16 unit (char) to the System.Int32 s in an Int32sRef . Declaration public static Int32sRef ToUTF16(string s, Int32sRef scratch) Parameters Type Name Description System.String s Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF32(Char[], Int32, Int32, Int32sRef) Decodes the Unicode codepoints from the provided char[] and places them in the provided scratch Int32sRef , which must not be null , returning it. Declaration public static Int32sRef ToUTF32(char[] s, int offset, int length, Int32sRef scratch) Parameters Type Name Description System.Char [] s System.Int32 offset System.Int32 length Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF32(String, Int32sRef) Decodes the Unicode codepoints from the provided J2N.Text.ICharSequence and places them in the provided scratch Int32sRef , which must not be null , returning it. Declaration public static Int32sRef ToUTF32(string s, Int32sRef scratch) Parameters Type Name Description System.String s Int32sRef scratch Returns Type Description Int32sRef"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.Result-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.Result-1.html",
    "title": "Class Util.Result<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Util.Result<T> Holds a single input ( Int32sRef ) + output, returned by ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) . Inheritance System.Object Util.Result<T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Result<T> Type Parameters Name Description T Constructors | Improve this Doc View Source Result(Int32sRef, T) Declaration public Result(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; } Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopNSearcher-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopNSearcher-1.html",
    "title": "Class Util.TopNSearcher<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Util.TopNSearcher<T> Utility class to find top N shortest paths from start point(s). Inheritance System.Object Util.TopNSearcher<T> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public class TopNSearcher<T> Type Parameters Name Description T Constructors | Improve this Doc View Source TopNSearcher(FST<T>, Int32, Int32, IComparer<T>) Creates an unbounded TopNSearcher Declaration public TopNSearcher(FST<T> fst, int topN, int maxQueueDepth, IComparer<T> comparer) Parameters Type Name Description FST <T> fst the FST<T> to search on System.Int32 topN the number of top scoring entries to retrieve System.Int32 maxQueueDepth the maximum size of the queue of possible top entries System.Collections.Generic.IComparer <T> comparer the comparer to select the top N Methods | Improve this Doc View Source AcceptResult(Int32sRef, T) Declaration protected virtual bool AcceptResult(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Returns Type Description System.Boolean | Improve this Doc View Source AddIfCompetitive(Util.FSTPath<T>) If back plus this arc is competitive then add to queue: Declaration protected virtual void AddIfCompetitive(Util.FSTPath<T> path) Parameters Type Name Description Util.FSTPath <T> path | Improve this Doc View Source AddStartPaths(FST.Arc<T>, T, Boolean, Int32sRef) Adds all leaving arcs, including 'finished' arc, if the node is final, from this node into the queue. Declaration public virtual void AddStartPaths(FST.Arc<T> node, T startOutput, bool allowEmptyString, Int32sRef input) Parameters Type Name Description FST.Arc <T> node T startOutput System.Boolean allowEmptyString Int32sRef input | Improve this Doc View Source Search() Declaration public virtual Util.TopResults<T> Search() Returns Type Description Util.TopResults <T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopResults-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopResults-1.html",
    "title": "Class Util.TopResults<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Util.TopResults<T> Holds the results for a top N search using Util.TopNSearcher<T> Inheritance System.Object Util.TopResults<T> Implements System.Collections.Generic.IEnumerable < Util.Result <T>> 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.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class TopResults<T> : IEnumerable<Util.Result<T>>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source IsComplete true iff this is a complete result ie. if the specified queue size was large enough to find the complete list of results. this might be false if the Util.TopNSearcher<T> rejected too many results. Declaration public bool IsComplete { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TopN The top results Declaration public IList<Util.Result<T>> TopN { get; } Property Value Type Description System.Collections.Generic.IList < Util.Result <T>> Methods | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<Util.Result<T>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Util.Result <T>> Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Util.GrowableByteArrayDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.GrowableByteArrayDataOutput.html",
    "title": "Class GrowableByteArrayDataOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GrowableByteArrayDataOutput A DataOutput that can be used to build a byte[] . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataOutput GrowableByteArrayDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Util Assembly : Lucene.Net.dll Syntax public sealed class GrowableByteArrayDataOutput : DataOutput Constructors | Improve this Doc View Source GrowableByteArrayDataOutput(Int32) Create a GrowableByteArrayDataOutput with the given initial capacity. Declaration public GrowableByteArrayDataOutput(int cp) Parameters Type Name Description System.Int32 cp Properties | Improve this Doc View Source Bytes The bytes Declaration public byte[] Bytes { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Length The length Declaration public int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int off, int len) Parameters Type Name Description System.Byte [] b System.Int32 off System.Int32 len Overrides DataOutput.WriteBytes(Byte[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.html",
    "title": "Namespace Lucene.Net.Util | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util <!-- 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. --> Some utility classes. Classes AlreadySetException Thrown when Set(T) is called more than once. ArrayUtil Methods for manipulating arrays. This is a Lucene.NET INTERNAL API, use at your own risk Attribute Base class for Attributes that can be added to a AttributeSource . Attributes are used to add data in a dynamic, yet type-safe way to a source of usually streamed objects, e. g. a TokenStream . AttributeSource An AttributeSource contains a list of different Attribute s, and methods to add and get them. There can only be a single instance of an attribute in the same AttributeSource instance. This is ensured by passing in the actual type of the IAttribute to the AddAttribute<T>() , which then checks if an instance of that type is already present. If yes, it returns the instance, otherwise it creates a new instance and returns it. AttributeSource.AttributeFactory An AttributeSource.AttributeFactory creates instances of Attribute s. AttributeSource.State This class holds the state of an AttributeSource . Bits Bits.MatchAllBits Bits impl of the specified length with all bits set. Bits.MatchNoBits Bits impl of the specified length with no bits set. BitUtil A variety of high efficiency bit twiddling routines. This is a Lucene.NET INTERNAL API, use at your own risk BroadWord Methods and constants inspired by the article \"Broadword Implementation of Rank/Select Queries\" by Sebastiano Vigna, January 30, 2012: algorithm 1: Lucene.Net.Util.BroadWord.BitCount(System.Int64) , count of set bits in a System.Int64 algorithm 2: Select(Int64, Int32) , selection of a set bit in a System.Int64 , bytewise signed smaller < 8 operator: SmallerUpTo7_8(Int64, Int64) . shortwise signed smaller < 16 operator: SmallerUpto15_16(Int64, Int64) . some of the Lk and Hk constants that are used by the above: L8 L8_L , H8 H8_L , L9 L9_L , L16 L16_L and H16 H8_L . This is a Lucene.NET INTERNAL API, use at your own risk BundleResourceManagerFactory This implementation of IResourceManagerFactory uses a convention to retrieve resources. In Java NLS, the convention is to use the same name for the resource key propeties and for the resource file names. This presents a problem for .NET because the resource generator already creates an internal class with the same name as the .resx file. To work around this, we use the convention of appending the suffix \"Bundle\" to the end of the type the resource key propeties are stored in. For example, if our constants are stored in a class named ErrorMessages, the type that will be looked up by this factory will be ErrorMessagesBundle (which is the name of the .resx file that should be added to your project). This implementation can be inherited to use a different convention or can be replaced to get the resources from an external source. ByteBlockPool Class that Posting and PostingVector use to write byte streams into shared fixed-size byte[] arrays. The idea is to allocate slices of increasing lengths. For example, the first slice is 5 bytes, the next slice is 14, etc. We start by writing our bytes into the first 5 bytes. When we hit the end of the slice, we allocate the next slice and then write the address of the new slice into the last 4 bytes of the previous slice (the \"forwarding address\"). Each slice is filled with 0's initially, and we mark the end with a non-zero byte. This way the methods that are writing into the slice don't need to record its length and instead allocate a new slice once they hit a non-zero byte. This is a Lucene.NET INTERNAL API, use at your own risk ByteBlockPool.Allocator Abstract class for allocating and freeing byte blocks. ByteBlockPool.DirectAllocator A simple ByteBlockPool.Allocator that never recycles. ByteBlockPool.DirectTrackingAllocator A simple ByteBlockPool.Allocator that never recycles, but tracks how much total RAM is in use. BytesRef Represents byte[] , as a slice (offset + length) into an existing byte[] . The Bytes property should never be null ; use EMPTY_BYTES if necessary. Important note: Unless otherwise noted, Lucene uses this class to represent terms that are encoded as UTF8 bytes in the index. To convert them to a .NET System.String (which is UTF16), use Utf8ToString() . Using code like new String(bytes, offset, length) to do this is wrong , as it does not respect the correct character set and may return wrong results (depending on the platform's defaults)! BytesRefArray A simple append only random-access BytesRef array that stores full copies of the appended bytes in a ByteBlockPool . Note: this class is not Thread-Safe! This is a Lucene.NET INTERNAL API, use at your own risk This is a Lucene.NET EXPERIMENTAL API, use at your own risk BytesRefHash BytesRefHash is a special purpose hash-map like data-structure optimized for BytesRef instances. BytesRefHash maintains mappings of byte arrays to ids (Map<BytesRef,int>) storing the hashed bytes efficiently in continuous storage. The mapping to the id is encapsulated inside BytesRefHash and is guaranteed to be increased for each added BytesRef . Note: The maximum capacity BytesRef instance passed to Add(BytesRef) must not be longer than BYTE_BLOCK_SIZE -2. The internal storage is limited to 2GB total byte storage. This is a Lucene.NET INTERNAL API, use at your own risk BytesRefHash.BytesStartArray Manages allocation of the per-term addresses. BytesRefHash.DirectBytesStartArray A simple BytesRefHash.BytesStartArray that tracks memory allocation using a private Counter instance. BytesRefHash.MaxBytesLengthExceededException Thrown if a BytesRef exceeds the BytesRefHash limit of BYTE_BLOCK_SIZE -2. BytesRefIterator LUCENENET specific class to make the syntax of creating an empty IBytesRefIterator the same as it was in Lucene. Example: var iter = BytesRefIterator.Empty; CharsRef Represents char[] , as a slice (offset + Length) into an existing char[] . The Chars property should never be null ; use EMPTY_CHARS if necessary. This is a Lucene.NET INTERNAL API, use at your own risk CollectionUtil Methods for manipulating (sorting) collections. Sort methods work directly on the supplied lists and don't copy to/from arrays before/after. For medium size collections as used in the Lucene indexer that is much more efficient. This is a Lucene.NET INTERNAL API, use at your own risk CommandLineUtil Class containing some useful methods used by command line tools Constants Some useful constants. Counter Simple counter class This is a Lucene.NET INTERNAL API, use at your own risk This is a Lucene.NET EXPERIMENTAL API, use at your own risk DisposableThreadLocal<T> Java's builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dereference the things you had stored in it, even once the ThreadLocal instance itself is no longer referenced. This is because there is single, master map stored for each thread, which all ThreadLocals share, and that master map only periodically purges \"stale\" entries. While not technically a memory leak, because eventually the memory will be reclaimed, it can take a long time and you can easily hit System.OutOfMemoryException because from the GC's standpoint the stale entries are not reclaimable. This class works around that, by only enrolling WeakReference values into the ThreadLocal, and separately holding a hard reference to each stored value. When you call Dispose() , these hard references are cleared and then GC is freely able to reclaim space by objects stored in it. You should not call Dispose() until all threads are done using the instance. This is a Lucene.NET INTERNAL API, use at your own risk DocIdBitSet Simple DocIdSet and DocIdSetIterator backed by a System.Collections.BitArray DoubleBarrelLRUCache LUCENENET specific class to nest the DoubleBarrelLRUCache.CloneableKey so it can be accessed without referencing the generic closing types of DoubleBarrelLRUCache<TKey, TValue> . DoubleBarrelLRUCache.CloneableKey Object providing clone(); the key class must subclass this. DoubleBarrelLRUCache<TKey, TValue> Simple concurrent LRU cache, using a \"double barrel\" approach where two ConcurrentHashMaps record entries. At any given time, one hash is primary and the other is secondary. Get(TKey) first checks primary, and if that's a miss, checks secondary. If secondary has the entry, it's promoted to primary ( NOTE : the key is cloned at this point). Once primary is full, the secondary is cleared and the two are swapped. This is not as space efficient as other possible concurrent approaches (see LUCENE-2075): to achieve perfect LRU(N) it requires 2*N storage. But, this approach is relatively simple and seems in practice to not grow unbounded in size when under hideously high load. This is a Lucene.NET INTERNAL API, use at your own risk ExceptionExtensions Extensions to the System.Exception class to allow for adding and retrieving suppressed exceptions, like you can do in Java. ExcludeServiceAttribute Base class for Attribute types that exclude services from Reflection scanning. FieldCacheSanityChecker Provides methods for sanity checking that entries in the FieldCache are not wasteful or inconsistent. Lucene 2.9 Introduced numerous enhancements into how the FieldCache is used by the low levels of Lucene searching (for Sorting and ValueSourceQueries) to improve both the speed for Sorting, as well as reopening of IndexReaders. But these changes have shifted the usage of FieldCache from \"top level\" IndexReaders (frequently a MultiReader or DirectoryReader) down to the leaf level SegmentReaders. As a result, existing applications that directly access the FieldCache may find RAM usage increase significantly when upgrading to 2.9 or Later. This class provides an API for these applications (or their Unit tests) to check at run time if the FieldCache contains \"insane\" usages of the FieldCache. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldCacheSanityChecker.Insanity Simple container for a collection of related FieldCache.CacheEntry objects that in conjunction with each other represent some \"insane\" usage of the IFieldCache . FieldCacheSanityChecker.InsanityType An Enumeration of the different types of \"insane\" behavior that may be detected in a IFieldCache . FilterIterator<T> An System.Collections.Generic.IEnumerator<T> implementation that filters elements with a boolean predicate. FixedBitSet BitSet of fixed length (numBits), backed by accessible ( GetBits() ) long[], accessed with an int index, implementing GetBits() and DocIdSet . If you need to manage more than 2.1B bits, use Int64BitSet . This is a Lucene.NET INTERNAL API, use at your own risk FixedBitSet.FixedBitSetIterator A DocIdSetIterator which iterates over set bits in a FixedBitSet . GrowableByteArrayDataOutput A DataOutput that can be used to build a byte[] . This is a Lucene.NET INTERNAL API, use at your own risk IndexableBinaryStringTools Provides support for converting byte sequences to System.String s and back again. The resulting System.String s preserve the original byte sequences' sort order. The System.String s are constructed using a Base 8000h encoding of the original binary data - each char of an encoded System.String represents a 15-bit chunk from the byte sequence. Base 8000h was chosen because it allows for all lower 15 bits of char to be used without restriction; the surrogate range [U+D8000-U+DFFF] does not represent valid chars, and would require complicated handling to avoid them and allow use of char's high bit. Although unset bits are used as padding in the final char, the original byte sequence could contain trailing bytes with no set bits (null bytes): padding is indistinguishable from valid information. To overcome this problem, a char is appended, indicating the number of encoded bytes in the final content char. This is a Lucene.NET EXPERIMENTAL API, use at your own risk InfoStream Debugging API for Lucene classes such as IndexWriter and SegmentInfos . NOTE: Enabling infostreams may cause performance degradation in some components. This is a Lucene.NET INTERNAL API, use at your own risk InPlaceMergeSorter Sorter implementation based on the merge-sort algorithm that merges in place (no extra memory will be allocated). Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool A pool for System.Int32 blocks similar to ByteBlockPool . NOTE: This was IntBlockPool in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool.Allocator Abstract class for allocating and freeing System.Int32 blocks. Int32BlockPool.DirectAllocator A simple Int32BlockPool.Allocator that never recycles. Int32BlockPool.SliceReader A Int32BlockPool.SliceReader that can read System.Int32 slices written by a Int32BlockPool.SliceWriter . This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool.SliceWriter A Int32BlockPool.SliceWriter that allows to write multiple integer slices into a given Int32BlockPool . This is a Lucene.NET INTERNAL API, use at your own risk Int32sRef Represents int[] , as a slice (offset + length) into an existing int[] . The Int32s member should never be null ; use EMPTY_INT32S if necessary. NOTE: This was IntsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64BitSet BitSet of fixed length ( Lucene.Net.Util.Int64BitSet.numBits ), backed by accessible ( GetBits() ) long[] , accessed with a System.Int64 index. Use it only if you intend to store more than 2.1B bits, otherwise you should use FixedBitSet . NOTE: This was LongBitSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64sRef Represents long[] , as a slice (offset + length) into an existing long[] . The Int64s member should never be null ; use EMPTY_INT64S if necessary. NOTE: This was LongsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64Values Abstraction over an array of System.Int64 s. This class extends NumericDocValues so that we don't need to add another level of abstraction every time we want eg. to use the PackedInt32s utility classes to represent a NumericDocValues instance. NOTE: This was LongValues in Lucene This is a Lucene.NET INTERNAL API, use at your own risk IntroSorter Sorter implementation based on a variant of the quicksort algorithm called introsort : when the recursion level exceeds the log of the length of the array to sort, it falls back to heapsort. This prevents quicksort from running into its worst-case quadratic runtime. Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk IOUtils This class emulates the new Java 7 \"Try-With-Resources\" statement. Remove once Lucene is on Java 7. This is a Lucene.NET INTERNAL API, use at your own risk ListExtensions Extensions to System.Collections.Generic.IList<T> . LuceneVersionExtensions Extension methods to the LuceneVersion enumeration to provide version comparison and parsing functionality. MapOfSets<TKey, TValue> Helper class for keeping Lists of Objects associated with keys. WARNING: this CLASS IS NOT THREAD SAFE This is a Lucene.NET INTERNAL API, use at your own risk MathUtil Math static utility methods. MergedIterator<T> Provides a merged sorted view from several sorted iterators. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to true and an element appears in multiple iterators then it is deduplicated, that is this iterator returns the sorted union of elements. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to false then all elements in all iterators are returned. Caveats: The behavior is undefined if the iterators are not actually sorted. Null elements are unsupported. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to true and if a single iterator contains duplicates then they will not be deduplicated. When elements are deduplicated it is not defined which one is returned. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to false then the order in which duplicates are returned isn't defined. The caller is responsible for disposing the System.Collections.Generic.IEnumerator<T> instances that are passed into the constructor, MergedIterator<T> doesn't do it automatically. This is a Lucene.NET INTERNAL API, use at your own risk NamedServiceFactory<TService> LUCENENET specific abstract class containing common fuctionality for named service factories. NumberFormat A LUCENENET specific class that represents a numeric format. This class mimicks the design of Java's NumberFormat class, which unlike the System.Globalization.NumberFormatInfo class in .NET, can be subclassed. NumericUtils This is a helper class to generate prefix-encoded representations for numerical values and supplies converters to represent float/double values as sortable integers/longs. To quickly execute range queries in Apache Lucene, a range is divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie, while the boundaries are matched more exactly. this reduces the number of terms dramatically. This class generates terms to achieve this: First the numerical integer values need to be converted to bytes. For that integer values (32 bit or 64 bit) are made unsigned and the bits are converted to ASCII chars with each 7 bit. The resulting byte[] is sortable like the original integer value (even using UTF-8 sort order). Each value is also prefixed (in the first char) by the shift value (number of bits removed) used during encoding. To also index floating point numbers, this class supplies two methods to convert them to integer values by changing their bit layout: DoubleToSortableInt64(Double) , SingleToSortableInt32(Single) . You will have no precision loss by converting floating point numbers to integers and back (only that the integer form is not usable). Other data types like dates can easily converted to System.Int64 s or System.Int32 s (e.g. date to long: System.DateTime.Ticks ). For easy usage, the trie algorithm is implemented for indexing inside NumericTokenStream that can index System.Int32 , System.Int64 , System.Single , and System.Double . For querying, NumericRangeQuery and NumericRangeFilter implement the query part for the same data types. This class can also be used, to generate lexicographically sortable (according to UTF8SortedAsUTF16Comparer ) representations of numeric data types for other usages (e.g. sorting). This is a Lucene.NET INTERNAL API, use at your own risk @since 2.9, API changed non backwards-compliant in 4.0 NumericUtils.Int32RangeBuilder Callback for SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) . You need to override only one of the methods. NOTE: This was IntRangeBuilder in Lucene This is a Lucene.NET INTERNAL API, use at your own risk @since 2.9, API changed non backwards-compliant in 4.0 NumericUtils.Int64RangeBuilder Callback for SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) . You need to override only one of the methods. NOTE: This was LongRangeBuilder in Lucene This is a Lucene.NET INTERNAL API, use at your own risk @since 2.9, API changed non backwards-compliant in 4.0 OfflineSorter On-disk sorting of byte arrays. Each byte array (entry) is a composed of the following fields: (two bytes) length of the following byte array, exactly the above count of bytes for the sequence to be sorted. OfflineSorter.BufferSize A bit more descriptive unit for constructors. OfflineSorter.ByteSequencesReader Utility class to read length-prefixed byte[] entries from an input. Complementary to OfflineSorter.ByteSequencesWriter . OfflineSorter.ByteSequencesWriter Utility class to emit length-prefixed byte[] entries to an output stream for sorting. Complementary to OfflineSorter.ByteSequencesReader . OfflineSorter.SortInfo Sort info (debugging mostly). OpenBitSet An \"open\" BitSet implementation that allows direct access to the array of words storing the bits. NOTE: This can be used in .NET any place where a java.util.BitSet is used in Java. Unlike java.util.BitSet , the fact that bits are packed into an array of longs is part of the interface. This allows efficient implementation of other algorithms by someone other than the author. It also allows one to efficiently implement alternate serialization or interchange formats. OpenBitSet is faster than java.util.BitSet in most operations and much faster at calculating cardinality of sets and results of set operations. It can also handle sets of larger cardinality (up to 64 * 2**32-1) The goals of OpenBitSet are the fastest implementation possible, and maximum code reuse. Extra safety and encapsulation may always be built on top, but if that's built in, the cost can never be removed (and hence people re-implement their own version in order to get better performance). Performance Results Test system: Pentium 4, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 3.363.961.441.461.991.58 1% full 3.313.90 1.04 0.99 Test system: AMD Opteron, 64 bit linux, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 2.503.501.001.031.121.25 1% full 2.513.49 1.00 1.02 OpenBitSetDISI OpenBitSet with added methods to bulk-update the bits from a DocIdSetIterator . (DISI stands for DocIdSetIterator ). OpenBitSetIterator An iterator to iterate over set bits in an OpenBitSet . this is faster than NextSetBit(Int64) for iterating over the complete set of bits, especially when the density of the bits set is high. PagedBytes Represents a logical byte[] as a series of pages. You can write-once into the logical byte[] (append only), using copy, and then retrieve slices ( BytesRef ) into it using fill. This is a Lucene.NET INTERNAL API, use at your own risk PagedBytes.PagedBytesDataInput PagedBytes.PagedBytesDataOutput PagedBytes.Reader Provides methods to read BytesRef s from a frozen PagedBytes . PForDeltaDocIdSet DocIdSet implementation based on pfor-delta encoding. This implementation is inspired from LinkedIn's Kamikaze ( http://data.linkedin.com/opensource/kamikaze ) and Daniel Lemire's JavaFastPFOR ( https://github.com/lemire/JavaFastPFOR ). On the contrary to the original PFOR paper, exceptions are encoded with FOR instead of Simple16. PForDeltaDocIdSet.Builder A builder for PForDeltaDocIdSet . PrintStreamInfoStream LUCENENET specific stub to assist with migration to TextWriterInfoStream . PriorityQueue<T> A PriorityQueue<T> maintains a partial ordering of its elements such that the element with least priority can always be found in constant time. Put()'s and Pop()'s require log(size) time. NOTE : this class will pre-allocate a full array of length maxSize+1 if instantiated via the PriorityQueue(Int32, Boolean) constructor with prepopulate set to true . That maximum size can grow as we insert elements over the time. This is a Lucene.NET INTERNAL API, use at your own risk QueryBuilder Creates queries from the Analyzer chain. Example usage: QueryBuilder builder = new QueryBuilder(analyzer); Query a = builder.CreateBooleanQuery(\"body\", \"just a test\"); Query b = builder.CreatePhraseQuery(\"body\", \"another test\"); Query c = builder.CreateMinShouldMatchQuery(\"body\", \"another test\", 0.5f); This can also be used as a subclass for query parsers to make it easier to interact with the analysis chain. Factory methods such as NewTermQuery(Term) are provided so that the generated queries can be customized. RamUsageEstimator Estimates the size (memory representation) of .NET objects. This is a Lucene.NET INTERNAL API, use at your own risk RecyclingByteBlockAllocator A ByteBlockPool.Allocator implementation that recycles unused byte blocks in a buffer and reuses them in subsequent calls to GetByteBlock() . Note: this class is not thread-safe. This is a Lucene.NET INTERNAL API, use at your own risk RecyclingInt32BlockAllocator A Int32BlockPool.Allocator implementation that recycles unused System.Int32 blocks in a buffer and reuses them in subsequent calls to GetInt32Block() . Note: this class is not thread-safe. NOTE: This was RecyclingIntBlockAllocator in Lucene This is a Lucene.NET INTERNAL API, use at your own risk RefCount<T> Manages reference counting for a given object. Extensions can override Release() to do custom logic when reference counting hits 0. RollingBuffer LUCENENET specific class to allow referencing static members of RollingBuffer<T> without referencing its generic closing type. RollingBuffer<T> Acts like forever growing T[] , but internally uses a circular buffer to reuse instances of . This is a Lucene.NET INTERNAL API, use at your own risk SentinelInt32Set A native System.Int32 hash-based set where one value is reserved to mean \"EMPTY\" internally. The space overhead is fairly low as there is only one power-of-two sized int[] to hold the values. The set is re-hashed when adding a value that would make it >= 75% full. Consider extending and over-riding Hash(Int32) if the values might be poor hash keys; Lucene docids should be fine. The internal fields are exposed publicly to enable more efficient use at the expense of better O-O principles. To iterate over the integers held in this set, simply use code like this: SentinelIntSet set = ... foreach (int v in set.keys) { if (v == set.EmptyVal) continue; //use v... } NOTE: This was SentinelIntSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk ServiceNameAttribute LUCENENET specific abstract class for System.Attribute s that can be used to override the default convention-based names of services. For example, \"Lucene40Codec\" will by convention be named \"Lucene40\". Using the CodecNameAttribute , the name can be overridden with a custom value. SetOnce<T> A convenient class which offers a semi-immutable object wrapper implementation which allows one to set the value of an object exactly once, and retrieve it many times. If Set(T) is called more than once, AlreadySetException is thrown and the operation will fail. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SloppyMath Math functions that trade off accuracy for speed. SmallSingle Floating point numbers smaller than 32 bits. NOTE: This was SmallFloat in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Sorter Base class for sorting algorithms implementations. This is a Lucene.NET INTERNAL API, use at your own risk SPIClassIterator<S> Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of java.util.ServiceLoader but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found. This is a Lucene.NET INTERNAL API, use at your own risk StringHelper Methods for manipulating strings. This is a Lucene.NET INTERNAL API, use at your own risk SystemConsole Mimics System.Console , but allows for swapping the System.IO.TextWriter of Out and Error , or the System.IO.TextReader of In with user-defined implementations. SystemProperties Helper for environment variables. This class helps to convert the environment variables to int or bool data types and also silently handles read permission errors. For instructions how to set environment variables for your OS, see https://www.schrodinger.com/kb/1842 . Note that if you want to load any of these settings for your application from a configuration file, it is recommended your application load them at startup and call SetProperty(String, String) to set them. Set the environment variable lucene.ignoreSecurityExceptions to false to change the read behavior of these methods to throw the underlying exception instead of returning the default value. TextWriterInfoStream InfoStream implementation over a System.IO.TextWriter such as System.Console.Out . NOTE: This is analogous to PrintStreamInfoStream in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk TimSorter Sorter implementation based on the TimSort algorithm. This implementation is especially good at sorting partially-sorted arrays and sorts small arrays with binary sort. NOTE :There are a few differences with the original implementation: The extra amount of memory to perform merges is configurable. This allows small merges to be very fast while large merges will be performed in-place (slightly slower). You can make sure that the fast merge routine will always be used by having maxTempSlots equal to half of the length of the slice of data to sort. Only the fast merge routine can gallop (the one that doesn't run in-place) and it only gallops on the longest slice. This is a Lucene.NET INTERNAL API, use at your own risk ToStringUtils Helper methods to ease implementing System.Object.ToString() . UnicodeUtil Class to encode .NET's UTF16 char[] into UTF8 byte[] without always allocating a new byte[] as System.Text.Encoding.GetBytes(System.String) of System.Text.Encoding.UTF8 does. This is a Lucene.NET INTERNAL API, use at your own risk VirtualMethod A utility for keeping backwards compatibility on previously abstract methods (or similar replacements). Before the replacement method can be made abstract, the old method must kept deprecated. If somebody still overrides the deprecated method in a non-sealed class, you must keep track, of this and maybe delegate to the old method in the subclass. The cost of reflection is minimized by the following usage of this class: Define static readonly fields in the base class ( BaseClass ), where the old and new method are declared: internal static readonly VirtualMethod newMethod = new VirtualMethod(typeof(BaseClass), \"newName\", parameters...); internal static readonly VirtualMethod oldMethod = new VirtualMethod(typeof(BaseClass), \"oldName\", parameters...); this enforces the singleton status of these objects, as the maintenance of the cache would be too costly else. If you try to create a second instance of for the same method/ baseClass combination, an exception is thrown. To detect if e.g. the old method was overridden by a more far subclass on the inheritance path to the current instance's class, use a non-static field: bool isDeprecatedMethodOverridden = oldMethod.GetImplementationDistance(this.GetType()) > newMethod.GetImplementationDistance(this.GetType()); // alternatively (more readable): bool isDeprecatedMethodOverridden = VirtualMethod.CompareImplementationDistance(this.GetType(), oldMethod, newMethod) > 0 GetImplementationDistance(Type) returns the distance of the subclass that overrides this method. The one with the larger distance should be used preferable. this way also more complicated method rename scenarios can be handled (think of 2.9 TokenStream deprecations). This is a Lucene.NET INTERNAL API, use at your own risk WAH8DocIdSet DocIdSet implementation based on word-aligned hybrid encoding on words of 8 bits. This implementation doesn't support random-access but has a fast DocIdSetIterator which can advance in logarithmic time thanks to an index. The compression scheme is simplistic and should work well with sparse and very dense doc id sets while being only slightly larger than a FixedBitSet for incompressible sets (overhead<2% in the worst case) in spite of the index. Format : The format is byte-aligned. An 8-bits word is either clean, meaning composed only of zeros or ones, or dirty, meaning that it contains between 1 and 7 bits set. The idea is to encode sequences of clean words using run-length encoding and to leave sequences of dirty words as-is. TokenClean length+Dirty length+Dirty words 1 byte0-n bytes0-n bytes0-n bytes Token encodes whether clean means full of zeros or ones in the first bit, the number of clean words minus 2 on the next 3 bits and the number of dirty words on the last 4 bits. The higher-order bit is a continuation bit, meaning that the number is incomplete and needs additional bytes to be read. Clean length+ : If clean length has its higher-order bit set, you need to read a vint ( ReadVInt32() ), shift it by 3 bits on the left side and add it to the 3 bits which have been read in the token. Dirty length+ works the same way as Clean length+ but on 4 bits and for the length of dirty words. Dirty words are the dirty words, there are Dirty length of them. This format cannot encode sequences of less than 2 clean words and 0 dirty word. The reason is that if you find a single clean word, you should rather encode it as a dirty word. This takes the same space as starting a new sequence (since you need one byte for the token) but will be lighter to decode. There is however an exception for the first sequence. Since the first sequence may start directly with a dirty word, the clean length is encoded directly, without subtracting 2. There is an additional restriction on the format: the sequence of dirty words is not allowed to contain two consecutive clean words. This restriction exists to make sure no space is wasted and to make sure iterators can read the next doc ID by reading at most 2 dirty words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WAH8DocIdSet.Builder A builder for WAH8DocIdSet s. WAH8DocIdSet.WordBuilder Word-based builder. Interfaces IAccountable An object whose RAM usage can be computed. This is a Lucene.NET INTERNAL API, use at your own risk IAttribute Base interface for attributes. IAttributeReflector This interface is used to reflect contents of AttributeSource or Attribute . IBits Interface for Bitset-like structures. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IBytesRefIterator A simple iterator interface for BytesRef iteration. IMutableBits Extension of IBits for live documents. IResourceManagerFactory LUCENENET specific interface used to inject instances of System.Resources.ResourceManager . This extension point can be used to override the default behavior to, for example, retrieve resources from a persistent data store, rather than getting them from resource files. IServiceListable LUCENENET specific contract that provides support for AvailableCodecs , AvailableDocValuesFormats , and AvailablePostingsFormats . Implement this interface in addition to ICodecFactory , IDocValuesFormatFactory , or IPostingsFormatFactory to provide optional support for the above methods when providing a custom implementation. If this interface is not supported by the corresponding factory, a System.NotSupportedException will be thrown from the above methods. RollingBuffer.IResettable Implement to reset an instance Enums LuceneVersion Use by certain classes to match version compatibility across releases of Lucene. WARNING : When changing the version parameter that you supply to components in Lucene, do not simply change the version at search-time, but instead also adjust your indexing code to match, and re-index."
  },
  "api/Lucene.Net/Lucene.Net.Util.IAccountable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAccountable.html",
    "title": "Interface IAccountable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAccountable An object whose RAM usage can be computed. This is a Lucene.NET INTERNAL API, use at your own risk Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAccountable Methods | Improve this Doc View Source RamBytesUsed() Return the memory usage of this object in bytes. Negative values are illegal. Declaration long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.IAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAttribute.html",
    "title": "Interface IAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAttribute Base interface for attributes. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAttribute Methods | Improve this Doc View Source CopyTo(IAttribute) Declaration void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target"
  },
  "api/Lucene.Net/Lucene.Net.Util.IAttributeReflector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAttributeReflector.html",
    "title": "Interface IAttributeReflector | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IAttributeReflector This interface is used to reflect contents of AttributeSource or Attribute . Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAttributeReflector Methods | Improve this Doc View Source Reflect(Type, String, Object) This method gets called for every property in an Attribute / AttributeSource passing the System.Type of the IAttribute , a key and the actual value . E.g., an invocation of ReflectWith(IAttributeReflector) would call this method once using typeof(Analysis.TokenAttributes.ICharTermAttribute) as attribute type, \"term\" as key and the actual value as a System.String . Declaration void Reflect(Type type, string key, object value) Parameters Type Name Description System.Type type System.String key System.Object value | Improve this Doc View Source Reflect<T>(String, Object) LUCENENET specific overload to support generics. Declaration void Reflect<T>(string key, object value) where T : IAttribute Parameters Type Name Description System.String key System.Object value Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.IBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IBits.html",
    "title": "Interface IBits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IBits Interface for Bitset-like structures. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IBits Properties | Improve this Doc View Source Length Returns the number of bits in this set Declaration int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Returns the value of the bit with the specified index . Declaration bool Get(int index) Parameters Type Name Description System.Int32 index Index, should be non-negative and < Length . The result of passing negative or out of bounds values is undefined by this interface, just don't do it! Returns Type Description System.Boolean true if the bit is set, false otherwise."
  },
  "api/Lucene.Net/Lucene.Net.Util.IBytesRefIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IBytesRefIterator.html",
    "title": "Interface IBytesRefIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IBytesRefIterator A simple iterator interface for BytesRef iteration. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IBytesRefIterator Properties | Improve this Doc View Source Comparer Return the BytesRef Comparer used to sort terms provided by the iterator. This may return null if there are no items or the iterator is not sorted. Callers may invoke this method many times, so it's best to cache a single instance & reuse it. Declaration IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Next() Increments the iteration to the next BytesRef in the iterator. Returns the resulting BytesRef or null if the end of the iterator is reached. The returned BytesRef may be re-used across calls to Next() . After this method returns null , do not call it again: the results are undefined. Declaration BytesRef Next() Returns Type Description BytesRef The next BytesRef in the iterator or null if the end of the iterator is reached. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "api/Lucene.Net/Lucene.Net.Util.IMutableBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IMutableBits.html",
    "title": "Interface IMutableBits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IMutableBits Extension of IBits for live documents. Inherited Members IBits.Get(Int32) IBits.Length Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IMutableBits : IBits Methods | Improve this Doc View Source Clear(Int32) Sets the bit specified by index to false . Declaration void Clear(int index) Parameters Type Name Description System.Int32 index index, should be non-negative and < Length . The result of passing negative or out of bounds values is undefined by this interface, just don't do it!"
  },
  "api/Lucene.Net/Lucene.Net.Util.IndexableBinaryStringTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IndexableBinaryStringTools.html",
    "title": "Class IndexableBinaryStringTools | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IndexableBinaryStringTools Provides support for converting byte sequences to System.String s and back again. The resulting System.String s preserve the original byte sequences' sort order. The System.String s are constructed using a Base 8000h encoding of the original binary data - each char of an encoded System.String represents a 15-bit chunk from the byte sequence. Base 8000h was chosen because it allows for all lower 15 bits of char to be used without restriction; the surrogate range [U+D8000-U+DFFF] does not represent valid chars, and would require complicated handling to avoid them and allow use of char's high bit. Although unset bits are used as padding in the final char, the original byte sequence could contain trailing bytes with no set bits (null bytes): padding is indistinguishable from valid information. To overcome this problem, a char is appended, indicating the number of encoded bytes in the final content char. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexableBinaryStringTools 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.Util Assembly : Lucene.Net.dll Syntax [Obsolete(\"Implement Analysis.TokenAttributes.ITermToBytesRefAttribute and store bytes directly instead. this class will be removed in Lucene 5.0\")] public sealed class IndexableBinaryStringTools Methods | Improve this Doc View Source Decode(Char[], Int32, Int32, Byte[], Int32, Int32) Decodes the input System.Char sequence into the output System.Byte sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetDecodedLength(Char[], Int32, Int32) . Declaration public static void Decode(char[] inputArray, int inputOffset, int inputLength, byte[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Char [] inputArray System.Char sequence to be decoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of chars in inputArray System.Byte [] outputArray System.Byte sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetDecodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Decode(Char[], Int32, Int32, SByte[], Int32, Int32) Decodes the input char sequence into the output sbyte sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetDecodedLength(Char[], Int32, Int32) . Declaration [CLSCompliant(false)] public static void Decode(char[] inputArray, int inputOffset, int inputLength, sbyte[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Char [] inputArray System.Char sequence to be decoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of chars in inputArray System.SByte [] outputArray System.Byte sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetDecodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Encode(Byte[], Int32, Int32, Char[], Int32, Int32) Encodes the input System.Byte sequence into the output char sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetEncodedLength(Byte[], Int32, Int32) . Declaration public static void Encode(byte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Byte [] inputArray System.Byte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray System.Char [] outputArray System.Char sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetEncodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Encode(SByte[], Int32, Int32, Char[], Int32, Int32) Encodes the input System.SByte sequence into the output char sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetEncodedLength(SByte[], Int32, Int32) . Declaration [CLSCompliant(false)] public static void Encode(sbyte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.SByte [] inputArray System.SByte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray System.Char [] outputArray System.Char sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be getEncodedLength | Improve this Doc View Source GetDecodedLength(Char[], Int32, Int32) Returns the number of System.Byte s required to decode the given char sequence. Declaration public static int GetDecodedLength(char[] encoded, int offset, int length) Parameters Type Name Description System.Char [] encoded Char sequence to be decoded System.Int32 offset Initial offset System.Int32 length Number of characters Returns Type Description System.Int32 The number of System.Byte s required to decode the given char sequence | Improve this Doc View Source GetEncodedLength(Byte[], Int32, Int32) Returns the number of chars required to encode the given System.Byte s. Declaration public static int GetEncodedLength(byte[] inputArray, int inputOffset, int inputLength) Parameters Type Name Description System.Byte [] inputArray Byte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray Returns Type Description System.Int32 The number of chars required to encode the number of System.Byte s. | Improve this Doc View Source GetEncodedLength(SByte[], Int32, Int32) Returns the number of chars required to encode the given System.SByte s. Declaration [CLSCompliant(false)] public static int GetEncodedLength(sbyte[] inputArray, int inputOffset, int inputLength) Parameters Type Name Description System.SByte [] inputArray System.SByte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of sbytes in inputArray Returns Type Description System.Int32 The number of chars required to encode the number of System.SByte s."
  },
  "api/Lucene.Net/Lucene.Net.Util.InfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.InfoStream.html",
    "title": "Class InfoStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InfoStream Debugging API for Lucene classes such as IndexWriter and SegmentInfos . NOTE: Enabling infostreams may cause performance degradation in some components. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InfoStream TextWriterInfoStream 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.Util Assembly : Lucene.Net.dll Syntax public abstract class InfoStream : IDisposable Fields | Improve this Doc View Source NO_OUTPUT Instance of InfoStream that does no logging at all. Declaration public static readonly InfoStream NO_OUTPUT Field Value Type Description InfoStream Properties | Improve this Doc View Source Default Gets or Sets the default InfoStream used by a newly instantiated classes. Declaration public static InfoStream Default { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source Clone() Clones this InfoStream Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes this InfoStream Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this InfoStream Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsEnabled(String) Returns true if messages are enabled and should be posted to Message(String, String) . Declaration public abstract bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean | Improve this Doc View Source Message(String, String) Prints a message Declaration public abstract void Message(string component, string message) Parameters Type Name Description System.String component System.String message Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.InPlaceMergeSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.InPlaceMergeSorter.html",
    "title": "Class InPlaceMergeSorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class InPlaceMergeSorter Sorter implementation based on the merge-sort algorithm that merges in place (no extra memory will be allocated). Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter InPlaceMergeSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, 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.Util Assembly : Lucene.Net.dll Syntax public abstract class InPlaceMergeSorter : Sorter Constructors | Improve this Doc View Source InPlaceMergeSorter() Create a new InPlaceMergeSorter Declaration public InPlaceMergeSorter() Methods | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override sealed void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.Allocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.Allocator.html",
    "title": "Class Int32BlockPool.Allocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32BlockPool.Allocator Abstract class for allocating and freeing System.Int32 blocks. Inheritance System.Object Int32BlockPool.Allocator Int32BlockPool.DirectAllocator RecyclingInt32BlockAllocator 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.Util Assembly : Lucene.Net.dll Syntax public abstract class Allocator Constructors | Improve this Doc View Source Allocator(Int32) Declaration public Allocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetInt32Block() NOTE: This was getIntBlock() in Lucene Declaration public virtual int[] GetInt32Block() Returns Type Description System.Int32 [] | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks() in Lucene Declaration public abstract void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.DirectAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.DirectAllocator.html",
    "title": "Class Int32BlockPool.DirectAllocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32BlockPool.DirectAllocator A simple Int32BlockPool.Allocator that never recycles. Inheritance System.Object Int32BlockPool.Allocator Int32BlockPool.DirectAllocator Inherited Members Int32BlockPool.Allocator.m_blockSize Int32BlockPool.Allocator.GetInt32Block() 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.Util Assembly : Lucene.Net.dll Syntax public sealed class DirectAllocator : Int32BlockPool.Allocator Constructors | Improve this Doc View Source DirectAllocator() Creates a new Int32BlockPool.DirectAllocator with a default block size Declaration public DirectAllocator() Methods | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks() in Lucene Declaration public override void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end Overrides Int32BlockPool.Allocator.RecycleInt32Blocks(Int32[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.html",
    "title": "Class Int32BlockPool | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32BlockPool A pool for System.Int32 blocks similar to ByteBlockPool . NOTE: This was IntBlockPool in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool 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.Util Assembly : Lucene.Net.dll Syntax public sealed class Int32BlockPool Constructors | Improve this Doc View Source Int32BlockPool() Creates a new Int32BlockPool with a default Int32BlockPool.Allocator . Declaration public Int32BlockPool() See Also NextBuffer() | Improve this Doc View Source Int32BlockPool(Int32BlockPool.Allocator) Creates a new Int32BlockPool with the given Int32BlockPool.Allocator . Declaration public Int32BlockPool(Int32BlockPool.Allocator allocator) Parameters Type Name Description Int32BlockPool.Allocator allocator See Also NextBuffer() Fields | Improve this Doc View Source INT32_BLOCK_MASK NOTE: This was INT_BLOCK_MASK in Lucene Declaration public static readonly int INT32_BLOCK_MASK Field Value Type Description System.Int32 | Improve this Doc View Source INT32_BLOCK_SHIFT NOTE: This was INT_BLOCK_SHIFT in Lucene Declaration public static readonly int INT32_BLOCK_SHIFT Field Value Type Description System.Int32 | Improve this Doc View Source INT32_BLOCK_SIZE NOTE: This was INT_BLOCK_SIZE in Lucene Declaration public static readonly int INT32_BLOCK_SIZE Field Value Type Description System.Int32 Properties | Improve this Doc View Source Buffer Current head buffer. Declaration public int[] Buffer { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Buffers Array of buffers currently used in the pool. Buffers are allocated if needed don't modify this outside of this class. Declaration public int[][] Buffers { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source Int32Offset Current head offset. NOTE: This was intOffset in Lucene Declaration public int Int32Offset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Int32Upto Pointer to the current position in head buffer NOTE: This was intUpto in Lucene Declaration public int Int32Upto { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source NextBuffer() Advances the pool to its next buffer. This method should be called once after the constructor to initialize the pool. In contrast to the constructor a Reset() call will advance the pool to its first buffer immediately. Declaration public void NextBuffer() | Improve this Doc View Source Reset() Resets the pool to its initial state reusing the first buffer. Calling NextBuffer() is not needed after reset. Declaration public void Reset() | Improve this Doc View Source Reset(Boolean, Boolean) Expert: Resets the pool to its initial state reusing the first buffer. Declaration public void Reset(bool zeroFillBuffers, bool reuseFirst) Parameters Type Name Description System.Boolean zeroFillBuffers If true the buffers are filled with 0 . this should be set to true if this pool is used with Int32BlockPool.SliceWriter . System.Boolean reuseFirst If true the first buffer will be reused and calling NextBuffer() is not needed after reset if the block pool was used before ie. NextBuffer() was called before."
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceReader.html",
    "title": "Class Int32BlockPool.SliceReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32BlockPool.SliceReader A Int32BlockPool.SliceReader that can read System.Int32 slices written by a Int32BlockPool.SliceWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.SliceReader 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.Util Assembly : Lucene.Net.dll Syntax public sealed class SliceReader Constructors | Improve this Doc View Source SliceReader(Int32BlockPool) Creates a new Int32BlockPool.SliceReader on the given pool. Declaration public SliceReader(Int32BlockPool pool) Parameters Type Name Description Int32BlockPool pool Properties | Improve this Doc View Source IsEndOfSlice Returns true if the current slice is fully read. If this method returns true ReadInt32() should not be called again on this slice. Declaration public bool IsEndOfSlice { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ReadInt32() Reads the next System.Int32 from the current slice and returns it. NOTE: This was readInt() in Lucene Declaration public int ReadInt32() Returns Type Description System.Int32 See Also IsEndOfSlice | Improve this Doc View Source Reset(Int32, Int32) Resets the reader to a slice give the slices absolute start and end offset in the pool. Declaration public void Reset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceWriter.html",
    "title": "Class Int32BlockPool.SliceWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32BlockPool.SliceWriter A Int32BlockPool.SliceWriter that allows to write multiple integer slices into a given Int32BlockPool . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.SliceWriter 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.Util Assembly : Lucene.Net.dll Syntax public class SliceWriter Constructors | Improve this Doc View Source SliceWriter(Int32BlockPool) Declaration public SliceWriter(Int32BlockPool pool) Parameters Type Name Description Int32BlockPool pool Properties | Improve this Doc View Source CurrentOffset Returns the offset of the currently written slice. The returned value should be used as the end offset to initialize a Int32BlockPool.SliceReader once this slice is fully written or to reset the this writer if another slice needs to be written. Declaration public virtual int CurrentOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Reset(Int32) Declaration public virtual void Reset(int sliceOffset) Parameters Type Name Description System.Int32 sliceOffset | Improve this Doc View Source StartNewSlice() Starts a new slice and returns the start offset. The returned value should be used as the start offset to initialize a Int32BlockPool.SliceReader . Declaration public virtual int StartNewSlice() Returns Type Description System.Int32 | Improve this Doc View Source WriteInt32(Int32) Writes the given value into the slice and resizes the slice if needed NOTE: This was writeInt() in Lucene Declaration public virtual void WriteInt32(int value) Parameters Type Name Description System.Int32 value See Also Int32BlockPool.SliceReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32sRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32sRef.html",
    "title": "Class Int32sRef | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int32sRef Represents int[] , as a slice (offset + length) into an existing int[] . The Int32s member should never be null ; use EMPTY_INT32S if necessary. NOTE: This was IntsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32sRef Implements System.IComparable < Int32sRef > 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.Util Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class Int32sRef : IComparable<Int32sRef> Constructors | Improve this Doc View Source Int32sRef() Create a Int32sRef with EMPTY_INT32S . Declaration public Int32sRef() | Improve this Doc View Source Int32sRef(Int32) Create a Int32sRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public Int32sRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Int32sRef(Int32[], Int32, Int32) This instance will directly reference ints w/o making a copy. ints should not be null . Declaration public Int32sRef(int[] ints, int offset, int length) Parameters Type Name Description System.Int32 [] ints System.Int32 offset System.Int32 length Fields | Improve this Doc View Source EMPTY_INT32S An empty integer array for convenience. NOTE: This was EMPTY_INTS in Lucene Declaration public static readonly int[] EMPTY_INT32S Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Int32s The contents of the Int32sRef . Should never be null . NOTE: This was ints (field) in Lucene Declaration public int[] Int32s { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Length Length of used System.Int32 s. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid integer. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying System.Int32 s are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(Int32sRef) | Improve this Doc View Source CompareTo(Int32sRef) Signed System.Int32 order comparison. Declaration public int CompareTo(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyInt32s(Int32sRef) NOTE: This was copyInts() in Lucene Declaration public void CopyInt32s(Int32sRef other) Parameters Type Name Description Int32sRef other | Improve this Doc View Source DeepCopyOf(Int32sRef) Creates a new Int32sRef that points to a copy of the System.Int32 s from other The returned Int32sRef will have a length of other.Length and an offset of zero. Declaration public static Int32sRef DeepCopyOf(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description Int32sRef | 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 Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source Int32sEquals(Int32sRef) NOTE: This was intsEquals() in Lucene Declaration public bool Int32sEquals(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description System.Boolean | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64BitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64BitSet.html",
    "title": "Class Int64BitSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64BitSet BitSet of fixed length ( Lucene.Net.Util.Int64BitSet.numBits ), backed by accessible ( GetBits() ) long[] , accessed with a System.Int64 index. Use it only if you intend to store more than 2.1B bits, otherwise you should use FixedBitSet . NOTE: This was LongBitSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int64BitSet 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.Util Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class Int64BitSet Constructors | Improve this Doc View Source Int64BitSet(Int64) Declaration public Int64BitSet(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source Int64BitSet(Int64[], Int64) Declaration public Int64BitSet(long[] storedBits, long numBits) Parameters Type Name Description System.Int64 [] storedBits System.Int64 numBits Properties | Improve this Doc View Source Length Returns the number of bits stored in this bitset. Declaration public long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source And(Int64BitSet) this = this AND other Declaration public void And(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source AndNot(Int64BitSet) this = this AND NOT other Declaration public void AndNot(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source Bits2words(Int64) Returns the number of 64 bit words it would take to hold numBits . Declaration public static int Bits2words(long numBits) Parameters Type Name Description System.Int64 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Returns number of set bits. NOTE: this visits every long in the backing bits array, and the result is not internally cached! Declaration public long Cardinality() Returns Type Description System.Int64 | Improve this Doc View Source Clear(Int64) Declaration public void Clear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Clear(Int64, Int64) Clears a range of bits. Declaration public void Clear(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public Int64BitSet Clone() Returns Type Description Int64BitSet | Improve this Doc View Source EnsureCapacity(Int64BitSet, Int64) If the given Int64BitSet is large enough to hold numBits , returns the given bits , otherwise returns a new Int64BitSet which can hold the requested number of bits. NOTE: the returned bitset reuses the underlying long[] of the given bits if possible. Also, reading Length on the returned bits may return a value greater than numBits . Declaration public static Int64BitSet EnsureCapacity(Int64BitSet bits, long numBits) Parameters Type Name Description Int64BitSet bits System.Int64 numBits Returns Type Description Int64BitSet | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Flip(Int64, Int64) Flips a range of bits Declaration public void Flip(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to flip | Improve this Doc View Source Get(Int64) Declaration public bool Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndClear(Int64) Declaration public bool GetAndClear(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int64) Declaration public bool GetAndSet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetBits() Expert. Declaration public long[] GetBits() Returns Type Description System.Int64 [] | 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 Intersects(Int64BitSet) Returns true if the sets have any elements in common Declaration public bool Intersects(Int64BitSet other) Parameters Type Name Description Int64BitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int64) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public long NextSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Or(Int64BitSet) this = this OR other Declaration public void Or(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source PrevSetBit(Int64) Returns the index of the last set bit before or on the index specified. -1 is returned if there are no more set bits. Declaration public long PrevSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Set(Int64) Declaration public void Set(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Set(Int64, Int64) Sets a range of bits Declaration public void Set(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to set | Improve this Doc View Source Xor(Int64BitSet) this = this XOR other Declaration public void Xor(Int64BitSet other) Parameters Type Name Description Int64BitSet other"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64sRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64sRef.html",
    "title": "Class Int64sRef | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64sRef Represents long[] , as a slice (offset + length) into an existing long[] . The Int64s member should never be null ; use EMPTY_INT64S if necessary. NOTE: This was LongsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int64sRef Implements System.IComparable < Int64sRef > 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.Util Assembly : Lucene.Net.dll Syntax [Serializable] public sealed class Int64sRef : IComparable<Int64sRef> Constructors | Improve this Doc View Source Int64sRef() Create a Int64sRef with EMPTY_INT64S Declaration public Int64sRef() | Improve this Doc View Source Int64sRef(Int32) Create a Int64sRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public Int64sRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Int64sRef(Int64[], Int32, Int32) This instance will directly reference longs w/o making a copy. longs should not be null . Declaration public Int64sRef(long[] longs, int offset, int length) Parameters Type Name Description System.Int64 [] longs System.Int32 offset System.Int32 length Fields | Improve this Doc View Source EMPTY_INT64S An empty System.Int64 array for convenience NOTE: This was EMPTY_LONGS in Lucene Declaration public static readonly long[] EMPTY_INT64S Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Int64s The contents of the Int64sRef . Should never be null . NOTE: This was longs (field) in Lucene Declaration public long[] Int64s { get; set; } Property Value Type Description System.Int64 [] | Improve this Doc View Source Length Length of used longs. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid long. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying System.Int64 s are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(Int64sRef) | Improve this Doc View Source CompareTo(Int64sRef) Signed System.Int32 order comparison Declaration public int CompareTo(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyInt64s(Int64sRef) NOTE: This was copyLongs() in Lucene Declaration public void CopyInt64s(Int64sRef other) Parameters Type Name Description Int64sRef other | Improve this Doc View Source DeepCopyOf(Int64sRef) Creates a new Int64sRef that points to a copy of the System.Int64 s from other . The returned Int64sRef will have a length of other.Length and an offset of zero. Declaration public static Int64sRef DeepCopyOf(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description Int64sRef | 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 Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source Int64sEquals(Int64sRef) NOTE: This was longsEquals() in Lucene Declaration public bool Int64sEquals(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description System.Boolean | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64Values.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64Values.html",
    "title": "Class Int64Values | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Int64Values Abstraction over an array of System.Int64 s. This class extends NumericDocValues so that we don't need to add another level of abstraction every time we want eg. to use the PackedInt32s utility classes to represent a NumericDocValues instance. NOTE: This was LongValues in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AbstractPagedMutable<T> BlockPackedReader MonotonicBlockPackedReader 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.Util Assembly : Lucene.Net.dll Syntax public abstract class Int64Values : NumericDocValues Methods | Improve this Doc View Source Get(Int32) Get value at idx . Declaration public override long Get(int idx) Parameters Type Name Description System.Int32 idx Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int64) Get value at index . Declaration public abstract long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.IntroSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IntroSorter.html",
    "title": "Class IntroSorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IntroSorter Sorter implementation based on a variant of the quicksort algorithm called introsort : when the recursion level exceeds the log of the length of the array to sort, it falls back to heapsort. This prevents quicksort from running into its worst-case quadratic runtime. Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter IntroSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, 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.Util Assembly : Lucene.Net.dll Syntax public abstract class IntroSorter : Sorter Constructors | Improve this Doc View Source IntroSorter() Create a new IntroSorter . Declaration public IntroSorter() Methods | Improve this Doc View Source ComparePivot(Int32) Compare the pivot with the slot at j , similarly to Compare(i, j) ( Compare(Int32, Int32) ). Declaration protected abstract int ComparePivot(int j) Parameters Type Name Description System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source SetPivot(Int32) Save the value at slot i so that it can later be used as a pivot, see ComparePivot(Int32) . Declaration protected abstract void SetPivot(int i) Parameters Type Name Description System.Int32 i | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override sealed void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IOUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IOUtils.html",
    "title": "Class IOUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class IOUtils This class emulates the new Java 7 \"Try-With-Resources\" statement. Remove once Lucene is on Java 7. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IOUtils 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.Util Assembly : Lucene.Net.dll Syntax public sealed class IOUtils Fields | Improve this Doc View Source CHARSET_UTF_8 UTF-8 System.Text.Encoding instance to prevent repeated System.Text.Encoding.UTF8 lookups Declaration [Obsolete(\"Use Encoding.UTF8 instead.\")] public static readonly Encoding CHARSET_UTF_8 Field Value Type Description System.Text.Encoding | Improve this Doc View Source UTF_8 UTF-8 charset string. Where possible, use System.Text.Encoding.UTF8 instead, as using the System.String constant may slow things down. Declaration public static readonly string UTF_8 Field Value Type Description System.String See Also System.Text.Encoding.UTF8 Methods | Improve this Doc View Source Close(IEnumerable<IDisposable>) Disposes all given System.IDisposable s. Declaration [Obsolete(\"Use Dispose(IEnumerable<IDisposable>) instead.\")] public static void Close(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also Dispose(IDisposable[]) | Improve this Doc View Source Close(IDisposable[]) Disposes all given System.IDisposable s. Some of the System.IDisposable s may be null ; they are ignored. After everything is closed, the method either throws the first exception it hit while closing, or completes normally if there were no exceptions. Declaration [Obsolete(\"Use Dispose(params IDisposable[]) instead.\")] public static void Close(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source CloseWhileHandlingException(IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration [Obsolete(\"Use DisposeWhileHandlingException(IEnumerable<IDisposable>) instead.\")] public static void CloseWhileHandlingException(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(IEnumerable<IDisposable>) DisposeWhileHandlingException(IDisposable[]) | Improve this Doc View Source CloseWhileHandlingException(Exception, IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration [Obsolete(\"Use DisposeWhileHandlingException(Exception, IEnumerable<IDisposable>) instead.\")] public static void CloseWhileHandlingException(Exception priorException, IEnumerable<IDisposable> objects) Parameters Type Name Description System.Exception priorException System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(Exception, IDisposable[]) | Improve this Doc View Source CloseWhileHandlingException(Exception, IDisposable[]) Disposes all given IDisposable s, suppressing all thrown exceptions. Some of the IDisposable s may be null , they are ignored. After everything is disposed, method either throws priorException , if one is supplied, or the first of suppressed exceptions, or completes normally. Sample usage: IDisposable resource1 = null, resource2 = null, resource3 = null; ExpectedException priorE = null; try { resource1 = ...; resource2 = ...; resource3 = ...; // Acquisition may throw ExpectedException ..do..stuff.. // May throw ExpectedException } catch (ExpectedException e) { priorE = e; } finally { IOUtils.CloseWhileHandlingException(priorE, resource1, resource2, resource3); } Declaration [Obsolete(\"Use DisposeWhileHandlingException(Exception, params IDisposable[]) instead.\")] public static void CloseWhileHandlingException(Exception priorException, params IDisposable[] objects) Parameters Type Name Description System.Exception priorException null or an exception that will be rethrown after method completion. System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on. | Improve this Doc View Source CloseWhileHandlingException(IDisposable[]) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Some of the System.IDisposable s may be null , they are ignored. Declaration [Obsolete(\"Use DisposeWhileHandlingException(params IDisposable[]) instead.\")] public static void CloseWhileHandlingException(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source Copy(FileInfo, FileInfo) Copy one file's contents to another file. The target will be overwritten if it exists. The source must exist. Declaration public static void Copy(FileInfo source, FileInfo target) Parameters Type Name Description System.IO.FileInfo source System.IO.FileInfo target | Improve this Doc View Source DeleteFilesIgnoringExceptions(Directory, String[]) Deletes all given files, suppressing all thrown System.Exception s. Note that the files should not be null . Declaration public static void DeleteFilesIgnoringExceptions(Directory dir, params string[] files) Parameters Type Name Description Directory dir System.String [] files | Improve this Doc View Source Dispose(IEnumerable<IDisposable>) Disposes all given System.IDisposable s. Declaration public static void Dispose(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also Dispose(IDisposable[]) | Improve this Doc View Source Dispose(IDisposable[]) Disposes all given System.IDisposable s. Some of the System.IDisposable s may be null ; they are ignored. After everything is closed, the method either throws the first exception it hit while closing, or completes normally if there were no exceptions. Declaration public static void Dispose(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source DisposeWhileHandlingException(IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration public static void DisposeWhileHandlingException(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(IDisposable[]) | Improve this Doc View Source DisposeWhileHandlingException(Exception, IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration public static void DisposeWhileHandlingException(Exception priorException, IEnumerable<IDisposable> objects) Parameters Type Name Description System.Exception priorException System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(Exception, IDisposable[]) | Improve this Doc View Source DisposeWhileHandlingException(Exception, IDisposable[]) Disposes all given IDisposable s, suppressing all thrown exceptions. Some of the IDisposable s may be null , they are ignored. After everything is disposed, method either throws priorException , if one is supplied, or the first of suppressed exceptions, or completes normally. Sample usage: IDisposable resource1 = null, resource2 = null, resource3 = null; ExpectedException priorE = null; try { resource1 = ...; resource2 = ...; resource3 = ...; // Acquisition may throw ExpectedException ..do..stuff.. // May throw ExpectedException } catch (ExpectedException e) { priorE = e; } finally { IOUtils.DisposeWhileHandlingException(priorE, resource1, resource2, resource3); } Declaration public static void DisposeWhileHandlingException(Exception priorException, params IDisposable[] objects) Parameters Type Name Description System.Exception priorException null or an exception that will be rethrown after method completion. System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on. | Improve this Doc View Source DisposeWhileHandlingException(IDisposable[]) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Some of the System.IDisposable s may be null , they are ignored. Declaration public static void DisposeWhileHandlingException(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source GetDecodingReader(FileInfo, Encoding) Opens a System.IO.TextReader for the given System.IO.FileInfo using a System.Text.Encoding . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected System.Text.Encoding . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(FileInfo file, Encoding charSet) Parameters Type Name Description System.IO.FileInfo file The file to open a reader on System.Text.Encoding charSet The expected charset Returns Type Description System.IO.TextReader A reader to read the given file | Improve this Doc View Source GetDecodingReader(Stream, Encoding) Wrapping the given System.IO.Stream in a reader using a System.Text.Encoding . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected System.Text.Encoding . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(Stream stream, Encoding charSet) Parameters Type Name Description System.IO.Stream stream The stream to wrap in a reader System.Text.Encoding charSet The expected charset Returns Type Description System.IO.TextReader A wrapping reader | Improve this Doc View Source GetDecodingReader(Type, String, Encoding) Opens a System.IO.TextReader for the given resource using a System.Text.Encoding . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected System.Text.Encoding . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(Type clazz, string resource, Encoding charSet) Parameters Type Name Description System.Type clazz The class used to locate the resource System.String resource The resource name to load System.Text.Encoding charSet The expected charset Returns Type Description System.IO.TextReader A reader to read the given file | Improve this Doc View Source ReThrow(Exception) Simple utilty method that takes a previously caught System.Exception and rethrows either System.IO.IOException or an unchecked exception. If the argument is null then this method does nothing. Declaration public static void ReThrow(Exception th) Parameters Type Name Description System.Exception th | Improve this Doc View Source ReThrowUnchecked(Exception) Simple utilty method that takes a previously caught System.Exception and rethrows it as an unchecked exception. If the argument is null then this method does nothing. Declaration public static void ReThrowUnchecked(Exception th) Parameters Type Name Description System.Exception th"
  },
  "api/Lucene.Net/Lucene.Net.Util.IResourceManagerFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IResourceManagerFactory.html",
    "title": "Interface IResourceManagerFactory | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IResourceManagerFactory LUCENENET specific interface used to inject instances of System.Resources.ResourceManager . This extension point can be used to override the default behavior to, for example, retrieve resources from a persistent data store, rather than getting them from resource files. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IResourceManagerFactory Methods | Improve this Doc View Source Create(Type) Declaration ResourceManager Create(Type resourceSource) Parameters Type Name Description System.Type resourceSource Returns Type Description System.Resources.ResourceManager | Improve this Doc View Source Release(ResourceManager) Declaration void Release(ResourceManager manager) Parameters Type Name Description System.Resources.ResourceManager manager"
  },
  "api/Lucene.Net/Lucene.Net.Util.IServiceListable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IServiceListable.html",
    "title": "Interface IServiceListable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface IServiceListable LUCENENET specific contract that provides support for AvailableCodecs , AvailableDocValuesFormats , and AvailablePostingsFormats . Implement this interface in addition to ICodecFactory , IDocValuesFormatFactory , or IPostingsFormatFactory to provide optional support for the above methods when providing a custom implementation. If this interface is not supported by the corresponding factory, a System.NotSupportedException will be thrown from the above methods. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IServiceListable Properties | Improve this Doc View Source AvailableServices Lists the available services for the current service type. Declaration ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String >"
  },
  "api/Lucene.Net/Lucene.Net.Util.ListExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ListExtensions.html",
    "title": "Class ListExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ListExtensions Extensions to System.Collections.Generic.IList<T> . Inheritance System.Object ListExtensions 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.Util Assembly : Lucene.Net.dll Syntax public static class ListExtensions Methods | Improve this Doc View Source AddRange<T>(IList<T>, IEnumerable<T>) Adds the elements of the specified collection to the end of the System.Collections.Generic.IList<T> . Declaration public static void AddRange<T>(this IList<T> list, IEnumerable<T> collection) Parameters Type Name Description System.Collections.Generic.IList <T> list The list to add to. System.Collections.Generic.IEnumerable <T> collection The collection whose elements should be added to the end of the System.Collections.Generic.IList<T> . The collection itself cannot be null , but it can contain elements that are null , if type T is a reference type. Type Parameters Name Description T The element type. Exceptions Type Condition System.ArgumentNullException list or collection is null . | Improve this Doc View Source IntroSort<T>(IList<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(this IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comparer The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>) If the underlying type is System.Collections.Generic.List<T> , calls System.Collections.Generic.List`1.Sort . If not, uses TimSort<T>(IList<T>) Declaration public static void Sort<T>(this IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>, IComparer<T>) If the underlying type is System.Collections.Generic.List<T> , calls System.Collections.Generic.List`1.Sort(System.Collections.Generic.IComparer{`0}) . If not, uses TimSort<T>(IList<T>, IComparer<T>) Declaration public static void Sort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comparer the comparer to use for the sort Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>, Comparison<T>) If the underlying type is System.Collections.Generic.List<T> , calls System.Collections.Generic.List`1.Sort(System.Collections.Generic.IComparer{`0}) . If not, uses TimSort<T>(IList<T>, IComparer<T>) Declaration public static void Sort<T>(this IList<T> list, Comparison<T> comparison) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Comparison <T> comparison the comparison function to use for the sort Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(this IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comparer The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.LuceneVersion.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.LuceneVersion.html",
    "title": "Enum LuceneVersion | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Enum LuceneVersion Use by certain classes to match version compatibility across releases of Lucene. WARNING : When changing the version parameter that you supply to components in Lucene, do not simply change the version at search-time, but instead also adjust your indexing code to match, and re-index. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public enum LuceneVersion Fields Name Description LUCENE_30 Match settings and bugs in Lucene's 3.0 release. LUCENE_31 Match settings and bugs in Lucene's 3.1 release. LUCENE_32 Match settings and bugs in Lucene's 3.2 release. LUCENE_33 Match settings and bugs in Lucene's 3.3 release. LUCENE_34 Match settings and bugs in Lucene's 3.4 release. LUCENE_35 Match settings and bugs in Lucene's 3.5 release. LUCENE_36 Match settings and bugs in Lucene's 3.6 release. LUCENE_40 Match settings and bugs in Lucene's 3.6 release. LUCENE_41 Match settings and bugs in Lucene's 4.1 release. LUCENE_42 Match settings and bugs in Lucene's 4.2 release. LUCENE_43 Match settings and bugs in Lucene's 4.3 release. LUCENE_44 Match settings and bugs in Lucene's 4.4 release. LUCENE_45 Match settings and bugs in Lucene's 4.5 release. LUCENE_46 Match settings and bugs in Lucene's 4.6 release. LUCENE_47 Match settings and bugs in Lucene's 4.7 release. LUCENE_48 Match settings and bugs in Lucene's 4.8 release. Use this to get the latest & greatest settings, bug fixes, etc, for Lucene. LUCENE_CURRENT WARNING : if you use this setting, and then upgrade to a newer release of Lucene, sizable changes may happen. If backwards compatibility is important then you should instead explicitly specify an actual version. If you use this constant then you may need to re-index all of your documents when upgrading Lucene, as the way text is indexed may have changed. Additionally, you may need to re-test your entire application to ensure it behaves as expected, as some defaults may have changed and may break functionality in your application. Extension Methods LuceneVersionExtensions.OnOrAfter(LuceneVersion)"
  },
  "api/Lucene.Net/Lucene.Net.Util.LuceneVersionExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.LuceneVersionExtensions.html",
    "title": "Class LuceneVersionExtensions | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class LuceneVersionExtensions Extension methods to the LuceneVersion enumeration to provide version comparison and parsing functionality. Inheritance System.Object LuceneVersionExtensions 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.Util Assembly : Lucene.Net.dll Syntax public static class LuceneVersionExtensions Methods | Improve this Doc View Source OnOrAfter(LuceneVersion, LuceneVersion) Declaration public static bool OnOrAfter(this LuceneVersion instance, LuceneVersion other) Parameters Type Name Description LuceneVersion instance LuceneVersion other Returns Type Description System.Boolean | Improve this Doc View Source ParseLeniently(String) Declaration public static LuceneVersion ParseLeniently(string version) Parameters Type Name Description System.String version Returns Type Description LuceneVersion"
  },
  "api/Lucene.Net/Lucene.Net.Util.MapOfSets-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MapOfSets-2.html",
    "title": "Class MapOfSets<TKey, TValue> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MapOfSets<TKey, TValue> Helper class for keeping Lists of Objects associated with keys. WARNING: this CLASS IS NOT THREAD SAFE This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MapOfSets<TKey, TValue> 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.Util Assembly : Lucene.Net.dll Syntax public class MapOfSets<TKey, TValue> Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source MapOfSets(IDictionary<TKey, ISet<TValue>>) Declaration public MapOfSets(IDictionary<TKey, ISet<TValue>> m) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, System.Collections.Generic.ISet <TValue>> m The backing store for this object. Properties | Improve this Doc View Source Map Declaration public virtual IDictionary<TKey, ISet<TValue>> Map { get; } Property Value Type Description System.Collections.Generic.IDictionary <TKey, System.Collections.Generic.ISet <TValue>> Direct access to the map backing this object. Methods | Improve this Doc View Source Put(TKey, TValue) Adds val to the System.Collections.Generic.ISet<T> associated with key in the System.Collections.Generic.IDictionary<TKey, TValue> . If key is not already in the map, a new System.Collections.Generic.ISet<T> will first be created. Declaration public virtual int Put(TKey key, TValue val) Parameters Type Name Description TKey key TValue val Returns Type Description System.Int32 The size of the System.Collections.Generic.ISet<T> associated with key once val is added to it. | Improve this Doc View Source PutAll(TKey, IEnumerable<TValue>) Adds multiple vals to the System.Collections.Generic.ISet<T> associated with key in the System.Collections.Generic.IDictionary<TKey, TValue> . If key is not already in the map, a new System.Collections.Generic.ISet<T> will first be created. Declaration public virtual int PutAll(TKey key, IEnumerable<TValue> vals) Parameters Type Name Description TKey key System.Collections.Generic.IEnumerable <TValue> vals Returns Type Description System.Int32 The size of the System.Collections.Generic.ISet<T> associated with key once val is added to it."
  },
  "api/Lucene.Net/Lucene.Net.Util.MathUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MathUtil.html",
    "title": "Class MathUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MathUtil Math static utility methods. Inheritance System.Object MathUtil 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.Util Assembly : Lucene.Net.dll Syntax public sealed class MathUtil Methods | Improve this Doc View Source Acosh(Double) Calculates inverse hyperbolic cosine of a System.Double value. Special cases: If the argument is NaN, then the result is NaN. If the argument is +1, then the result is a zero. If the argument is positive infinity, then the result is positive infinity. If the argument is less than 1, then the result is NaN. Declaration public static double Acosh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Asinh(Double) Calculates inverse hyperbolic sine of a System.Double value. Special cases: If the argument is NaN, then the result is NaN. If the argument is zero, then the result is a zero with the same sign as the argument. If the argument is infinite, then the result is infinity with the same sign as the argument. Declaration public static double Asinh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Atanh(Double) Calculates inverse hyperbolic tangent of a System.Double value. Special cases: If the argument is NaN, then the result is NaN. If the argument is zero, then the result is a zero with the same sign as the argument. If the argument is +1, then the result is positive infinity. If the argument is -1, then the result is negative infinity. If the argument's absolute value is greater than 1, then the result is NaN. Declaration public static double Atanh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Gcd(Int64, Int64) Return the greatest common divisor of a and b , consistently with System.Numerics.BigInteger.GreatestCommonDivisor(System.Numerics.BigInteger, System.Numerics.BigInteger) . NOTE : A greatest common divisor must be positive, but 2^64 cannot be expressed as a System.Int64 although it is the GCD of System.Int64.MinValue and 0 and the GCD of System.Int64.MinValue and System.Int64.MinValue . So in these 2 cases, and only them, this method will return System.Int64.MinValue . Declaration public static long Gcd(long a, long b) Parameters Type Name Description System.Int64 a System.Int64 b Returns Type Description System.Int64 | Improve this Doc View Source Log(Double, Double) Calculates logarithm in a given base with doubles. Declaration public static double Log(double base, double x) Parameters Type Name Description System.Double base System.Double x Returns Type Description System.Double | Improve this Doc View Source Log(Int64, Int32) Returns x <= 0 ? 0 : Math.Floor(Math.Log(x) / Math.Log(base)) . Declaration public static int Log(long x, int base) Parameters Type Name Description System.Int64 x System.Int32 base Must be > 1 . Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Util.MergedIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MergedIterator-1.html",
    "title": "Class MergedIterator<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MergedIterator<T> Provides a merged sorted view from several sorted iterators. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to true and an element appears in multiple iterators then it is deduplicated, that is this iterator returns the sorted union of elements. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to false then all elements in all iterators are returned. Caveats: The behavior is undefined if the iterators are not actually sorted. Null elements are unsupported. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to true and if a single iterator contains duplicates then they will not be deduplicated. When elements are deduplicated it is not defined which one is returned. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to false then the order in which duplicates are returned isn't defined. The caller is responsible for disposing the System.Collections.Generic.IEnumerator<T> instances that are passed into the constructor, MergedIterator<T> doesn't do it automatically. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MergedIterator<T> Implements System.Collections.Generic.IEnumerator <T> System.Collections.IEnumerator 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.Util Assembly : Lucene.Net.dll Syntax public sealed class MergedIterator<T> : IEnumerator<T>, IEnumerator, IDisposable where T : IComparable<T> Type Parameters Name Description T Constructors | Improve this Doc View Source MergedIterator(Boolean, IEnumerator<T>[]) Declaration public MergedIterator(bool removeDuplicates, params IEnumerator<T>[] iterators) Parameters Type Name Description System.Boolean removeDuplicates System.Collections.Generic.IEnumerator <T>[] iterators | Improve this Doc View Source MergedIterator(IEnumerator<T>[]) Declaration public MergedIterator(params IEnumerator<T>[] iterators) Parameters Type Name Description System.Collections.Generic.IEnumerator <T>[] iterators Properties | Improve this Doc View Source Current Declaration public T Current { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.html",
    "title": "Namespace Lucene.Net.Util.Mutable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Mutable <!-- 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. --> Comparable object wrappers Classes MutableValue Base class for all mutable values. This is a Lucene.NET INTERNAL API, use at your own risk MutableValueBool MutableValue implementation of type System.Boolean . MutableValueDate MutableValue implementation of type System.DateTime . MutableValueDouble MutableValue implementation of type System.Double . MutableValueInt32 MutableValue implementation of type System.Int32 . NOTE: This was MutableValueInt in Lucene MutableValueInt64 MutableValue implementation of type System.Int64 . NOTE: This was MutableValueLong in Lucene MutableValueSingle MutableValue implementation of type System.Single . NOTE: This was MutableValueFloat in Lucene MutableValueStr MutableValue implementation of type System.String ."
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValue.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValue.html",
    "title": "Class MutableValue | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValue Base class for all mutable values. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MutableValue MutableValueBool MutableValueDouble MutableValueInt32 MutableValueInt64 MutableValueSingle MutableValueStr Implements System.IComparable < MutableValue > System.IComparable 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.Util.Mutable Assembly : Lucene.Net.dll Syntax public abstract class MutableValue : IComparable<MutableValue>, IComparable Constructors | Improve this Doc View Source MutableValue() Declaration protected MutableValue() Properties | Improve this Doc View Source Exists Declaration public bool Exists { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CompareSameType(Object) Declaration public abstract int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(MutableValue) Declaration public virtual int CompareTo(MutableValue other) Parameters Type Name Description MutableValue other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(Object) Declaration public virtual int CompareTo(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source Copy(MutableValue) Declaration public abstract void Copy(MutableValue source) Parameters Type Name Description MutableValue source | Improve this Doc View Source Duplicate() Declaration public abstract MutableValue Duplicate() Returns Type Description MutableValue | 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 EqualsSameType(Object) Declaration public abstract bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToObject() Declaration public abstract object ToObject() Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueBool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueBool.html",
    "title": "Class MutableValueBool | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValueBool MutableValue implementation of type System.Boolean . Inheritance System.Object MutableValue MutableValueBool Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueBool : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public bool Value { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDate.html",
    "title": "Class MutableValueDate | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValueDate MutableValue implementation of type System.DateTime . Inheritance System.Object MutableValue MutableValueInt64 MutableValueDate Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValueInt64.Value MutableValueInt64.Copy(MutableValue) MutableValueInt64.EqualsSameType(Object) MutableValueInt64.CompareSameType(Object) MutableValueInt64.GetHashCode() MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueDate : MutableValueInt64, IComparable<MutableValue>, IComparable Methods | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValueInt64.Duplicate() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValueInt64.ToObject() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDouble.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDouble.html",
    "title": "Class MutableValueDouble | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValueDouble MutableValue implementation of type System.Double . Inheritance System.Object MutableValue MutableValueDouble Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueDouble : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public double Value { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt32.html",
    "title": "Class MutableValueInt32 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValueInt32 MutableValue implementation of type System.Int32 . NOTE: This was MutableValueInt in Lucene Inheritance System.Object MutableValue MutableValueInt32 Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueInt32 : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public int Value { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt64.html",
    "title": "Class MutableValueInt64 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValueInt64 MutableValue implementation of type System.Int64 . NOTE: This was MutableValueLong in Lucene Inheritance System.Object MutableValue MutableValueInt64 MutableValueDate Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueInt64 : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public long Value { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueSingle.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueSingle.html",
    "title": "Class MutableValueSingle | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValueSingle MutableValue implementation of type System.Single . NOTE: This was MutableValueFloat in Lucene Inheritance System.Object MutableValue MutableValueSingle Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueSingle : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public float Value { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueStr.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueStr.html",
    "title": "Class MutableValueStr | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MutableValueStr MutableValue implementation of type System.String . Inheritance System.Object MutableValue MutableValueStr Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueStr : MutableValue, IComparable<MutableValue>, IComparable Constructors | Improve this Doc View Source MutableValueStr() Declaration public MutableValueStr() Properties | Improve this Doc View Source Value Declaration public BytesRef Value { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.NamedServiceFactory-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NamedServiceFactory-1.html",
    "title": "Class NamedServiceFactory<TService> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NamedServiceFactory<TService> LUCENENET specific abstract class containing common fuctionality for named service factories. Inheritance System.Object NamedServiceFactory<TService> DefaultCodecFactory DefaultDocValuesFormatFactory DefaultPostingsFormatFactory 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.Util Assembly : Lucene.Net.dll Syntax public abstract class NamedServiceFactory<TService> Type Parameters Name Description TService The type of service this factory applies to. Fields | Improve this Doc View Source m_initializationLock Declaration protected object m_initializationLock Field Value Type Description System.Object Properties | Improve this Doc View Source CodecsAssembly The Lucene.Net.Codecs assembly or null if the assembly is not referenced in the host project. Declaration protected Assembly CodecsAssembly { get; } Property Value Type Description System.Reflection.Assembly | Improve this Doc View Source IsFullyTrusted Gets a value that indicates whether the current application domain executes with full trust. Declaration protected bool IsFullyTrusted { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source EnsureInitialized() Ensures the Initialize() method has been called since the last application start. This method is thread-safe. Declaration protected void EnsureInitialized() | Improve this Doc View Source GetCanonicalName(Type) Gets the type name without the suffix of the abstract base class it implements. If the class is generic, it will add the word \"Generic\" to the suffix in place of \"`\" to ensure the name is ASCII-only. Declaration protected static string GetCanonicalName(Type type) Parameters Type Name Description System.Type type The System.Type to get the name for. Returns Type Description System.String The canonical name of the service. | Improve this Doc View Source GetServiceName(Type) Get the service name for the class (either by convention or by attribute). Declaration public static string GetServiceName(Type type) Parameters Type Name Description System.Type type A service to get the name for. Returns Type Description System.String The canonical name of the service or the name provided in the corresponding name attribute, if supplied. | Improve this Doc View Source Initialize() Initializes the dependencies of this factory (such as using Reflection to populate the type cache). Declaration protected abstract void Initialize() | Improve this Doc View Source IsServiceType(Type) Determines whether the given type is corresponding service for this class, based on its generic closing type TService . Declaration protected virtual bool IsServiceType(Type type) Parameters Type Name Description System.Type type The System.Type of service to analyze. Returns Type Description System.Boolean true if the service subclasses TService , is public, and is not abstract; otherwise false ."
  },
  "api/Lucene.Net/Lucene.Net.Util.NumberFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumberFormat.html",
    "title": "Class NumberFormat | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumberFormat A LUCENENET specific class that represents a numeric format. This class mimicks the design of Java's NumberFormat class, which unlike the System.Globalization.NumberFormatInfo class in .NET, can be subclassed. Inheritance System.Object NumberFormat 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) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class NumberFormat Constructors | Improve this Doc View Source NumberFormat(CultureInfo) Declaration public NumberFormat(CultureInfo culture) Parameters Type Name Description System.Globalization.CultureInfo culture Properties | Improve this Doc View Source Culture Declaration protected CultureInfo Culture { get; } Property Value Type Description System.Globalization.CultureInfo Methods | Improve this Doc View Source Format(Double) Declaration public virtual string Format(double number) Parameters Type Name Description System.Double number Returns Type Description System.String | Improve this Doc View Source Format(Int64) Declaration public virtual string Format(long number) Parameters Type Name Description System.Int64 number Returns Type Description System.String | Improve this Doc View Source Format(Object) Declaration public virtual string Format(object number) Parameters Type Name Description System.Object number Returns Type Description System.String | Improve this Doc View Source GetNumberFormat() When overridden in a subclass, provides the numeric format as a System.String . Generally, this is the same format that is passed into the method. Declaration protected virtual string GetNumberFormat() Returns Type Description System.String A numeric format string. | Improve this Doc View Source Parse(String) Declaration public virtual object Parse(string source) Parameters Type Name Description System.String source Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.html",
    "title": "Class NumericUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericUtils This is a helper class to generate prefix-encoded representations for numerical values and supplies converters to represent float/double values as sortable integers/longs. To quickly execute range queries in Apache Lucene, a range is divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie, while the boundaries are matched more exactly. this reduces the number of terms dramatically. This class generates terms to achieve this: First the numerical integer values need to be converted to bytes. For that integer values (32 bit or 64 bit) are made unsigned and the bits are converted to ASCII chars with each 7 bit. The resulting byte[] is sortable like the original integer value (even using UTF-8 sort order). Each value is also prefixed (in the first char) by the shift value (number of bits removed) used during encoding. To also index floating point numbers, this class supplies two methods to convert them to integer values by changing their bit layout: DoubleToSortableInt64(Double) , SingleToSortableInt32(Single) . You will have no precision loss by converting floating point numbers to integers and back (only that the integer form is not usable). Other data types like dates can easily converted to System.Int64 s or System.Int32 s (e.g. date to long: System.DateTime.Ticks ). For easy usage, the trie algorithm is implemented for indexing inside NumericTokenStream that can index System.Int32 , System.Int64 , System.Single , and System.Double . For querying, NumericRangeQuery and NumericRangeFilter implement the query part for the same data types. This class can also be used, to generate lexicographically sortable (according to UTF8SortedAsUTF16Comparer ) representations of numeric data types for other usages (e.g. sorting). This is a Lucene.NET INTERNAL API, use at your own risk @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils 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.Util Assembly : Lucene.Net.dll Syntax public sealed class NumericUtils Fields | Improve this Doc View Source BUF_SIZE_INT32 The maximum term length (used for byte[] buffer size) for encoding System.Int32 values. NOTE: This was BUF_SIZE_INT in Lucene Declaration public const int BUF_SIZE_INT32 = 6 Field Value Type Description System.Int32 See Also Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) | Improve this Doc View Source BUF_SIZE_INT64 The maximum term length (used for byte[] buffer size) for encoding System.Int64 values. NOTE: This was BUF_SIZE_LONG in Lucene Declaration public const int BUF_SIZE_INT64 = 11 Field Value Type Description System.Int32 See Also Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) | Improve this Doc View Source PRECISION_STEP_DEFAULT The default precision step used by Int32Field , SingleField , Int64Field , DoubleField , NumericTokenStream , NumericRangeQuery , and NumericRangeFilter . Declaration public const int PRECISION_STEP_DEFAULT = 4 Field Value Type Description System.Int32 | Improve this Doc View Source SHIFT_START_INT32 Integers are stored at lower precision by shifting off lower bits. The shift count is stored as SHIFT_START_INT32+shift in the first byte NOTE: This was SHIFT_START_INT in Lucene Declaration public const byte SHIFT_START_INT32 = 96 Field Value Type Description System.Byte | Improve this Doc View Source SHIFT_START_INT64 Longs are stored at lower precision by shifting off lower bits. The shift count is stored as SHIFT_START_INT64+shift in the first byte NOTE: This was SHIFT_START_LONG in Lucene Declaration public const char SHIFT_START_INT64 = ' ' Field Value Type Description System.Char Methods | Improve this Doc View Source DoubleToSortableInt64(Double) Converts a System.Double value to a sortable signed System.Int64 . The value is converted by getting their IEEE 754 floating-point \"double format\" bit layout and then some bits are swapped, to be able to compare the result as System.Int64 . By this the precision is not reduced, but the value can easily used as a System.Int64 . The sort order (including System.Double.NaN ) is defined by System.Double.CompareTo(System.Double) ; NaN is greater than positive infinity. NOTE: This was doubleToSortableLong() in Lucene Declaration public static long DoubleToSortableInt64(double val) Parameters Type Name Description System.Double val Returns Type Description System.Int64 See Also SortableInt64ToDouble(Int64) | Improve this Doc View Source FilterPrefixCodedInt32s(TermsEnum) Filters the given TermsEnum by accepting only prefix coded 32 bit terms with a shift value of 0 . NOTE: This was filterPrefixCodedInts() in Lucene Declaration public static TermsEnum FilterPrefixCodedInt32s(TermsEnum termsEnum) Parameters Type Name Description TermsEnum termsEnum The terms enum to filter Returns Type Description TermsEnum A filtered TermsEnum that only returns prefix coded 32 bit terms with a shift value of 0 . | Improve this Doc View Source FilterPrefixCodedInt64s(TermsEnum) Filters the given TermsEnum by accepting only prefix coded 64 bit terms with a shift value of 0 . NOTE: This was filterPrefixCodedLongs() in Lucene Declaration public static TermsEnum FilterPrefixCodedInt64s(TermsEnum termsEnum) Parameters Type Name Description TermsEnum termsEnum The terms enum to filter Returns Type Description TermsEnum A filtered TermsEnum that only returns prefix coded 64 bit terms with a shift value of 0 . | Improve this Doc View Source GetPrefixCodedInt32Shift(BytesRef) Returns the shift value from a prefix encoded System.Int32 . NOTE: This was getPrefixCodedIntShift() in Lucene Declaration public static int GetPrefixCodedInt32Shift(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. | Improve this Doc View Source GetPrefixCodedInt64Shift(BytesRef) Returns the shift value from a prefix encoded System.Int64 . NOTE: This was getPrefixCodedLongShift() in Lucene Declaration public static int GetPrefixCodedInt64Shift(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. | Improve this Doc View Source Int32ToPrefixCoded(Int32, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was intToPrefixCoded() in Lucene Declaration public static void Int32ToPrefixCoded(int val, int shift, BytesRef bytes) Parameters Type Name Description System.Int32 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was intToPrefixCodedBytes() in Lucene Declaration public static void Int32ToPrefixCodedBytes(int val, int shift, BytesRef bytes) Parameters Type Name Description System.Int32 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int64ToPrefixCoded(Int64, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was longToPrefixCoded() in Lucene Declaration public static void Int64ToPrefixCoded(long val, int shift, BytesRef bytes) Parameters Type Name Description System.Int64 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was longToPrefixCodedBytes() in Lucene Declaration public static void Int64ToPrefixCodedBytes(long val, int shift, BytesRef bytes) Parameters Type Name Description System.Int64 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source PrefixCodedToInt32(BytesRef) Returns an System.Int32 from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value. NOTE: This was prefixCodedToInt() in Lucene Declaration public static int PrefixCodedToInt32(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. See Also Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) | Improve this Doc View Source PrefixCodedToInt64(BytesRef) Returns a System.Int64 from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value. NOTE: This was prefixCodedToLong() in Lucene Declaration public static long PrefixCodedToInt64(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int64 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. See Also Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) | Improve this Doc View Source SingleToSortableInt32(Single) Converts a System.Single value to a sortable signed System.Int32 . The value is converted by getting their IEEE 754 floating-point \"float format\" bit layout and then some bits are swapped, to be able to compare the result as System.Int32 . By this the precision is not reduced, but the value can easily used as an System.Int32 . The sort order (including System.Single.NaN ) is defined by System.Single.CompareTo(System.Single) ; NaN is greater than positive infinity. NOTE: This was floatToSortableInt() in Lucene Declaration public static int SingleToSortableInt32(float val) Parameters Type Name Description System.Single val Returns Type Description System.Int32 See Also SortableInt32ToSingle(Int32) | Improve this Doc View Source SortableInt32ToSingle(Int32) Converts a sortable System.Int32 back to a System.Single . NOTE: This was sortableIntToFloat() in Lucene Declaration public static float SortableInt32ToSingle(int val) Parameters Type Name Description System.Int32 val Returns Type Description System.Single See Also SingleToSortableInt32(Single) | Improve this Doc View Source SortableInt64ToDouble(Int64) Converts a sortable System.Int64 back to a System.Double . NOTE: This was sortableLongToDouble() in Lucene Declaration public static double SortableInt64ToDouble(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.Double See Also DoubleToSortableInt64(Double) | Improve this Doc View Source SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) Splits an System.Int32 range recursively. You may implement a builder that adds clauses to a BooleanQuery for each call to its AddRange(BytesRef, BytesRef) method. This method is used by NumericRangeQuery . NOTE: This was splitIntRange() in Lucene Declaration public static void SplitInt32Range(NumericUtils.Int32RangeBuilder builder, int precisionStep, int minBound, int maxBound) Parameters Type Name Description NumericUtils.Int32RangeBuilder builder System.Int32 precisionStep System.Int32 minBound System.Int32 maxBound | Improve this Doc View Source SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) Splits a long range recursively. You may implement a builder that adds clauses to a BooleanQuery for each call to its AddRange(BytesRef, BytesRef) method. This method is used by NumericRangeQuery . NOTE: This was splitLongRange() in Lucene Declaration public static void SplitInt64Range(NumericUtils.Int64RangeBuilder builder, int precisionStep, long minBound, long maxBound) Parameters Type Name Description NumericUtils.Int64RangeBuilder builder System.Int32 precisionStep System.Int64 minBound System.Int64 maxBound"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int32RangeBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int32RangeBuilder.html",
    "title": "Class NumericUtils.Int32RangeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericUtils.Int32RangeBuilder Callback for SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) . You need to override only one of the methods. NOTE: This was IntRangeBuilder in Lucene This is a Lucene.NET INTERNAL API, use at your own risk @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils.Int32RangeBuilder 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.Util Assembly : Lucene.Net.dll Syntax public abstract class Int32RangeBuilder Methods | Improve this Doc View Source AddRange(BytesRef, BytesRef) Override this method, if you like to receive the already prefix encoded range bounds. You can directly build classical range (inclusive) queries from them. Declaration public virtual void AddRange(BytesRef minPrefixCoded, BytesRef maxPrefixCoded) Parameters Type Name Description BytesRef minPrefixCoded BytesRef maxPrefixCoded | Improve this Doc View Source AddRange(Int32, Int32, Int32) Override this method, if you like to receive the raw int range bounds. You can use this for e.g. debugging purposes (print out range bounds). Declaration public virtual void AddRange(int min, int max, int shift) Parameters Type Name Description System.Int32 min System.Int32 max System.Int32 shift"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int64RangeBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int64RangeBuilder.html",
    "title": "Class NumericUtils.Int64RangeBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class NumericUtils.Int64RangeBuilder Callback for SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) . You need to override only one of the methods. NOTE: This was LongRangeBuilder in Lucene This is a Lucene.NET INTERNAL API, use at your own risk @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils.Int64RangeBuilder 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.Util Assembly : Lucene.Net.dll Syntax public abstract class Int64RangeBuilder Methods | Improve this Doc View Source AddRange(BytesRef, BytesRef) Override this method, if you like to receive the already prefix encoded range bounds. You can directly build classical (inclusive) range queries from them. Declaration public virtual void AddRange(BytesRef minPrefixCoded, BytesRef maxPrefixCoded) Parameters Type Name Description BytesRef minPrefixCoded BytesRef maxPrefixCoded | Improve this Doc View Source AddRange(Int64, Int64, Int32) Override this method, if you like to receive the raw long range bounds. You can use this for e.g. debugging purposes (print out range bounds). Declaration public virtual void AddRange(long min, long max, int shift) Parameters Type Name Description System.Int64 min System.Int64 max System.Int32 shift"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.BufferSize.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.BufferSize.html",
    "title": "Class OfflineSorter.BufferSize | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OfflineSorter.BufferSize A bit more descriptive unit for constructors. Inheritance System.Object OfflineSorter.BufferSize 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.Util Assembly : Lucene.Net.dll Syntax public sealed class BufferSize Methods | Improve this Doc View Source Automatic() Approximately half of the currently available free heap, but no less than ABSOLUTE_MIN_SORT_BUFFER_SIZE . However if current heap allocation is insufficient or if there is a large portion of unallocated heap-space available for sorting consult with max allowed heap size. Declaration public static OfflineSorter.BufferSize Automatic() Returns Type Description OfflineSorter.BufferSize | Improve this Doc View Source Megabytes(Int64) Creates a OfflineSorter.BufferSize in MB. The given values must be > 0 and < 2048. Declaration public static OfflineSorter.BufferSize Megabytes(long mb) Parameters Type Name Description System.Int64 mb Returns Type Description OfflineSorter.BufferSize See Also Automatic() Megabytes(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesReader.html",
    "title": "Class OfflineSorter.ByteSequencesReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OfflineSorter.ByteSequencesReader Utility class to read length-prefixed byte[] entries from an input. Complementary to OfflineSorter.ByteSequencesWriter . Inheritance System.Object OfflineSorter.ByteSequencesReader 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.Util Assembly : Lucene.Net.dll Syntax public class ByteSequencesReader : IDisposable Constructors | Improve this Doc View Source ByteSequencesReader(DataInput) Constructs a OfflineSorter.ByteSequencesReader from the provided DataInput . Declaration public ByteSequencesReader(DataInput inputStream) Parameters Type Name Description DataInput inputStream | Improve this Doc View Source ByteSequencesReader(FileInfo) Constructs a OfflineSorter.ByteSequencesReader from the provided System.IO.FileInfo . Declaration public ByteSequencesReader(FileInfo file) Parameters Type Name Description System.IO.FileInfo file Methods | Improve this Doc View Source Dispose() Disposes the provided DataInput if it is System.IDisposable . Declaration public void Dispose() | Improve this Doc View Source Read() Reads the next entry and returns it if successful. Declaration public virtual byte[] Read() Returns Type Description System.Byte [] Returns null if EOF occurred before the next entry could be read. Exceptions Type Condition System.IO.EndOfStreamException If the file ends before the full sequence is read. See Also Read(BytesRef) | Improve this Doc View Source Read(BytesRef) Reads the next entry into the provided BytesRef . The internal storage is resized if needed. Declaration public virtual bool Read(BytesRef ref) Parameters Type Name Description BytesRef ref Returns Type Description System.Boolean Returns false if EOF occurred when trying to read the header of the next sequence. Returns true otherwise. Exceptions Type Condition System.IO.EndOfStreamException If the file ends before the full sequence is read. Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesWriter.html",
    "title": "Class OfflineSorter.ByteSequencesWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OfflineSorter.ByteSequencesWriter Utility class to emit length-prefixed byte[] entries to an output stream for sorting. Complementary to OfflineSorter.ByteSequencesReader . Inheritance System.Object OfflineSorter.ByteSequencesWriter 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.Util Assembly : Lucene.Net.dll Syntax public class ByteSequencesWriter : IDisposable Constructors | Improve this Doc View Source ByteSequencesWriter(DataOutput) Constructs a OfflineSorter.ByteSequencesWriter to the provided DataOutput . Declaration public ByteSequencesWriter(DataOutput os) Parameters Type Name Description DataOutput os | Improve this Doc View Source ByteSequencesWriter(FileInfo) Constructs a OfflineSorter.ByteSequencesWriter to the provided System.IO.FileInfo . Declaration public ByteSequencesWriter(FileInfo file) Parameters Type Name Description System.IO.FileInfo file Methods | Improve this Doc View Source Dispose() Disposes the provided DataOutput if it is System.IDisposable . Declaration public void Dispose() | Improve this Doc View Source Write(BytesRef) Writes a BytesRef . Declaration public virtual void Write(BytesRef ref) Parameters Type Name Description BytesRef ref See Also Write(Byte[], Int32, Int32) | Improve this Doc View Source Write(Byte[]) Writes a byte array. Declaration public virtual void Write(byte[] bytes) Parameters Type Name Description System.Byte [] bytes See Also Write(Byte[], Int32, Int32) | Improve this Doc View Source Write(Byte[], Int32, Int32) Writes a byte array. The length is written as a System.Int16 , followed by the bytes. Declaration public virtual void Write(byte[] bytes, int off, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.html",
    "title": "Class OfflineSorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OfflineSorter On-disk sorting of byte arrays. Each byte array (entry) is a composed of the following fields: (two bytes) length of the following byte array, exactly the above count of bytes for the sequence to be sorted. Inheritance System.Object OfflineSorter 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.Util Assembly : Lucene.Net.dll Syntax public sealed class OfflineSorter Constructors | Improve this Doc View Source OfflineSorter() Defaults constructor. Declaration public OfflineSorter() See Also DefaultTempDir() Automatic() | Improve this Doc View Source OfflineSorter(IComparer<BytesRef>) Defaults constructor with a custom comparer. Declaration public OfflineSorter(IComparer<BytesRef> comparer) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comparer See Also DefaultTempDir() Automatic() | Improve this Doc View Source OfflineSorter(IComparer<BytesRef>, OfflineSorter.BufferSize, DirectoryInfo, Int32) All-details constructor. Declaration public OfflineSorter(IComparer<BytesRef> comparer, OfflineSorter.BufferSize ramBufferSize, DirectoryInfo tempDirectory, int maxTempfiles) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comparer OfflineSorter.BufferSize ramBufferSize System.IO.DirectoryInfo tempDirectory System.Int32 maxTempfiles Fields | Improve this Doc View Source ABSOLUTE_MIN_SORT_BUFFER_SIZE Absolute minimum required buffer size for sorting. Declaration public static readonly long ABSOLUTE_MIN_SORT_BUFFER_SIZE Field Value Type Description System.Int64 | Improve this Doc View Source DEFAULT_COMPARER Default comparer: sorts in binary (codepoint) order Declaration public static readonly IComparer<BytesRef> DEFAULT_COMPARER Field Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source GB Convenience constant for gigabytes Declaration public static readonly long GB Field Value Type Description System.Int64 | Improve this Doc View Source MAX_TEMPFILES Maximum number of temporary files before doing an intermediate merge. Declaration public static readonly int MAX_TEMPFILES Field Value Type Description System.Int32 | Improve this Doc View Source MB Convenience constant for megabytes Declaration public static readonly long MB Field Value Type Description System.Int64 | Improve this Doc View Source MIN_BUFFER_SIZE_MB Minimum recommended buffer size for sorting. Declaration public static readonly long MIN_BUFFER_SIZE_MB Field Value Type Description System.Int64 Properties | Improve this Doc View Source Comparer Returns the comparer in use to sort entries Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source DefaultTempDir() Returns the default temporary directory. By default, the System's temp folder. If not accessible or not available, an System.IO.IOException is thrown. Declaration public static DirectoryInfo DefaultTempDir() Returns Type Description System.IO.DirectoryInfo | Improve this Doc View Source Sort(FileInfo, FileInfo) Sort input to output, explicit hint for the buffer size. The amount of allocated memory may deviate from the hint (may be smaller or larger). Declaration public OfflineSorter.SortInfo Sort(FileInfo input, FileInfo output) Parameters Type Name Description System.IO.FileInfo input System.IO.FileInfo output Returns Type Description OfflineSorter.SortInfo"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.SortInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.SortInfo.html",
    "title": "Class OfflineSorter.SortInfo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OfflineSorter.SortInfo Sort info (debugging mostly). Inheritance System.Object OfflineSorter.SortInfo 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) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SortInfo Constructors | Improve this Doc View Source SortInfo(OfflineSorter) Create a new OfflineSorter.SortInfo (with empty statistics) for debugging. Declaration public SortInfo(OfflineSorter outerInstance) Parameters Type Name Description OfflineSorter outerInstance Properties | Improve this Doc View Source BufferSize Read buffer size (in bytes) Declaration public long BufferSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Lines Number of lines of data read Declaration public int Lines { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeRounds Number of partition merges Declaration public int MergeRounds { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeTime Time spent merging sorted partitions (in milliseconds) Declaration public long MergeTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source ReadTime Time spent in i/o read (in milliseconds) Declaration public long ReadTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source SortTime Time spent sorting data (in milliseconds) Declaration public long SortTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TempMergeFiles Number of temporary files created when merging partitions Declaration public int TempMergeFiles { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTime Total time spent (in milliseconds) Declaration public long TotalTime { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Returns a string representation of this object. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSet.html",
    "title": "Class OpenBitSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenBitSet An \"open\" BitSet implementation that allows direct access to the array of words storing the bits. NOTE: This can be used in .NET any place where a java.util.BitSet is used in Java. Unlike java.util.BitSet , the fact that bits are packed into an array of longs is part of the interface. This allows efficient implementation of other algorithms by someone other than the author. It also allows one to efficiently implement alternate serialization or interchange formats. OpenBitSet is faster than java.util.BitSet in most operations and much faster at calculating cardinality of sets and results of set operations. It can also handle sets of larger cardinality (up to 64 * 2**32-1) The goals of OpenBitSet are the fastest implementation possible, and maximum code reuse. Extra safety and encapsulation may always be built on top, but if that's built in, the cost can never be removed (and hence people re-implement their own version in order to get better performance). Performance Results Test system: Pentium 4, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 3.363.961.441.461.991.58 1% full 3.313.90 1.04 0.99 Test system: AMD Opteron, 64 bit linux, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 2.503.501.001.031.121.25 1% full 2.513.49 1.00 1.02 Inheritance System.Object DocIdSet OpenBitSet OpenBitSetDISI Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) 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.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source OpenBitSet() Constructor: allocates enough space for 64 bits. Declaration public OpenBitSet() | Improve this Doc View Source OpenBitSet(Int64) Constructs an OpenBitSet large enough to hold numBits . Declaration public OpenBitSet(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source OpenBitSet(Int64[], Int32) Constructs an OpenBitSet from an existing long[] . The first 64 bits are in long[0], with bit index 0 at the least significant bit, and bit index 63 at the most significant. Given a bit index, the word containing it is long[index/64], and it is at bit number index%64 within that word. numWords are the number of elements in the array that contain set bits (non-zero longs). numWords should be <= bits.Length, and any existing words in the array at position >= numWords should be zero. Declaration public OpenBitSet(long[] bits, int numWords) Parameters Type Name Description System.Int64 [] bits System.Int32 numWords Fields | Improve this Doc View Source m_bits Declaration protected long[] m_bits Field Value Type Description System.Int64 [] | Improve this Doc View Source m_wlen Declaration protected int m_wlen Field Value Type Description System.Int32 Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source Capacity Returns the current capacity in bits (1 greater than the index of the last bit). Declaration public virtual long Capacity { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source IsEmpty Returns true if there are no set bits Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Returns the current capacity of this set. This is not equal to Cardinality() . NOTE: This is equivalent to size() or length() in Lucene. Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumWords Expert: gets the number of System.Int64 s in the array that are in use. Declaration public virtual int NumWords { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source And(OpenBitSet) see Intersect(OpenBitSet) Declaration public virtual void And(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source AndNot(OpenBitSet) see AndNot(OpenBitSet) Declaration public virtual void AndNot(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source AndNotCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of \"a and not b\" or \"intersection(a, not(b))\". Neither set is modified. Declaration public static long AndNotCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Bits2words(Int64) Returns the number of 64 bit words it would take to hold numBits . Declaration public static int Bits2words(long numBits) Parameters Type Name Description System.Int64 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Get the number of set bits. Declaration public virtual long Cardinality() Returns Type Description System.Int64 The number of set bits. | Improve this Doc View Source Clear(Int32, Int32) Clears a range of bits. Clearing past the end does not change the size of the set. Declaration public virtual void Clear(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to clear | Improve this Doc View Source Clear(Int64) Clears a bit, allowing access beyond the current set size without changing the size. Declaration public virtual void Clear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Clear(Int64, Int64) Clears a range of bits. Clearing past the end does not change the size of the set. Declaration public virtual void Clear(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source EnsureCapacity(Int64) Ensure that the long[] is big enough to hold numBits, expanding it if necessary. Declaration public virtual void EnsureCapacity(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source EnsureCapacityWords(Int32) Expand the long[] with the size given as a number of words (64 bit longs). Declaration public virtual void EnsureCapacityWords(int numWords) Parameters Type Name Description System.Int32 numWords | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source ExpandingWordNum(Int64) Declaration protected virtual int ExpandingWordNum(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int32 | Improve this Doc View Source FastClear(Int32) Clears a bit. The index should be less than the Length . Declaration public virtual void FastClear(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastClear(Int64) Clears a bit. The index should be less than the Length . Declaration public virtual void FastClear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source FastFlip(Int32) Flips a bit. The index should be less than the Length . Declaration public virtual void FastFlip(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastFlip(Int64) Flips a bit. The index should be less than the Length . Declaration public virtual void FastFlip(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source FastGet(Int32) Returns true or false for the specified bit index . The index should be less than the Length . Declaration public virtual bool FastGet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source FastGet(Int64) Returns true or false for the specified bit index . The index should be less than the Length . Declaration public virtual bool FastGet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source FastSet(Int32) Sets the bit at the specified index . The index should be less than the Length . Declaration public virtual void FastSet(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastSet(Int64) Sets the bit at the specified index . The index should be less than the Length . Declaration public virtual void FastSet(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Flip(Int64) Flips a bit, expanding the set size if necessary. Declaration public virtual void Flip(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Flip(Int64, Int64) Flips a range of bits, expanding the set size if necessary. Declaration public virtual void Flip(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to flip | Improve this Doc View Source FlipAndGet(Int32) Flips a bit and returns the resulting bit value. The index should be less than the Length . Declaration public virtual bool FlipAndGet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source FlipAndGet(Int64) Flips a bit and returns the resulting bit value. The index should be less than the Length . Declaration public virtual bool FlipAndGet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source Get(Int32) Returns true or false for the specified bit index . Declaration public virtual bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source Get(Int64) Returns true or false for the specified bit index . Declaration public virtual bool Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int32) Sets a bit and returns the previous value. The index should be less than the Length . Declaration public virtual bool GetAndSet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int64) Sets a bit and returns the previous value. The index should be less than the Length . Declaration public virtual bool GetAndSet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetBit(Int32) Returns 1 if the bit is set, 0 if not. The index should be less than the Length . Declaration public virtual int GetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source GetBits() Expert: returns the long[] storing the bits. Declaration public virtual long[] GetBits() Returns Type Description System.Int64 [] | 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 GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source Intersect(OpenBitSet) this = this AND other Declaration public virtual void Intersect(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source IntersectionCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the intersection of the two sets. Neither set is modified. Declaration public static long IntersectionCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Intersects(OpenBitSet) returns true if the sets have any elements in common. Declaration public virtual bool Intersects(OpenBitSet other) Parameters Type Name Description OpenBitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int32) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public virtual int NextSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source NextSetBit(Int64) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public virtual long NextSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Or(OpenBitSet) see Union(OpenBitSet) Declaration public virtual void Or(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source PrevSetBit(Int32) Returns the index of the first set bit starting downwards at the index specified. -1 is returned if there are no more set bits. Declaration public virtual int PrevSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source PrevSetBit(Int64) Returns the index of the first set bit starting downwards at the index specified. -1 is returned if there are no more set bits. Declaration public virtual long PrevSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Remove(OpenBitSet) Remove all elements set in other. this = this AND_NOT other. Declaration public virtual void Remove(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source Set(Int64) Sets a bit, expanding the set size if necessary. Declaration public virtual void Set(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Set(Int64, Int64) Sets a range of bits, expanding the set size if necessary. Declaration public virtual void Set(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to set | Improve this Doc View Source TrimTrailingZeros() Lowers numWords, the number of words in use, by checking for trailing zero words. Declaration public virtual void TrimTrailingZeros() | Improve this Doc View Source Union(OpenBitSet) this = this OR other Declaration public virtual void Union(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source UnionCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the union of the two sets. Neither set is modified. Declaration public static long UnionCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Xor(OpenBitSet) this = this XOR other Declaration public virtual void Xor(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source XorCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the exclusive-or of the two sets. Neither set is modified. Declaration public static long XorCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSetDISI.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSetDISI.html",
    "title": "Class OpenBitSetDISI | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenBitSetDISI OpenBitSet with added methods to bulk-update the bits from a DocIdSetIterator . (DISI stands for DocIdSetIterator ). Inheritance System.Object DocIdSet OpenBitSet OpenBitSetDISI Implements IBits Inherited Members OpenBitSet.m_bits OpenBitSet.m_wlen OpenBitSet.GetIterator() OpenBitSet.Bits OpenBitSet.IsCacheable OpenBitSet.Capacity OpenBitSet.Length OpenBitSet.IsEmpty OpenBitSet.GetBits() OpenBitSet.NumWords OpenBitSet.Get(Int32) OpenBitSet.FastGet(Int32) OpenBitSet.Get(Int64) OpenBitSet.FastGet(Int64) OpenBitSet.GetBit(Int32) OpenBitSet.Set(Int64) OpenBitSet.FastSet(Int32) OpenBitSet.FastSet(Int64) OpenBitSet.Set(Int64, Int64) OpenBitSet.ExpandingWordNum(Int64) OpenBitSet.FastClear(Int32) OpenBitSet.FastClear(Int64) OpenBitSet.Clear(Int64) OpenBitSet.Clear(Int32, Int32) OpenBitSet.Clear(Int64, Int64) OpenBitSet.GetAndSet(Int32) OpenBitSet.GetAndSet(Int64) OpenBitSet.FastFlip(Int32) OpenBitSet.FastFlip(Int64) OpenBitSet.Flip(Int64) OpenBitSet.FlipAndGet(Int32) OpenBitSet.FlipAndGet(Int64) OpenBitSet.Flip(Int64, Int64) OpenBitSet.Cardinality() OpenBitSet.IntersectionCount(OpenBitSet, OpenBitSet) OpenBitSet.UnionCount(OpenBitSet, OpenBitSet) OpenBitSet.AndNotCount(OpenBitSet, OpenBitSet) OpenBitSet.XorCount(OpenBitSet, OpenBitSet) OpenBitSet.NextSetBit(Int32) OpenBitSet.NextSetBit(Int64) OpenBitSet.PrevSetBit(Int32) OpenBitSet.PrevSetBit(Int64) OpenBitSet.Clone() OpenBitSet.Intersect(OpenBitSet) OpenBitSet.Union(OpenBitSet) OpenBitSet.Remove(OpenBitSet) OpenBitSet.Xor(OpenBitSet) OpenBitSet.And(OpenBitSet) OpenBitSet.Or(OpenBitSet) OpenBitSet.AndNot(OpenBitSet) OpenBitSet.Intersects(OpenBitSet) OpenBitSet.EnsureCapacityWords(Int32) OpenBitSet.EnsureCapacity(Int64) OpenBitSet.TrimTrailingZeros() OpenBitSet.Bits2words(Int64) OpenBitSet.Equals(Object) OpenBitSet.GetHashCode() DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) 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.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSetDISI : OpenBitSet, IBits Constructors | Improve this Doc View Source OpenBitSetDISI(DocIdSetIterator, Int32) Construct an OpenBitSetDISI with its bits set from the doc ids of the given DocIdSetIterator . Also give a maximum size one larger than the largest doc id for which a bit may ever be set on this OpenBitSetDISI . Declaration public OpenBitSetDISI(DocIdSetIterator disi, int maxSize) Parameters Type Name Description DocIdSetIterator disi System.Int32 maxSize | Improve this Doc View Source OpenBitSetDISI(Int32) Construct an OpenBitSetDISI with no bits set, and a given maximum size one larger than the largest doc id for which a bit may ever be set on this OpenBitSetDISI . Declaration public OpenBitSetDISI(int maxSize) Parameters Type Name Description System.Int32 maxSize Methods | Improve this Doc View Source InPlaceAnd(DocIdSetIterator) Perform an inplace AND with the doc ids from a given DocIdSetIterator , leaving only the bits set for which the doc ids are in common. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceAnd(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceNot(DocIdSetIterator) Perform an inplace NOT with the doc ids from a given DocIdSetIterator , clearing all the bits for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceNot(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceOr(DocIdSetIterator) Perform an inplace OR with the doc ids from a given DocIdSetIterator , setting the bit for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceOr(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceXor(DocIdSetIterator) Perform an inplace XOR with the doc ids from a given DocIdSetIterator , flipping all the bits for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceXor(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSetIterator.html",
    "title": "Class OpenBitSetIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class OpenBitSetIterator An iterator to iterate over set bits in an OpenBitSet . this is faster than NextSetBit(Int64) for iterating over the complete set of bits, especially when the density of the bits set is high. Inheritance System.Object DocIdSetIterator OpenBitSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(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.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source OpenBitSetIterator(OpenBitSet) Declaration public OpenBitSetIterator(OpenBitSet obs) Parameters Type Name Description OpenBitSet obs | Improve this Doc View Source OpenBitSetIterator(Int64[], Int32) Declaration public OpenBitSetIterator(long[] bits, int numWords) Parameters Type Name Description System.Int64 [] bits System.Int32 numWords Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.html",
    "title": "Class AbstractAppendingInt64Buffer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAppendingInt64Buffer Common functionality shared by AppendingDeltaPackedInt64Buffer and MonotonicAppendingInt64Buffer . NOTE: This was AbstractAppendingLongBuffer in Lucene Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingDeltaPackedInt64Buffer AppendingPackedInt64Buffer MonotonicAppendingInt64Buffer Inherited Members Int64Values.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractAppendingInt64Buffer : Int64Values Properties | Improve this Doc View Source Count Get the number of values that have been added to the buffer. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 | Improve this Doc View Source PageSize Declaration public int PageSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int64) Append a value to this buffer. Declaration public void Add(long l) Parameters Type Name Description System.Int64 l | Improve this Doc View Source Freeze() Pack all pending values in this buffer. Subsequent calls to Add(Int64) will fail. Declaration public virtual void Freeze() | Improve this Doc View Source Get(Int64) Declaration public override sealed long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source Get(Int64, Int64[], Int32, Int32) Bulk get: read at least one and at most len System.Int64 s starting from index into arr[off:off+len] and return the actual number of values that have been read. Declaration public int Get(long index, long[] arr, int off, int len) Parameters Type Name Description System.Int64 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Return an iterator over the values of this buffer. Declaration public virtual AbstractAppendingInt64Buffer.Iterator GetIterator() Returns Type Description AbstractAppendingInt64Buffer.Iterator | Improve this Doc View Source RamBytesUsed() Return the number of bytes used by this instance. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.Iterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.Iterator.html",
    "title": "Class AbstractAppendingInt64Buffer.Iterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractAppendingInt64Buffer.Iterator Inheritance System.Object AbstractAppendingInt64Buffer.Iterator 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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class Iterator Properties | Improve this Doc View Source HasNext Whether or not there are remaining values. Declaration public bool HasNext { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Next() Return the next long in the buffer. Declaration public long Next() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractBlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractBlockPackedWriter.html",
    "title": "Class AbstractBlockPackedWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractBlockPackedWriter Inheritance System.Object AbstractBlockPackedWriter BlockPackedWriter MonotonicBlockPackedWriter 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.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractBlockPackedWriter Constructors | Improve this Doc View Source AbstractBlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public AbstractBlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize the number of values of a single block, must be a multiple of 64 . Fields | Improve this Doc View Source m_blocks Declaration protected byte[] m_blocks Field Value Type Description System.Byte [] | Improve this Doc View Source m_finished Declaration protected bool m_finished Field Value Type Description System.Boolean | Improve this Doc View Source m_off Declaration protected int m_off Field Value Type Description System.Int32 | Improve this Doc View Source m_ord Declaration protected long m_ord Field Value Type Description System.Int64 | Improve this Doc View Source m_out Declaration protected DataOutput m_out Field Value Type Description DataOutput | Improve this Doc View Source m_values Declaration protected readonly long[] m_values Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Ord Return the number of values which have been added. Declaration public virtual long Ord { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(Int64) Append a new long. Declaration public virtual void Add(long l) Parameters Type Name Description System.Int64 l | Improve this Doc View Source Finish() Flush all buffered data to disk. This instance is not usable anymore after this method has been called until Reset(DataOutput) has been called. Declaration public virtual void Finish() | Improve this Doc View Source Flush() Declaration protected abstract void Flush() | Improve this Doc View Source Reset(DataOutput) Reset this writer to wrap out . The block size remains unchanged. Declaration public virtual void Reset(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source WriteValues(Int32) Declaration protected void WriteValues(int bitsRequired) Parameters Type Name Description System.Int32 bitsRequired"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractPagedMutable-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractPagedMutable-1.html",
    "title": "Class AbstractPagedMutable<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AbstractPagedMutable<T> Base implementation for PagedMutable and PagedGrowableWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable<T> PagedGrowableWriter PagedMutable Inherited Members Int64Values.Get(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) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractPagedMutable<T> : Int64Values where T : AbstractPagedMutable<T> Type Parameters Name Description T Properties | Improve this Doc View Source Count The number of values. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected virtual long BaseRamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source FillPages() Declaration protected void FillPages() | Improve this Doc View Source Get(Int64) Declaration public override sealed long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source Grow() Similar to Grow(Int64[]) . Declaration public T Grow() Returns Type Description T | Improve this Doc View Source Grow(Int64) Similar to Grow(Int64[], Int32) . Declaration public T Grow(long minSize) Parameters Type Name Description System.Int64 minSize Returns Type Description T | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected abstract PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected abstract T NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description T | Improve this Doc View Source RamBytesUsed() Return the number of bytes used by this object. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Resize(Int64) Create a new copy of size newSize based on the content of this buffer. This method is much more efficient than creating a new instance and copying values one by one. Declaration public T Resize(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description T | Improve this Doc View Source Set(Int64, Int64) Set value at index . Declaration public void Set(long index, long value) Parameters Type Name Description System.Int64 index System.Int64 value | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingDeltaPackedInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingDeltaPackedInt64Buffer.html",
    "title": "Class AppendingDeltaPackedInt64Buffer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AppendingDeltaPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for the case where values are close to each other. NOTE: This was AppendingDeltaPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingDeltaPackedInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class AppendingDeltaPackedInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source AppendingDeltaPackedInt64Buffer() Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public AppendingDeltaPackedInt64Buffer() | Improve this Doc View Source AppendingDeltaPackedInt64Buffer(Int32, Int32, Single) Create AppendingDeltaPackedInt64Buffer . Declaration public AppendingDeltaPackedInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source AppendingDeltaPackedInt64Buffer(Single) Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public AppendingDeltaPackedInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Methods | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides AbstractAppendingInt64Buffer.RamBytesUsed()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingPackedInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingPackedInt64Buffer.html",
    "title": "Class AppendingPackedInt64Buffer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class AppendingPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for non-negative numbers with a uniform distribution over a fixed (limited) range. NOTE: This was AppendingPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingPackedInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.RamBytesUsed() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class AppendingPackedInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source AppendingPackedInt64Buffer() Create an AppendingPackedInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public AppendingPackedInt64Buffer() | Improve this Doc View Source AppendingPackedInt64Buffer(Int32, Int32, Single) Initialize a AppendingPackedInt64Buffer . Declaration public AppendingPackedInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source AppendingPackedInt64Buffer(Single) Create an AppendingPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public AppendingPackedInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReader.html",
    "title": "Class BlockPackedReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockPackedReader Provides random access to a stream written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values BlockPackedReader Inherited Members Int64Values.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedReader : Int64Values Constructors | Improve this Doc View Source BlockPackedReader(IndexInput, Int32, Int32, Int64, Boolean) Sole constructor. Declaration public BlockPackedReader(IndexInput in, int packedIntsVersion, int blockSize, long valueCount, bool direct) Parameters Type Name Description IndexInput in System.Int32 packedIntsVersion System.Int32 blockSize System.Int64 valueCount System.Boolean direct Methods | Improve this Doc View Source Get(Int64) Declaration public override long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReaderIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReaderIterator.html",
    "title": "Class BlockPackedReaderIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockPackedReaderIterator Reader for sequences of System.Int64 s written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BlockPackedReaderIterator 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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedReaderIterator Constructors | Improve this Doc View Source BlockPackedReaderIterator(DataInput, Int32, Int32, Int64) Sole constructor. Declaration public BlockPackedReaderIterator(DataInput in, int packedIntsVersion, int blockSize, long valueCount) Parameters Type Name Description DataInput in System.Int32 packedIntsVersion System.Int32 blockSize The number of values of a block, must be equal to the block size of the BlockPackedWriter which has been used to write the stream. System.Int64 valueCount Properties | Improve this Doc View Source Ord Return the offset of the next value to read. Declaration public long Ord { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Read the next value. Declaration public long Next() Returns Type Description System.Int64 | Improve this Doc View Source Next(Int32) Read between 1 and count values. Declaration public Int64sRef Next(int count) Parameters Type Name Description System.Int32 count Returns Type Description Int64sRef | Improve this Doc View Source Reset(DataInput, Int64) Reset the current reader to wrap a stream of valueCount values contained in in . The block size remains unchanged. Declaration public void Reset(DataInput in, long valueCount) Parameters Type Name Description DataInput in System.Int64 valueCount | Improve this Doc View Source Skip(Int64) Skip exactly count values. Declaration public void Skip(long count) Parameters Type Name Description System.Int64 count See Also BlockPackedWriter"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedWriter.html",
    "title": "Class BlockPackedWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class BlockPackedWriter A writer for large sequences of longs. The sequence is divided into fixed-size blocks and for each block, the difference between each value and the minimum value of the block is encoded using as few bits as possible. Memory usage of this class is proportional to the block size. Each block has an overhead between 1 and 10 bytes to store the minimum value and the number of bits per value of the block. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <Token, (MinValue)> Token: a byte ( WriteByte(Byte) ), first 7 bits are the number of bits per value ( bitsPerValue ). If the 8th bit is 1, then MinValue (see next) is 0 , otherwise MinValue and needs to be decoded MinValue: a zigzag-encoded variable-length System.Int64 ( WriteVInt64(Int64) ) whose value should be added to every int from the block to restore the original values Ints: If the number of bits per value is 0 , then there is nothing to decode and all ints are equal to MinValue. Otherwise: BlockSize packed ints ( PackedInt32s ) encoded on exactly bitsPerValue bits per value. They are the subtraction of the original values and MinValue This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractBlockPackedWriter BlockPackedWriter Inherited Members AbstractBlockPackedWriter.m_out AbstractBlockPackedWriter.m_values AbstractBlockPackedWriter.m_blocks AbstractBlockPackedWriter.m_off AbstractBlockPackedWriter.m_ord AbstractBlockPackedWriter.m_finished AbstractBlockPackedWriter.Reset(DataOutput) AbstractBlockPackedWriter.Add(Int64) AbstractBlockPackedWriter.Finish() AbstractBlockPackedWriter.Ord AbstractBlockPackedWriter.WriteValues(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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedWriter : AbstractBlockPackedWriter Constructors | Improve this Doc View Source BlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public BlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize the number of values of a single block, must be a power of 2 Methods | Improve this Doc View Source Flush() Declaration protected override void Flush() Overrides AbstractBlockPackedWriter.Flush() See Also BlockPackedReaderIterator BlockPackedReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDecoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDecoder.html",
    "title": "Class EliasFanoDecoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EliasFanoDecoder A decoder for an EliasFanoEncoder . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object EliasFanoDecoder 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoDecoder Constructors | Improve this Doc View Source EliasFanoDecoder(EliasFanoEncoder) Construct a decoder for a given EliasFanoEncoder . The decoding index is set to just before the first encoded value. Declaration public EliasFanoDecoder(EliasFanoEncoder efEncoder) Parameters Type Name Description EliasFanoEncoder efEncoder Fields | Improve this Doc View Source NO_MORE_VALUES Declaration public const long NO_MORE_VALUES = -1L Field Value Type Description System.Int64 Properties | Improve this Doc View Source EliasFanoEncoder Declaration public virtual EliasFanoEncoder EliasFanoEncoder { get; } Property Value Type Description EliasFanoEncoder The Elias-Fano encoder that is decoded. | Improve this Doc View Source NumEncoded The number of values encoded by the encoder. Declaration public virtual long NumEncoded { get; } Property Value Type Description System.Int64 The number of values encoded by the encoder. Methods | Improve this Doc View Source AdvanceToIndex(Int64) Advance the decoding index to a given index . and return true iff it is available. See also CurrentValue() . The current implementation does not use the index on the upper bit zero bit positions. Note: there is currently no implementation of BackToIndex() . Declaration public virtual bool AdvanceToIndex(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source AdvanceToValue(Int64) Given a target value, advance the decoding index to the first bigger or equal value and return it if it is available. Otherwise return NO_MORE_VALUES . The current implementation uses the index on the upper zero bit positions. Declaration public virtual long AdvanceToValue(long target) Parameters Type Name Description System.Int64 target Returns Type Description System.Int64 | Improve this Doc View Source BackToValue(Int64) Given a target value, go back to the first smaller or equal value and return it if it is available. Otherwise return NO_MORE_VALUES . The current implementation does not use the index on the upper zero bit positions. Declaration public virtual long BackToValue(long target) Parameters Type Name Description System.Int64 target Returns Type Description System.Int64 | Improve this Doc View Source CurrentIndex() The current decoding index. The first value encoded by EncodeNext(Int64) has index 0. Only valid directly after NextValue() , AdvanceToValue(Int64) , PreviousValue() , or BackToValue(Int64) returned another value than NO_MORE_VALUES , or AdvanceToIndex(Int64) returned true . Declaration public virtual long CurrentIndex() Returns Type Description System.Int64 The decoding index of the last decoded value, or as last set by AdvanceToIndex(Int64) . | Improve this Doc View Source CurrentValue() The value at the current decoding index. Only valid when CurrentIndex() would return a valid result. This is only intended for use after AdvanceToIndex(Int64) returned true . Declaration public virtual long CurrentValue() Returns Type Description System.Int64 The value encoded at CurrentIndex() . | Improve this Doc View Source NextValue() If another value is available after the current decoding index, return this value and and increase the decoding index by 1. Otherwise return NO_MORE_VALUES . Declaration public virtual long NextValue() Returns Type Description System.Int64 | Improve this Doc View Source PreviousValue() If another value is available before the current decoding index, return this value and decrease the decoding index by 1. Otherwise return NO_MORE_VALUES . Declaration public virtual long PreviousValue() Returns Type Description System.Int64 | Improve this Doc View Source ToAfterSequence() Set the decoding index to just after the last encoded value. Declaration public virtual void ToAfterSequence() | Improve this Doc View Source ToBeforeSequence() Set the decoding index to just before the first encoded value. Declaration public virtual void ToBeforeSequence()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDocIdSet.html",
    "title": "Class EliasFanoDocIdSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EliasFanoDocIdSet A DocIdSet in Elias-Fano encoding. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet EliasFanoDocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoDocIdSet : DocIdSet Constructors | Improve this Doc View Source EliasFanoDocIdSet(Int32, Int32) Construct an EliasFanoDocIdSet. For efficient encoding, the parameters should be chosen as low as possible. Declaration public EliasFanoDocIdSet(int numValues, int upperBound) Parameters Type Name Description System.Int32 numValues At least the number of document ids that will be encoded. System.Int32 upperBound At least the highest document id that will be encoded. Properties | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean true Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source EncodeFromDisi(DocIdSetIterator) Encode the document ids from a DocIdSetIterator. Declaration public virtual void EncodeFromDisi(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi This DocIdSetIterator should provide document ids that are consistent with numValues and upperBound as provided to the constructor. | 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 GetIterator() Provides a DocIdSetIterator to access encoded document ids. Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source SufficientlySmallerThanBitSet(Int64, Int64) Provide an indication that is better to use an EliasFanoDocIdSet than a FixedBitSet to encode document identifiers. Declaration public static bool SufficientlySmallerThanBitSet(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues The number of document identifiers that is to be encoded. Should be non negative. System.Int64 upperBound The maximum possible value for a document identifier. Should be at least numValues . Returns Type Description System.Boolean See SufficientlySmallerThanBitSet(Int64, Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoEncoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoEncoder.html",
    "title": "Class EliasFanoEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class EliasFanoEncoder Encode a non decreasing sequence of non negative whole numbers in the Elias-Fano encoding that was introduced in the 1970's by Peter Elias and Robert Fano. The Elias-Fano encoding is a high bits / low bits representation of a monotonically increasing sequence of numValues > 0 natural numbers x[i] 0 <= x[0] <= x[1] <= ... <= x[numValues-2] <= x[numValues-1] <= upperBound where upperBound > 0 is an upper bound on the last value. The Elias-Fano encoding uses less than half a bit per encoded number more than the smallest representation that can encode any monotone sequence with the same bounds. The lower L bits of each x[i] are stored explicitly and contiguously in the lower-bits array, with L chosen as ( Log() base 2): L = max(0, floor(log(upperBound/numValues))) The upper bits are stored in the upper-bits array as a sequence of unary-coded gaps ( x[-1] = 0 ): (x[i]/2 L) - (x[i-1]/2 L) The unary code encodes a natural number n by n 0 bits followed by a 1 bit: 0...01 . In the upper bits the total the number of 1 bits is numValues and the total number of 0 bits is: floor(x[numValues-1]/2 L) <= upperBound/(2 max(0, floor(log(upperBound/numValues)))) <= 2 numValues The Elias-Fano encoding uses at most 2 + Ceil(Log(upperBound/numValues)) bits per encoded number. With upperBound in these bounds ( p is an integer): 2 p < x[numValues-1] <= upperBound <= 2 *(p+1) the number of bits per encoded number is minimized. In this implementation the values in the sequence can be given as long , numValues = 0 and upperBound = 0 are allowed, and each of the upper and lower bit arrays should fit in a long[] . An index of positions of zero's in the upper bits is also built. this implementation is based on this article: Sebastiano Vigna, \"Quasi Succinct Indices\", June 19, 2012, sections 3, 4 and 9. Retrieved from http://arxiv.org/pdf/1206.4300 . The articles originally describing the Elias-Fano representation are: Peter Elias, \"Efficient storage and retrieval by content and address of static files\", J. Assoc. Comput. Mach., 21(2):246â€\"260, 1974. Robert M. Fano, \"On the number of bits required to implement an associative memory\", Memorandum 61, Computer Structures Group, Project MAC, MIT, Cambridge, Mass., 1971. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object EliasFanoEncoder 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoEncoder Constructors | Improve this Doc View Source EliasFanoEncoder(Int64, Int64) Construct an Elias-Fano encoder using DEFAULT_INDEX_INTERVAL . Declaration public EliasFanoEncoder(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues System.Int64 upperBound | Improve this Doc View Source EliasFanoEncoder(Int64, Int64, Int64) Construct an Elias-Fano encoder. After construction, call EncodeNext(Int64) numValues times to encode a non decreasing sequence of non negative numbers. Declaration public EliasFanoEncoder(long numValues, long upperBound, long indexInterval) Parameters Type Name Description System.Int64 numValues The number of values that is to be encoded. System.Int64 upperBound At least the highest value that will be encoded. For space efficiency this should not exceed the power of two that equals or is the first higher than the actual maximum. When numValues >= (upperBound/3) a FixedBitSet will take less space. System.Int64 indexInterval The number of high zero bits for which a single index entry is built. The index will have at most 2 * numValues / indexInterval entries and each index entry will use at most Ceil(Log2(3 * numValues)) bits, see EliasFanoEncoder . Exceptions Type Condition System.ArgumentException when: numValues is negative, or numValues is non negative and upperBound is negative, or the low bits do not fit in a long[] : (L * numValues / 64) > System.Int32.MaxValue , or the high bits do not fit in a long[] : (2 * numValues / 64) > System.Int32.MaxValue , or indexInterval < 2 , the index bits do not fit in a long[] : (numValues / indexInterval * ceil(2log(3 * numValues)) / 64) > System.Int32.MaxValue . Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL The default index interval for zero upper bits. Declaration public const long DEFAULT_INDEX_INTERVAL = 256L Field Value Type Description System.Int64 Properties | Improve this Doc View Source IndexBits Expert. The index bits. Declaration public virtual long[] IndexBits { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source LowerBits Expert. The low bits. Declaration public virtual long[] LowerBits { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source UpperBits Expert. The high bits. Declaration public virtual long[] UpperBits { get; } Property Value Type Description System.Int64 [] Methods | Improve this Doc View Source EncodeNext(Int64) Call at most Lucene.Net.Util.Packed.EliasFanoEncoder.numValues times to encode a non decreasing sequence of non negative numbers. Declaration public virtual void EncodeNext(long x) Parameters Type Name Description System.Int64 x The next number to be encoded. Exceptions Type Condition System.InvalidOperationException when called more than Lucene.Net.Util.Packed.EliasFanoEncoder.numValues times. System.ArgumentException when: x is smaller than an earlier encoded value, or x is larger than Lucene.Net.Util.Packed.EliasFanoEncoder.upperBound . | 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 GetDecoder() Returns an EliasFanoDecoder to access the encoded values. Perform all calls to EncodeNext(Int64) before calling GetDecoder() . Declaration public virtual EliasFanoDecoder GetDecoder() Returns Type Description EliasFanoDecoder | 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 SufficientlySmallerThanBitSet(Int64, Int64) Provide an indication that it is better to use an EliasFanoEncoder than a FixedBitSet to encode document identifiers. This indication is not precise and may change in the future. An EliasFanoEncoder is favored when the size of the encoding by the EliasFanoEncoder (including some space for its index) is at most about 5/6 of the size of the FixedBitSet , this is the same as comparing estimates of the number of bits accessed by a pair of FixedBitSet s and by a pair of non indexed EliasFanoDocIdSet s when determining the intersections of the pairs. A bit set is preferred when upperbound <= 256 . It is assumed that DEFAULT_INDEX_INTERVAL is used. Declaration public static bool SufficientlySmallerThanBitSet(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues The number of document identifiers that is to be encoded. Should be non negative. System.Int64 upperBound The maximum possible value for a document identifier. Should be at least numValues . Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.GrowableWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.GrowableWriter.html",
    "title": "Class GrowableWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class GrowableWriter Implements PackedInt32s.Mutable , but grows the bit count of the underlying packed ints on-demand. Beware that this class will accept to set negative values but in order to do this, it will grow the number of bits per value to 64. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable GrowableWriter 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class GrowableWriter : PackedInt32s.Mutable Constructors | Improve this Doc View Source GrowableWriter(Int32, Int32, Single) Declaration public GrowableWriter(int startBitsPerValue, int valueCount, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 startBitsPerValue the initial number of bits per value, may grow depending on the data System.Int32 valueCount the number of values System.Single acceptableOverheadRatio an acceptable overhead ratio Properties | Improve this Doc View Source BitsPerValue Declaration public override int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count | Improve this Doc View Source HasArray Declaration public override bool HasArray { get; } Property Value Type Description System.Boolean Overrides PackedInt32s.Reader.HasArray | Improve this Doc View Source Mutable Declaration public virtual PackedInt32s.Mutable Mutable { get; } Property Value Type Description PackedInt32s.Mutable Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides PackedInt32s.Mutable.Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Declaration public override void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val Overrides PackedInt32s.Mutable.Fill(Int32, Int32, Int64) | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source GetArray() Declaration public override object GetArray() Returns Type Description System.Object Overrides PackedInt32s.Reader.GetArray() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed() | Improve this Doc View Source Resize(Int32) Declaration public virtual GrowableWriter Resize(int newSize) Parameters Type Name Description System.Int32 newSize Returns Type Description GrowableWriter | Improve this Doc View Source Save(DataOutput) Declaration public override void Save(DataOutput out) Parameters Type Name Description DataOutput out Overrides PackedInt32s.Mutable.Save(DataOutput) | Improve this Doc View Source Set(Int32, Int64) Declaration public override void Set(int index, long value) Parameters Type Name Description System.Int32 index System.Int64 value Overrides PackedInt32s.Mutable.Set(Int32, Int64) | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Declaration public override int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.html",
    "title": "Namespace Lucene.Net.Util.Packed | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Packed <!-- 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. --> Packed integer arrays and streams. The packed package provides * sequential and random access capable arrays of positive longs, * routines for efficient serialization and deserialization of streams of packed integers. The implementations provide different trade-offs between memory usage and access speed. The standard usage scenario is replacing large int or long arrays in order to reduce the memory footprint. The main access point is the <xref:Lucene.Net.Util.Packed.PackedInts> factory. In-memory structures <xref:Lucene.Net.Util.Packed.PackedInts.Mutable> Only supports positive longs. Requires the number of bits per value to be known in advance. Random-access for both writing and reading. GrowableWriter Same as PackedInts.Mutable but grows the number of bits per values when needed. Useful to build a PackedInts.Mutable from a read-once stream of longs. PagedGrowableWriter Slices data into fixed-size blocks stored in GrowableWriters. Supports more than 2B values. You should use Appending(Delta)PackedLongBuffer instead if you don't need random write access. <xref:Lucene.Net.Util.Packed.AppendingDeltaPackedLongBuffer> Can store any sequence of longs. Compression is good when values are close to each other. Supports random reads, but only sequential writes. Can address up to 2^42 values. <xref:Lucene.Net.Util.Packed.AppendingPackedLongBuffer> Same as AppendingDeltaPackedLongBuffer but assumes values are 0-based. <xref:Lucene.Net.Util.Packed.MonotonicAppendingLongBuffer> Same as AppendingDeltaPackedLongBuffer except that compression is good when the stream is a succession of affine functions. Disk-based structures <xref:Lucene.Net.Util.Packed.PackedInts.Writer>, <xref:Lucene.Net.Util.Packed.PackedInts.Reader>, <xref:Lucene.Net.Util.Packed.PackedInts.ReaderIterator> Only supports positive longs. Requires the number of bits per value to be known in advance. Supports both fast sequential access with low memory footprint with ReaderIterator and random-access by either loading values in memory or leaving them on disk with Reader. BlockPackedWriter , BlockPackedReader , BlockPackedReaderIterator Splits the stream into fixed-size blocks. Compression is good when values are close to each other. Can address up to 2B * blockSize values. MonotonicBlockPackedWriter , MonotonicBlockPackedReader Same as the non-monotonic variants except that compression is good when the stream is a succession of affine functions. The reason why there is no sequential access is that if you need sequential access, you should rather delta-encode and use BlockPackedWriter. PackedDataOutput , PackedDataInput Writes sequences of longs where each long can use any number of bits. Classes AbstractAppendingInt64Buffer Common functionality shared by AppendingDeltaPackedInt64Buffer and MonotonicAppendingInt64Buffer . NOTE: This was AbstractAppendingLongBuffer in Lucene AbstractAppendingInt64Buffer.Iterator AbstractBlockPackedWriter AbstractPagedMutable<T> Base implementation for PagedMutable and PagedGrowableWriter . This is a Lucene.NET INTERNAL API, use at your own risk AppendingDeltaPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for the case where values are close to each other. NOTE: This was AppendingDeltaPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk AppendingPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for non-negative numbers with a uniform distribution over a fixed (limited) range. NOTE: This was AppendingPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedReader Provides random access to a stream written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedReaderIterator Reader for sequences of System.Int64 s written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedWriter A writer for large sequences of longs. The sequence is divided into fixed-size blocks and for each block, the difference between each value and the minimum value of the block is encoded using as few bits as possible. Memory usage of this class is proportional to the block size. Each block has an overhead between 1 and 10 bytes to store the minimum value and the number of bits per value of the block. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <Token, (MinValue)> Token: a byte ( WriteByte(Byte) ), first 7 bits are the number of bits per value ( bitsPerValue ). If the 8th bit is 1, then MinValue (see next) is 0 , otherwise MinValue and needs to be decoded MinValue: a zigzag-encoded variable-length System.Int64 ( WriteVInt64(Int64) ) whose value should be added to every int from the block to restore the original values Ints: If the number of bits per value is 0 , then there is nothing to decode and all ints are equal to MinValue. Otherwise: BlockSize packed ints ( PackedInt32s ) encoded on exactly bitsPerValue bits per value. They are the subtraction of the original values and MinValue This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoDecoder A decoder for an EliasFanoEncoder . This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoDocIdSet A DocIdSet in Elias-Fano encoding. This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoEncoder Encode a non decreasing sequence of non negative whole numbers in the Elias-Fano encoding that was introduced in the 1970's by Peter Elias and Robert Fano. The Elias-Fano encoding is a high bits / low bits representation of a monotonically increasing sequence of numValues > 0 natural numbers x[i] 0 <= x[0] <= x[1] <= ... <= x[numValues-2] <= x[numValues-1] <= upperBound where upperBound > 0 is an upper bound on the last value. The Elias-Fano encoding uses less than half a bit per encoded number more than the smallest representation that can encode any monotone sequence with the same bounds. The lower L bits of each x[i] are stored explicitly and contiguously in the lower-bits array, with L chosen as ( Log() base 2): L = max(0, floor(log(upperBound/numValues))) The upper bits are stored in the upper-bits array as a sequence of unary-coded gaps ( x[-1] = 0 ): (x[i]/2 L) - (x[i-1]/2 L) The unary code encodes a natural number n by n 0 bits followed by a 1 bit: 0...01 . In the upper bits the total the number of 1 bits is numValues and the total number of 0 bits is: floor(x[numValues-1]/2 L) <= upperBound/(2 max(0, floor(log(upperBound/numValues)))) <= 2 numValues The Elias-Fano encoding uses at most 2 + Ceil(Log(upperBound/numValues)) bits per encoded number. With upperBound in these bounds ( p is an integer): 2 p < x[numValues-1] <= upperBound <= 2 *(p+1) the number of bits per encoded number is minimized. In this implementation the values in the sequence can be given as long , numValues = 0 and upperBound = 0 are allowed, and each of the upper and lower bit arrays should fit in a long[] . An index of positions of zero's in the upper bits is also built. this implementation is based on this article: Sebastiano Vigna, \"Quasi Succinct Indices\", June 19, 2012, sections 3, 4 and 9. Retrieved from http://arxiv.org/pdf/1206.4300 . The articles originally describing the Elias-Fano representation are: Peter Elias, \"Efficient storage and retrieval by content and address of static files\", J. Assoc. Comput. Mach., 21(2):246â€\"260, 1974. Robert M. Fano, \"On the number of bits required to implement an associative memory\", Memorandum 61, Computer Structures Group, Project MAC, MIT, Cambridge, Mass., 1971. This is a Lucene.NET INTERNAL API, use at your own risk GrowableWriter Implements PackedInt32s.Mutable , but grows the bit count of the underlying packed ints on-demand. Beware that this class will accept to set negative values but in order to do this, it will grow the number of bits per value to 64. This is a Lucene.NET INTERNAL API, use at your own risk MonotonicAppendingInt64Buffer Utility class to buffer signed longs in memory, which is optimized for the case where the sequence is monotonic, although it can encode any sequence of arbitrary longs. It only supports appending. NOTE: This was MonotonicAppendingLongBuffer in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk MonotonicBlockPackedReader Provides random access to a stream written with MonotonicBlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk MonotonicBlockPackedWriter A writer for large monotonically increasing sequences of positive System.Int64 s. The sequence is divided into fixed-size blocks and for each block, values are modeled after a linear function f: x → A × x + B. The block encodes deltas from the expected values computed from this function using as few bits as possible. Each block has an overhead between 6 and 14 bytes. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <B, A, BitsPerValue> B: the B from f: x → A × x + B using a variable-length System.Int64 ( WriteVInt64(Int64) ) A: the A from f: x → A × x + B encoded using J2N.BitConversion.SingleToInt32Bits(System.Single) on 4 bytes ( WriteVInt32(Int32) ) BitsPerValue: a variable-length System.Int32 ( WriteVInt32(Int32) ) Ints: if BitsPerValue is 0 , then there is nothing to read and all values perfectly match the result of the function. Otherwise, these are the zigzag-encoded packed ( PackedInt32s ) deltas from the expected value (computed from the function) using exaclty BitsPerValue bits per value This is a Lucene.NET INTERNAL API, use at your own risk Packed64 Space optimized random access capable array of values with a fixed number of bits/value. Values are packed contiguously. The implementation strives to perform af fast as possible under the constraint of contiguous bits, by avoiding expensive operations. This comes at the cost of code clarity. Technical details: this implementation is a refinement of a non-branching version. The non-branching get and set methods meant that 2 or 4 atomics in the underlying array were always accessed, even for the cases where only 1 or 2 were needed. Even with caching, this had a detrimental effect on performance. Related to this issue, the old implementation used lookup tables for shifts and masks, which also proved to be a bit slower than calculating the shifts and masks on the fly. See https://issues.apache.org/jira/browse/LUCENE-4062 for details. PackedDataInput A DataInput wrapper to read unaligned, variable-length packed integers. This API is much slower than the PackedInt32s fixed-length API but can be convenient to save space. This is a Lucene.NET INTERNAL API, use at your own risk PackedDataOutput A DataOutput wrapper to write unaligned, variable-length packed integers. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s Simplistic compression for array of unsigned long values. Each value is >= 0 and <= a specified maximum value. The values are stored as packed ints, with each value consuming a fixed number of bits. NOTE: This was PackedInts in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.Format A format to write packed System.Int32 s. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.FormatAndBits Simple class that holds a format and a number of bits per value. PackedInt32s.Header Header identifying the structure of a packed integer array. PackedInt32s.Mutable A packed integer array that can be modified. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.MutableImpl PackedInt32s.NullReader A PackedInt32s.Reader which has all its values equal to 0 (bitsPerValue = 0). PackedInt32s.Reader A read-only random access array of positive integers. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.Writer A write-once Writer. This is a Lucene.NET INTERNAL API, use at your own risk PagedGrowableWriter A PagedGrowableWriter . This class slices data into fixed-size blocks which have independent numbers of bits per value and grow on-demand. You should use this class instead of the AbstractAppendingInt64Buffer related ones only when you need random write-access. Otherwise this class will likely be slower and less memory-efficient. This is a Lucene.NET INTERNAL API, use at your own risk PagedMutable A PagedMutable . This class slices data into fixed-size blocks which have the same number of bits per value. It can be a useful replacement for PackedInt32s.Mutable to store more than 2B values. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces PackedInt32s.IDecoder A decoder for packed integers. PackedInt32s.IEncoder An encoder for packed integers. PackedInt32s.IReaderIterator Run-once iterator interface, to decode previously saved PackedInt32s ."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicAppendingInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicAppendingInt64Buffer.html",
    "title": "Class MonotonicAppendingInt64Buffer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MonotonicAppendingInt64Buffer Utility class to buffer signed longs in memory, which is optimized for the case where the sequence is monotonic, although it can encode any sequence of arbitrary longs. It only supports appending. NOTE: This was MonotonicAppendingLongBuffer in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer MonotonicAppendingInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicAppendingInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source MonotonicAppendingInt64Buffer() Create an MonotonicAppendingInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public MonotonicAppendingInt64Buffer() | Improve this Doc View Source MonotonicAppendingInt64Buffer(Int32, Int32, Single) Declaration public MonotonicAppendingInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source MonotonicAppendingInt64Buffer(Single) Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public MonotonicAppendingInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Methods | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides AbstractAppendingInt64Buffer.RamBytesUsed()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedReader.html",
    "title": "Class MonotonicBlockPackedReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MonotonicBlockPackedReader Provides random access to a stream written with MonotonicBlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values MonotonicBlockPackedReader Inherited Members Int64Values.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicBlockPackedReader : Int64Values Constructors | Improve this Doc View Source MonotonicBlockPackedReader(IndexInput, Int32, Int32, Int64, Boolean) Sole constructor. Declaration public MonotonicBlockPackedReader(IndexInput in, int packedIntsVersion, int blockSize, long valueCount, bool direct) Parameters Type Name Description IndexInput in System.Int32 packedIntsVersion System.Int32 blockSize System.Int64 valueCount System.Boolean direct Properties | Improve this Doc View Source Count Returns the number of values. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Get(Int64) Declaration public override long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source RamBytesUsed() Returns the approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedWriter.html",
    "title": "Class MonotonicBlockPackedWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class MonotonicBlockPackedWriter A writer for large monotonically increasing sequences of positive System.Int64 s. The sequence is divided into fixed-size blocks and for each block, values are modeled after a linear function f: x → A × x + B. The block encodes deltas from the expected values computed from this function using as few bits as possible. Each block has an overhead between 6 and 14 bytes. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <B, A, BitsPerValue> B: the B from f: x → A × x + B using a variable-length System.Int64 ( WriteVInt64(Int64) ) A: the A from f: x → A × x + B encoded using J2N.BitConversion.SingleToInt32Bits(System.Single) on 4 bytes ( WriteVInt32(Int32) ) BitsPerValue: a variable-length System.Int32 ( WriteVInt32(Int32) ) Ints: if BitsPerValue is 0 , then there is nothing to read and all values perfectly match the result of the function. Otherwise, these are the zigzag-encoded packed ( PackedInt32s ) deltas from the expected value (computed from the function) using exaclty BitsPerValue bits per value This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractBlockPackedWriter MonotonicBlockPackedWriter Inherited Members AbstractBlockPackedWriter.m_out AbstractBlockPackedWriter.m_values AbstractBlockPackedWriter.m_blocks AbstractBlockPackedWriter.m_off AbstractBlockPackedWriter.m_ord AbstractBlockPackedWriter.m_finished AbstractBlockPackedWriter.Reset(DataOutput) AbstractBlockPackedWriter.Finish() AbstractBlockPackedWriter.Ord AbstractBlockPackedWriter.WriteValues(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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicBlockPackedWriter : AbstractBlockPackedWriter Constructors | Improve this Doc View Source MonotonicBlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public MonotonicBlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize The number of values of a single block, must be a power of 2. Methods | Improve this Doc View Source Add(Int64) Declaration public override void Add(long l) Parameters Type Name Description System.Int64 l Overrides AbstractBlockPackedWriter.Add(Int64) | Improve this Doc View Source Flush() Declaration protected override void Flush() Overrides AbstractBlockPackedWriter.Flush() See Also MonotonicBlockPackedReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.Packed64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.Packed64.html",
    "title": "Class Packed64 | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Packed64 Space optimized random access capable array of values with a fixed number of bits/value. Values are packed contiguously. The implementation strives to perform af fast as possible under the constraint of contiguous bits, by avoiding expensive operations. This comes at the cost of code clarity. Technical details: this implementation is a refinement of a non-branching version. The non-branching get and set methods meant that 2 or 4 atomics in the underlying array were always accessed, even for the cases where only 1 or 2 were needed. Even with caching, this had a detrimental effect on performance. Related to this issue, the old implementation used lookup tables for shifts and masks, which also proved to be a bit slower than calculating the shifts and masks on the fly. See https://issues.apache.org/jira/browse/LUCENE-4062 for details. Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.MutableImpl Packed64 Inherited Members PackedInt32s.MutableImpl.m_valueCount PackedInt32s.MutableImpl.m_bitsPerValue PackedInt32s.MutableImpl.BitsPerValue PackedInt32s.MutableImpl.Count PackedInt32s.Mutable.Save(DataOutput) PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class Packed64 : PackedInt32s.MutableImpl Constructors | Improve this Doc View Source Packed64(Int32, DataInput, Int32, Int32) Creates an array with content retrieved from the given DataInput . Declaration public Packed64(int packedIntsVersion, DataInput in, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion DataInput in A DataInput , positioned at the start of Packed64-content. System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. Exceptions Type Condition System.IO.IOException If the values for the backing array could not be retrieved. | Improve this Doc View Source Packed64(Int32, Int32) Creates an array with the internal structures adjusted for the given limits and initialized to 0. Declaration public Packed64(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides PackedInt32s.Mutable.Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Declaration public override void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val Overrides PackedInt32s.Mutable.Fill(Int32, Int32, Int64) | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index The position of the value. Returns Type Description System.Int64 The value at the given index. Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed() | Improve this Doc View Source Set(Int32, Int64) Declaration public override void Set(int index, long value) Parameters Type Name Description System.Int32 index System.Int64 value Overrides PackedInt32s.Mutable.Set(Int32, Int64) | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Declaration public override int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataInput.html",
    "title": "Class PackedDataInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedDataInput A DataInput wrapper to read unaligned, variable-length packed integers. This API is much slower than the PackedInt32s fixed-length API but can be convenient to save space. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedDataInput 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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PackedDataInput Constructors | Improve this Doc View Source PackedDataInput(DataInput) Create a new instance that wraps in . Declaration public PackedDataInput(DataInput in) Parameters Type Name Description DataInput in Methods | Improve this Doc View Source ReadInt64(Int32) Read the next System.Int64 using exactly bitsPerValue bits. NOTE: This was readLong() in Lucene. Declaration public long ReadInt64(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Int64 | Improve this Doc View Source SkipToNextByte() If there are pending bits (at most 7), they will be ignored and the next value will be read starting at the next byte. Declaration public void SkipToNextByte() See Also PackedDataOutput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataOutput.html",
    "title": "Class PackedDataOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedDataOutput A DataOutput wrapper to write unaligned, variable-length packed integers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedDataOutput 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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PackedDataOutput Constructors | Improve this Doc View Source PackedDataOutput(DataOutput) Create a new instance that wraps out . Declaration public PackedDataOutput(DataOutput out) Parameters Type Name Description DataOutput out Methods | Improve this Doc View Source Flush() Flush pending bits to the underlying DataOutput . Declaration public void Flush() | Improve this Doc View Source WriteInt64(Int64, Int32) Write a value using exactly bitsPerValue bits. NOTE: This was writeLong() in Lucene. Declaration public void WriteInt64(long value, int bitsPerValue) Parameters Type Name Description System.Int64 value System.Int32 bitsPerValue See Also PackedDataInput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Format.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Format.html",
    "title": "Class PackedInt32s.Format | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.Format A format to write packed System.Int32 s. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s.Format 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class Format Fields | Improve this Doc View Source PACKED Compact format, all bits are written contiguously. Declaration public static readonly PackedInt32s.Format PACKED Field Value Type Description PackedInt32s.Format | Improve this Doc View Source PACKED_SINGLE_BLOCK A format that may insert padding bits to improve encoding and decoding speed. Since this format doesn't support all possible bits per value, you should never use it directly, but rather use FastestFormatAndBits(Int32, Int32, Single) to find the format that best suits your needs. Declaration public static readonly PackedInt32s.Format PACKED_SINGLE_BLOCK Field Value Type Description PackedInt32s.Format Properties | Improve this Doc View Source Id Returns the ID of the format. Declaration public int Id { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Values Declaration public static IEnumerable<PackedInt32s.Format> Values { get; } Property Value Type Description System.Collections.Generic.IEnumerable < PackedInt32s.Format > Methods | Improve this Doc View Source ById(Int32) Get a format according to its ID. Declaration public static PackedInt32s.Format ById(int id) Parameters Type Name Description System.Int32 id Returns Type Description PackedInt32s.Format | Improve this Doc View Source ByteCount(Int32, Int32, Int32) Computes how many System.Byte blocks are needed to store valueCount values of size bitsPerValue . Declaration public virtual long ByteCount(int packedIntsVersion, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description System.Int64 | Improve this Doc View Source Int64Count(Int32, Int32, Int32) Computes how many System.Int64 blocks are needed to store valueCount values of size bitsPerValue . NOTE: This was longCount() in Lucene. Declaration public virtual int Int64Count(int packedIntsVersion, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description System.Int32 | Improve this Doc View Source IsSupported(Int32) Tests whether the provided number of bits per value is supported by the format. Declaration public virtual bool IsSupported(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Boolean | Improve this Doc View Source OverheadPerValue(Int32) Returns the overhead per value, in bits. Declaration public virtual float OverheadPerValue(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Single | Improve this Doc View Source OverheadRatio(Int32) Returns the overhead ratio ( overhead per value / bits per value ). Declaration public virtual float OverheadRatio(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits.html",
    "title": "Class PackedInt32s.FormatAndBits | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.FormatAndBits Simple class that holds a format and a number of bits per value. Inheritance System.Object PackedInt32s.FormatAndBits 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) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class FormatAndBits Constructors | Improve this Doc View Source FormatAndBits(PackedInt32s.Format, Int32) Declaration public FormatAndBits(PackedInt32s.Format format, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format System.Int32 bitsPerValue Properties | Improve this Doc View Source BitsPerValue Declaration public int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Format Declaration public PackedInt32s.Format Format { get; } Property Value Type Description PackedInt32s.Format Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Header.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Header.html",
    "title": "Class PackedInt32s.Header | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.Header Header identifying the structure of a packed integer array. Inheritance System.Object PackedInt32s.Header 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class Header Constructors | Improve this Doc View Source Header(PackedInt32s.Format, Int32, Int32, Int32) Declaration public Header(PackedInt32s.Format format, int valueCount, int bitsPerValue, int version) Parameters Type Name Description PackedInt32s.Format format System.Int32 valueCount System.Int32 bitsPerValue System.Int32 version"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.html",
    "title": "Class PackedInt32s | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s Simplistic compression for array of unsigned long values. Each value is >= 0 and <= a specified maximum value. The values are stored as packed ints, with each value consuming a fixed number of bits. NOTE: This was PackedInts in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s 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.Util.Packed Assembly : Lucene.Net.dll Syntax public class PackedInt32s Fields | Improve this Doc View Source CODEC_NAME Declaration public static string CODEC_NAME Field Value Type Description System.String | Improve this Doc View Source COMPACT No memory overhead at all, but the returned implementation may be slow. Declaration public static float COMPACT Field Value Type Description System.Single | Improve this Doc View Source DEFAULT At most 20% memory overhead. Declaration public static float DEFAULT Field Value Type Description System.Single | Improve this Doc View Source DEFAULT_BUFFER_SIZE Default amount of memory to use for bulk operations. Declaration public static int DEFAULT_BUFFER_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source FAST At most 50% memory overhead, always select a reasonably fast implementation. Declaration public static float FAST Field Value Type Description System.Single | Improve this Doc View Source FASTEST At most 700% memory overhead, always select a direct implementation. Declaration public static float FASTEST Field Value Type Description System.Single | Improve this Doc View Source VERSION_BYTE_ALIGNED Declaration public static int VERSION_BYTE_ALIGNED Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source BitsRequired(Int64) Returns how many bits are required to hold values up to and including maxValue . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int BitsRequired(long maxValue) Parameters Type Name Description System.Int64 maxValue The maximum value that should be representable. Returns Type Description System.Int32 The amount of bits needed to represent values from 0 to maxValue . | Improve this Doc View Source CheckVersion(Int32) Check the validity of a version number. Declaration public static void CheckVersion(int version) Parameters Type Name Description System.Int32 version | Improve this Doc View Source Copy(PackedInt32s.Reader, Int32, PackedInt32s.Mutable, Int32, Int32, Int32) Copy src[srcPos:srcPos+len] into dest[destPos:destPos+len] using at most mem bytes. Declaration public static void Copy(PackedInt32s.Reader src, int srcPos, PackedInt32s.Mutable dest, int destPos, int len, int mem) Parameters Type Name Description PackedInt32s.Reader src System.Int32 srcPos PackedInt32s.Mutable dest System.Int32 destPos System.Int32 len System.Int32 mem | Improve this Doc View Source FastestFormatAndBits(Int32, Int32, Single) Try to find the PackedInt32s.Format and number of bits per value that would restore from disk the fastest reader whose overhead is less than acceptableOverheadRatio . The acceptableOverheadRatio parameter makes sense for random-access PackedInt32s.Reader s. In case you only plan to perform sequential access on this stream later on, you should probably use COMPACT . If you don't know how many values you are going to write, use valueCount = -1 . Declaration public static PackedInt32s.FormatAndBits FastestFormatAndBits(int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue System.Single acceptableOverheadRatio Returns Type Description PackedInt32s.FormatAndBits | Improve this Doc View Source GetDecoder(PackedInt32s.Format, Int32, Int32) Get a PackedInt32s.IDecoder . Declaration public static PackedInt32s.IDecoder GetDecoder(PackedInt32s.Format format, int version, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format The format used to store packed System.Int32 s. System.Int32 version The compatibility version. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.IDecoder A decoder. | Improve this Doc View Source GetDirectReader(IndexInput) Construct a direct PackedInt32s.Reader from an IndexInput . this method is useful to restore data from streams which have been created using GetWriter(DataOutput, Int32, Int32, Single) . The returned reader will have very little memory overhead, but every call to Get(Int32) is likely to perform a disk seek. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReader(IndexInput in) Parameters Type Name Description IndexInput in The stream to read data from. Returns Type Description PackedInt32s.Reader A direct PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetDirectReaderNoHeader(IndexInput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Construct a direct PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . The returned reader will have very little memory overhead, but every call to Get(Int32) is likely to perform a disk seek. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReaderNoHeader(IndexInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue) Parameters Type Name Description IndexInput in The stream to read data from. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.Reader A direct PackedInt32s.Reader . | Improve this Doc View Source GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header) Expert: Construct a direct PackedInt32s.Reader from an IndexInput without reading metadata at the beginning of the stream. this method is useful to restore data when metadata has been previously read using ReadHeader(DataInput) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReaderNoHeader(IndexInput in, PackedInt32s.Header header) Parameters Type Name Description IndexInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Header header Metadata result from ReadHeader(DataInput) . Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also ReadHeader(DataInput) | Improve this Doc View Source GetEncoder(PackedInt32s.Format, Int32, Int32) Get an PackedInt32s.IEncoder . Declaration public static PackedInt32s.IEncoder GetEncoder(PackedInt32s.Format format, int version, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format The format used to store packed System.Int32 s. System.Int32 version The compatibility version. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.IEncoder An encoder. | Improve this Doc View Source GetMutable(Int32, Int32, PackedInt32s.Format) Same as GetMutable(Int32, Int32, Single) with a pre-computed number of bits per value and format. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Mutable GetMutable(int valueCount, int bitsPerValue, PackedInt32s.Format format) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue PackedInt32s.Format format Returns Type Description PackedInt32s.Mutable | Improve this Doc View Source GetMutable(Int32, Int32, Single) Create a packed integer array with the given amount of values initialized to 0. The valueCount and the bitsPerValue cannot be changed after creation. All Mutables known by this factory are kept fully in RAM. Positive values of acceptableOverheadRatio will trade space for speed by selecting a faster but potentially less memory-efficient implementation. An acceptableOverheadRatio of COMPACT will make sure that the most memory-efficient implementation is selected whereas FASTEST will make sure that the fastest implementation is selected. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Mutable GetMutable(int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. Returns Type Description PackedInt32s.Mutable A mutable packed integer array. | Improve this Doc View Source GetReader(DataInput) Restore a PackedInt32s.Reader from a stream. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReader(DataInput in) Parameters Type Name Description DataInput in The stream to read data from. Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetReaderIterator(DataInput, Int32) Retrieve PackedInt32s as a PackedInt32s.IReaderIterator . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.IReaderIterator GetReaderIterator(DataInput in, int mem) Parameters Type Name Description DataInput in Positioned at the beginning of a stored packed int structure. System.Int32 mem How much memory the iterator is allowed to use to read-ahead (likely to speed up iteration). Returns Type Description PackedInt32s.IReaderIterator An iterator to access the values. Exceptions Type Condition System.IO.IOException If the structure could not be retrieved. | Improve this Doc View Source GetReaderIteratorNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32, Int32) Expert: Restore a PackedInt32s.IReaderIterator from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.IReaderIterator GetReaderIteratorNoHeader(DataInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue, int mem) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue the number of bits per value. System.Int32 mem How much memory the iterator is allowed to use to read-ahead (likely to speed up iteration). Returns Type Description PackedInt32s.IReaderIterator A PackedInt32s.IReaderIterator . See Also GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source GetReaderNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Restore a PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReaderNoHeader(DataInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source GetReaderNoHeader(DataInput, PackedInt32s.Header) Expert: Restore a PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. this method is useful to restore data when metadata has been previously read using ReadHeader(DataInput) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReaderNoHeader(DataInput in, PackedInt32s.Header header) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Header header Metadata result from ReadHeader(DataInput) . Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also ReadHeader(DataInput) | Improve this Doc View Source GetWriter(DataOutput, Int32, Int32, Single) Create a packed integer array writer for the given output, format, value count, and number of bits per value. The resulting stream will be long-aligned. this means that depending on the format which is used under the hoods, up to 63 bits will be wasted. An easy way to make sure that no space is lost is to always use a valueCount that is a multiple of 64. This method writes metadata to the stream, so that the resulting stream is sufficient to restore a PackedInt32s.Reader from it. You don't need to track valueCount or bitsPerValue by yourself. In case this is a problem, you should probably look at GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . The acceptableOverheadRatio parameter controls how readers that will be restored from this stream trade space for speed by selecting a faster but potentially less memory-efficient implementation. An acceptableOverheadRatio of COMPACT will make sure that the most memory-efficient implementation is selected whereas FASTEST will make sure that the fastest implementation is selected. In case you are only interested in reading this stream sequentially later on, you should probably use COMPACT . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Writer GetWriter(DataOutput out, int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description DataOutput out The data output. System.Int32 valueCount The number of values. System.Int32 bitsPerValue The number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. Returns Type Description PackedInt32s.Writer A PackedInt32s.Writer . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Create a packed integer array writer for the given output, format, value count, and number of bits per value. The resulting stream will be long-aligned. this means that depending on the format which is used, up to 63 bits will be wasted. An easy way to make sure that no space is lost is to always use a valueCount that is a multiple of 64. This method does not write any metadata to the stream, meaning that it is your responsibility to store it somewhere else in order to be able to recover data from the stream later on: format (using Id ), valueCount , bitsPerValue , VERSION_CURRENT . It is possible to start writing values without knowing how many of them you are actually going to write. To do this, just pass -1 as valueCount . On the other hand, for any positive value of valueCount , the returned writer will make sure that you don't write more values than expected and pad the end of stream with zeros in case you have written less than valueCount when calling Finish() . The mem parameter lets you control how much memory can be used to buffer changes in memory before flushing to disk. High values of mem are likely to improve throughput. On the other hand, if speed is not that important to you, a value of 0 will use as little memory as possible and should already offer reasonable throughput. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Writer GetWriterNoHeader(DataOutput out, PackedInt32s.Format format, int valueCount, int bitsPerValue, int mem) Parameters Type Name Description DataOutput out The data output. PackedInt32s.Format format The format to use to serialize the values. System.Int32 valueCount The number of values. System.Int32 bitsPerValue The number of bits per value. System.Int32 mem How much memory (in bytes) can be used to speed up serialization. Returns Type Description PackedInt32s.Writer A PackedInt32s.Writer . See Also GetReaderIteratorNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32, Int32) GetReaderNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source MaxValue(Int32) Calculates the maximum unsigned long that can be expressed with the given number of bits. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static long MaxValue(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue The number of bits available for any given value. Returns Type Description System.Int64 The maximum value for the given bits. | Improve this Doc View Source ReadHeader(DataInput) Expert: reads only the metadata from a stream. This is useful to later restore a stream or open a direct reader via GetReaderNoHeader(DataInput, PackedInt32s.Header) or GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header) . Declaration public static PackedInt32s.Header ReadHeader(DataInput in) Parameters Type Name Description DataInput in The stream to read data. Returns Type Description PackedInt32s.Header Packed integer metadata. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also GetReaderNoHeader(DataInput, PackedInt32s.Header) GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IDecoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IDecoder.html",
    "title": "Interface PackedInt32s.IDecoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface PackedInt32s.IDecoder A decoder for packed integers. Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IDecoder Properties | Improve this Doc View Source ByteBlockCount The minimum number of System.Byte blocks to encode in a single iteration, when using byte encoding. Declaration int ByteBlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteValueCount The number of values that can be stored in ByteBlockCount System.Byte blocks. Declaration int ByteValueCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64BlockCount The minimum number of System.Int64 blocks to encode in a single iteration, when using long encoding. NOTE: This was longBlockCount() in Lucene. Declaration int Int64BlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64ValueCount The number of values that can be stored in Int64BlockCount System.Int64 blocks. NOTE: This was longValueCount() in Lucene. Declaration int Int64ValueCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Decode(Byte[], Int32, Int32[], Int32, Int32) Read 8 * iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Byte[], Int32, Int64[], Int32, Int32) Read 8 * iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Int64[], Int32, Int32[], Int32, Int32) Read iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Int64[], Int32, Int64[], Int32, Int32) Read iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IEncoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IEncoder.html",
    "title": "Interface PackedInt32s.IEncoder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface PackedInt32s.IEncoder An encoder for packed integers. Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IEncoder Properties | Improve this Doc View Source ByteBlockCount The minimum number of byte blocks to encode in a single iteration, when using byte encoding. Declaration int ByteBlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteValueCount The number of values that can be stored in ByteBlockCount byte blocks. Declaration int ByteValueCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64BlockCount The minimum number of long blocks to encode in a single iteration, when using long encoding. NOTE: This was longBlockCount() in Lucene Declaration int Int64BlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64ValueCount The number of values that can be stored in Int64BlockCount long blocks. NOTE: This was longValueCount() in Lucene Declaration int Int64ValueCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Encode(Int32[], Int32, Byte[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write 8 * iterations * BlockCount blocks into blocks . Declaration void Encode(int[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int32[], Int32, Int64[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write iterations * BlockCount blocks into blocks . Declaration void Encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int64[], Int32, Byte[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write 8 * iterations * BlockCount blocks into blocks . Declaration void Encode(long[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int64[], Int32, Int64[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write iterations * BlockCount blocks into blocks . Declaration void Encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IReaderIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IReaderIterator.html",
    "title": "Interface PackedInt32s.IReaderIterator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface PackedInt32s.IReaderIterator Run-once iterator interface, to decode previously saved PackedInt32s . Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IReaderIterator Properties | Improve this Doc View Source BitsPerValue Returns number of bits per value. Declaration int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Returns number of values. NOTE: This was size() in Lucene. Declaration int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Ord Returns the current position. Declaration int Ord { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Next() Returns next value. Declaration long Next() Returns Type Description System.Int64 | Improve this Doc View Source Next(Int32) Returns at least 1 and at most count next values, the returned ref MUST NOT be modified. Declaration Int64sRef Next(int count) Parameters Type Name Description System.Int32 count Returns Type Description Int64sRef"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Mutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Mutable.html",
    "title": "Class PackedInt32s.Mutable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.Mutable A packed integer array that can be modified. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable GrowableWriter PackedInt32s.MutableImpl Inherited Members PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) PackedInt32s.Reader.BitsPerValue PackedInt32s.Reader.Count PackedInt32s.Reader.RamBytesUsed() PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray NumericDocValues.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Mutable : PackedInt32s.Reader Methods | Improve this Doc View Source Clear() Sets all values to 0. Declaration public virtual void Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Fill the mutable from fromIndex (inclusive) to toIndex (exclusive) with val . Declaration public virtual void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val | Improve this Doc View Source Save(DataOutput) Save this mutable into out . Instantiating a reader from the generated data will return a reader with the same number of bits per value. Declaration public virtual void Save(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source Set(Int32, Int64) Set the value at the given index in the array. Declaration public abstract void Set(int index, long value) Parameters Type Name Description System.Int32 index Where the value should be positioned. System.Int64 value A value conforming to the constraints set by the array. | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Bulk set: set at least one and at most len longs starting at off in arr into this mutable, starting at index . Returns the actual number of values that have been set. Declaration public virtual int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.MutableImpl.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.MutableImpl.html",
    "title": "Class PackedInt32s.MutableImpl | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.MutableImpl Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.MutableImpl Packed64 Inherited Members PackedInt32s.Mutable.Set(Int32, Int64) PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32) PackedInt32s.Mutable.Fill(Int32, Int32, Int64) PackedInt32s.Mutable.Clear() PackedInt32s.Mutable.Save(DataOutput) PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) PackedInt32s.Reader.RamBytesUsed() PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray NumericDocValues.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class MutableImpl : PackedInt32s.Mutable Constructors | Improve this Doc View Source MutableImpl(Int32, Int32) Declaration protected MutableImpl(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Fields | Improve this Doc View Source m_bitsPerValue Declaration protected readonly int m_bitsPerValue Field Value Type Description System.Int32 | Improve this Doc View Source m_valueCount Declaration protected readonly int m_valueCount Field Value Type Description System.Int32 Properties | Improve this Doc View Source BitsPerValue Declaration public override sealed int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override sealed int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.NullReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.NullReader.html",
    "title": "Class PackedInt32s.NullReader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.NullReader A PackedInt32s.Reader which has all its values equal to 0 (bitsPerValue = 0). Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.NullReader Inherited Members PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray 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.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class NullReader : PackedInt32s.Reader Constructors | Improve this Doc View Source NullReader(Int32) Sole constructor. Declaration public NullReader(int valueCount) Parameters Type Name Description System.Int32 valueCount Properties | Improve this Doc View Source BitsPerValue Declaration public override int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count Methods | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Reader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Reader.html",
    "title": "Class PackedInt32s.Reader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.Reader A read-only random access array of positive integers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.NullReader Inherited Members NumericDocValues.Get(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.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Reader : NumericDocValues Properties | Improve this Doc View Source BitsPerValue Declaration public abstract int BitsPerValue { get; } Property Value Type Description System.Int32 The number of bits used to store any given value. Note: this does not imply that memory usage is bitsPerValue * #values as implementations are free to use non-space-optimal packing of bits. | Improve this Doc View Source Count The number of values. NOTE: This was size() in Lucene. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasArray Returns true if this implementation is backed by a native .NET array. Declaration public virtual bool HasArray { get; } Property Value Type Description System.Boolean See Also GetArray() Methods | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Bulk get: read at least one and at most len longs starting from index into arr[off:off+len] and return the actual number of values that have been read. Declaration public virtual int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source GetArray() Expert: if the bit-width of this reader matches one of .NET's native types, returns the underlying array (ie, byte[], short[], int[], long[]); else, returns null . Note that when accessing the array you must upgrade the type (bitwise AND with all ones), to interpret the full value as unsigned. Ie, bytes[idx]&0xFF, shorts[idx]&0xFFFF, etc. Declaration public virtual object GetArray() Returns Type Description System.Object | Improve this Doc View Source RamBytesUsed() Return the in-memory size in bytes. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Writer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Writer.html",
    "title": "Class PackedInt32s.Writer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PackedInt32s.Writer A write-once Writer. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s.Writer 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.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Writer Constructors | Improve this Doc View Source Writer(DataOutput, Int32, Int32) Declaration protected Writer(DataOutput out, int valueCount, int bitsPerValue) Parameters Type Name Description DataOutput out System.Int32 valueCount System.Int32 bitsPerValue Fields | Improve this Doc View Source m_bitsPerValue Declaration protected readonly int m_bitsPerValue Field Value Type Description System.Int32 | Improve this Doc View Source m_out Declaration protected readonly DataOutput m_out Field Value Type Description DataOutput | Improve this Doc View Source m_valueCount Declaration protected readonly int m_valueCount Field Value Type Description System.Int32 Properties | Improve this Doc View Source BitsPerValue The number of bits per value. Declaration public int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Format The format used to serialize values. Declaration protected abstract PackedInt32s.Format Format { get; } Property Value Type Description PackedInt32s.Format | Improve this Doc View Source Ord Returns the current ord in the stream (number of values that have been written so far minus one). Declaration public abstract int Ord { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int64) Add a value to the stream. Declaration public abstract void Add(long v) Parameters Type Name Description System.Int64 v | Improve this Doc View Source Finish() Perform end-of-stream operations. Declaration public abstract void Finish()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PagedGrowableWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PagedGrowableWriter.html",
    "title": "Class PagedGrowableWriter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PagedGrowableWriter A PagedGrowableWriter . This class slices data into fixed-size blocks which have independent numbers of bits per value and grow on-demand. You should use this class instead of the AbstractAppendingInt64Buffer related ones only when you need random write-access. Otherwise this class will likely be slower and less memory-efficient. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable < PagedGrowableWriter > PagedGrowableWriter Inherited Members AbstractPagedMutable<PagedGrowableWriter>.FillPages() AbstractPagedMutable<PagedGrowableWriter>.Count AbstractPagedMutable<PagedGrowableWriter>.Get(Int64) AbstractPagedMutable<PagedGrowableWriter>.Set(Int64, Int64) AbstractPagedMutable<PagedGrowableWriter>.RamBytesUsed() AbstractPagedMutable<PagedGrowableWriter>.Resize(Int64) AbstractPagedMutable<PagedGrowableWriter>.Grow(Int64) AbstractPagedMutable<PagedGrowableWriter>.Grow() AbstractPagedMutable<PagedGrowableWriter>.ToString() Int64Values.Get(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) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PagedGrowableWriter : AbstractPagedMutable<PagedGrowableWriter> Constructors | Improve this Doc View Source PagedGrowableWriter(Int64, Int32, Int32, Single) Create a new PagedGrowableWriter instance. Declaration public PagedGrowableWriter(long size, int pageSize, int startBitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int64 size The number of values to store. System.Int32 pageSize The number of values per page. System.Int32 startBitsPerValue The initial number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio. Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected override long BaseRamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.BaseRamBytesUsed() | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected override PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.NewMutable(System.Int32, System.Int32) | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected override PagedGrowableWriter NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description PagedGrowableWriter Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.NewUnfilledCopy(System.Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PagedMutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PagedMutable.html",
    "title": "Class PagedMutable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PagedMutable A PagedMutable . This class slices data into fixed-size blocks which have the same number of bits per value. It can be a useful replacement for PackedInt32s.Mutable to store more than 2B values. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable < PagedMutable > PagedMutable Inherited Members AbstractPagedMutable<PagedMutable>.FillPages() AbstractPagedMutable<PagedMutable>.Count AbstractPagedMutable<PagedMutable>.Get(Int64) AbstractPagedMutable<PagedMutable>.Set(Int64, Int64) AbstractPagedMutable<PagedMutable>.RamBytesUsed() AbstractPagedMutable<PagedMutable>.Resize(Int64) AbstractPagedMutable<PagedMutable>.Grow(Int64) AbstractPagedMutable<PagedMutable>.Grow() AbstractPagedMutable<PagedMutable>.ToString() Int64Values.Get(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) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PagedMutable : AbstractPagedMutable<PagedMutable> Constructors | Improve this Doc View Source PagedMutable(Int64, Int32, Int32, Single) Create a new PagedMutable instance. Declaration public PagedMutable(long size, int pageSize, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int64 size The number of values to store. System.Int32 pageSize The number of values per page. System.Int32 bitsPerValue The number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio. Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected override long BaseRamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.BaseRamBytesUsed() | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected override PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.NewMutable(System.Int32, System.Int32) | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected override PagedMutable NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description PagedMutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.NewUnfilledCopy(System.Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.html",
    "title": "Class PagedBytes | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PagedBytes Represents a logical byte[] as a series of pages. You can write-once into the logical byte[] (append only), using copy, and then retrieve slices ( BytesRef ) into it using fill. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PagedBytes 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.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytes Constructors | Improve this Doc View Source PagedBytes(Int32) 1<<blockBits must be bigger than biggest single BytesRef slice that will be pulled. Declaration public PagedBytes(int blockBits) Parameters Type Name Description System.Int32 blockBits Methods | Improve this Doc View Source Copy(IndexInput, Int64) Read this many bytes from in . Declaration public void Copy(IndexInput in, long byteCount) Parameters Type Name Description IndexInput in System.Int64 byteCount | Improve this Doc View Source Copy(BytesRef, BytesRef) Copy BytesRef in, setting BytesRef out to the result. Do not use this if you will use Freeze(true) . This only supports bytes.Length <= blockSize / Declaration public void Copy(BytesRef bytes, BytesRef out) Parameters Type Name Description BytesRef bytes BytesRef out | Improve this Doc View Source CopyUsingLengthPrefix(BytesRef) Copy bytes in, writing the length as a 1 or 2 byte vInt prefix. Declaration public long CopyUsingLengthPrefix(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.Int64 | Improve this Doc View Source Freeze(Boolean) Commits final byte[] , trimming it if necessary and if trim =true. Declaration public PagedBytes.Reader Freeze(bool trim) Parameters Type Name Description System.Boolean trim Returns Type Description PagedBytes.Reader | Improve this Doc View Source GetDataInput() Returns a DataInput to read values from this PagedBytes instance. Declaration public PagedBytes.PagedBytesDataInput GetDataInput() Returns Type Description PagedBytes.PagedBytesDataInput | Improve this Doc View Source GetDataOutput() Returns a DataOutput that you may use to write into this PagedBytes instance. If you do this, you should not call the other writing methods (eg, copy); results are undefined. Declaration public PagedBytes.PagedBytesDataOutput GetDataOutput() Returns Type Description PagedBytes.PagedBytesDataOutput | Improve this Doc View Source GetPointer() Declaration public long GetPointer() Returns Type Description System.Int64 | Improve this Doc View Source RamBytesUsed() Return approx RAM usage in bytes. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataInput.html",
    "title": "Class PagedBytes.PagedBytesDataInput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PagedBytes.PagedBytesDataInput Inheritance System.Object DataInput PagedBytes.PagedBytesDataInput Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) 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.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytesDataInput : DataInput Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides DataInput.Clone() | Improve this Doc View Source GetPosition() Returns the current byte position. Declaration public long GetPosition() Returns Type Description System.Int64 | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source SetPosition(Int64) Seek to a position previously obtained from GetPosition() . Declaration public void SetPosition(long position) Parameters Type Name Description System.Int64 position"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataOutput.html",
    "title": "Class PagedBytes.PagedBytesDataOutput | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PagedBytes.PagedBytesDataOutput Inheritance System.Object DataOutput PagedBytes.PagedBytesDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<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.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytesDataOutput : DataOutput Constructors | Improve this Doc View Source PagedBytesDataOutput(PagedBytes) Declaration public PagedBytesDataOutput(PagedBytes outerInstance) Parameters Type Name Description PagedBytes outerInstance Methods | Improve this Doc View Source GetPosition() Return the current byte position. Declaration public long GetPosition() Returns Type Description System.Int64 | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.Reader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.Reader.html",
    "title": "Class PagedBytes.Reader | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PagedBytes.Reader Provides methods to read BytesRef s from a frozen PagedBytes . Inheritance System.Object PagedBytes.Reader 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.Util Assembly : Lucene.Net.dll Syntax public sealed class Reader Methods | Improve this Doc View Source Fill(BytesRef, Int64) Reads length as 1 or 2 byte vInt prefix, starting at start . Note: this method does not support slices spanning across block borders. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Fill(BytesRef b, long start) Parameters Type Name Description BytesRef b System.Int64 start | Improve this Doc View Source FillSlice(BytesRef, Int64, Int32) Gets a slice out of PagedBytes starting at start with a given length. If the slice spans across a block border this method will allocate sufficient resources and copy the paged data. Slices spanning more than two blocks are not supported. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void FillSlice(BytesRef b, long start, int length) Parameters Type Name Description BytesRef b System.Int64 start System.Int32 length | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64 See Also Freeze(Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.Builder.html",
    "title": "Class PForDeltaDocIdSet.Builder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PForDeltaDocIdSet.Builder A builder for PForDeltaDocIdSet . Inheritance System.Object PForDeltaDocIdSet.Builder 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.Util Assembly : Lucene.Net.dll Syntax public class Builder Constructors | Improve this Doc View Source Builder() Sole constructor. Declaration public Builder() Methods | Improve this Doc View Source Add(DocIdSetIterator) Convenience method to add the content of a DocIdSetIterator to this builder. Declaration public virtual PForDeltaDocIdSet.Builder Add(DocIdSetIterator it) Parameters Type Name Description DocIdSetIterator it Returns Type Description PForDeltaDocIdSet.Builder | Improve this Doc View Source Add(Int32) Add a document to this builder. Documents must be added in order. Declaration public virtual PForDeltaDocIdSet.Builder Add(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description PForDeltaDocIdSet.Builder | Improve this Doc View Source Build() Build the PForDeltaDocIdSet instance. Declaration public virtual PForDeltaDocIdSet Build() Returns Type Description PForDeltaDocIdSet | Improve this Doc View Source SetIndexInterval(Int32) Set the index interval. Every indexInterval -th block will be stored in the index. Set to System.Int32.MaxValue to disable indexing. Declaration public virtual PForDeltaDocIdSet.Builder SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description PForDeltaDocIdSet.Builder"
  },
  "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.html",
    "title": "Class PForDeltaDocIdSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PForDeltaDocIdSet DocIdSet implementation based on pfor-delta encoding. This implementation is inspired from LinkedIn's Kamikaze ( http://data.linkedin.com/opensource/kamikaze ) and Daniel Lemire's JavaFastPFOR ( https://github.com/lemire/JavaFastPFOR ). On the contrary to the original PFOR paper, exceptions are encoded with FOR instead of Simple16. Inheritance System.Object DocIdSet PForDeltaDocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) 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.Util Assembly : Lucene.Net.dll Syntax public sealed class PForDeltaDocIdSet : DocIdSet Properties | Improve this Doc View Source IsCacheable Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source Cardinality() Return the number of documents in this DocIdSet in constant time. Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source RamBytesUsed() Return the memory usage of this instance. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.PrintStreamInfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PrintStreamInfoStream.html",
    "title": "Class PrintStreamInfoStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PrintStreamInfoStream LUCENENET specific stub to assist with migration to TextWriterInfoStream . Inheritance System.Object InfoStream TextWriterInfoStream PrintStreamInfoStream Implements System.IDisposable Inherited Members TextWriterInfoStream.m_messageID TextWriterInfoStream.m_stream TextWriterInfoStream.Message(String, String) TextWriterInfoStream.IsEnabled(String) TextWriterInfoStream.Dispose(Boolean) TextWriterInfoStream.IsSystemStream InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() 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.Util Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use TextWriterInfoStream in .NET. This class is provided only to assist with the transition.\")] public class PrintStreamInfoStream : TextWriterInfoStream, IDisposable Constructors | Improve this Doc View Source PrintStreamInfoStream(TextWriter) Declaration public PrintStreamInfoStream(TextWriter stream) Parameters Type Name Description System.IO.TextWriter stream | Improve this Doc View Source PrintStreamInfoStream(TextWriter, Int32) Declaration public PrintStreamInfoStream(TextWriter stream, int messageID) Parameters Type Name Description System.IO.TextWriter stream System.Int32 messageID Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.PriorityQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PriorityQueue-1.html",
    "title": "Class PriorityQueue<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class PriorityQueue<T> A PriorityQueue<T> maintains a partial ordering of its elements such that the element with least priority can always be found in constant time. Put()'s and Pop()'s require log(size) time. NOTE : this class will pre-allocate a full array of length maxSize+1 if instantiated via the PriorityQueue(Int32, Boolean) constructor with prepopulate set to true . That maximum size can grow as we insert elements over the time. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PriorityQueue<T> FieldValueHitQueue<T> 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.Util Assembly : Lucene.Net.dll Syntax [Serializable] public abstract class PriorityQueue<T> Type Parameters Name Description T Constructors | Improve this Doc View Source PriorityQueue(Int32) Declaration public PriorityQueue(int maxSize) Parameters Type Name Description System.Int32 maxSize | Improve this Doc View Source PriorityQueue(Int32, Boolean) Declaration public PriorityQueue(int maxSize, bool prepopulate) Parameters Type Name Description System.Int32 maxSize System.Boolean prepopulate Properties | Improve this Doc View Source Count Returns the number of elements currently stored in the PriorityQueue<T> . NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HeapArray This method returns the internal heap array as T[]. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected T[] HeapArray { get; } Property Value Type Description T[] | Improve this Doc View Source Top Returns the least element of the PriorityQueue<T> in constant time. Returns null if the queue is empty. Declaration public T Top { get; } Property Value Type Description T Methods | Improve this Doc View Source Add(T) Adds an Object to a PriorityQueue<T> in log(size) time. If one tries to add more objects than Lucene.Net.Util.PriorityQueue`1.maxSize from initialize and it is not possible to resize the heap, an System.IndexOutOfRangeException is thrown. Declaration public T Add(T element) Parameters Type Name Description T element Returns Type Description T The new 'top' element in the queue. | Improve this Doc View Source Clear() Removes all entries from the PriorityQueue<T> . Declaration public void Clear() | Improve this Doc View Source GetSentinelObject() This method can be overridden by extending classes to return a sentinel object which will be used by the PriorityQueue(Int32, Boolean) constructor to fill the queue, so that the code which uses that queue can always assume it's full and only change the top without attempting to insert any new object. Those sentinel values should always compare worse than any non-sentinel value (i.e., LessThan(T, T) should always favor the non-sentinel values). By default, this method returns false , which means the queue will not be filled with sentinel values. Otherwise, the value returned will be used to pre-populate the queue. Adds sentinel values to the queue. If this method is extended to return a non-null value, then the following usage pattern is recommended: // extends GetSentinelObject() to return a non-null value. PriorityQueue<MyObject> pq = new MyQueue<MyObject>(numHits); // save the 'top' element, which is guaranteed to not be null. MyObject pqTop = pq.Top; <...> // now in order to add a new element, which is 'better' than top (after // you've verified it is better), it is as simple as: pqTop.Change(). pqTop = pq.UpdateTop(); NOTE: if this method returns a non- null value, it will be called by the PriorityQueue(Int32, Boolean) constructor Count times, relying on a new object to be returned and will not check if it's null again. Therefore you should ensure any call to this method creates a new instance and behaves consistently, e.g., it cannot return null if it previously returned non- null . Declaration protected virtual T GetSentinelObject() Returns Type Description T The sentinel object to use to pre-populate the queue, or null if sentinel objects are not supported. | Improve this Doc View Source InsertWithOverflow(T) Adds an Object to a PriorityQueue<T> in log(size) time. It returns the object (if any) that was dropped off the heap because it was full. This can be the given parameter (in case it is smaller than the full heap's minimum, and couldn't be added), or another object that was previously the smallest value in the heap and now has been replaced by a larger one, or null if the queue wasn't yet full with Lucene.Net.Util.PriorityQueue`1.maxSize elements. Declaration public virtual T InsertWithOverflow(T element) Parameters Type Name Description T element Returns Type Description T | Improve this Doc View Source LessThan(T, T) Determines the ordering of objects in this priority queue. Subclasses must define this one method. Declaration protected abstract bool LessThan(T a, T b) Parameters Type Name Description T a T b Returns Type Description System.Boolean true if parameter a is less than parameter b . | Improve this Doc View Source Pop() Removes and returns the least element of the PriorityQueue<T> in log(size) time. Declaration public T Pop() Returns Type Description T | Improve this Doc View Source UpdateTop() Should be called when the Object at top changes values. Still log(n) worst case, but it's at least twice as fast to pq.Top.Change(); pq.UpdateTop(); instead of o = pq.Pop(); o.Change(); pq.Push(o); Declaration public T UpdateTop() Returns Type Description T The new 'top' element."
  },
  "api/Lucene.Net/Lucene.Net.Util.QueryBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.QueryBuilder.html",
    "title": "Class QueryBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class QueryBuilder Creates queries from the Analyzer chain. Example usage: QueryBuilder builder = new QueryBuilder(analyzer); Query a = builder.CreateBooleanQuery(\"body\", \"just a test\"); Query b = builder.CreatePhraseQuery(\"body\", \"another test\"); Query c = builder.CreateMinShouldMatchQuery(\"body\", \"another test\", 0.5f); This can also be used as a subclass for query parsers to make it easier to interact with the analysis chain. Factory methods such as NewTermQuery(Term) are provided so that the generated queries can be customized. Inheritance System.Object QueryBuilder 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.Util Assembly : Lucene.Net.dll Syntax public class QueryBuilder Constructors | Improve this Doc View Source QueryBuilder(Analyzer) Creates a new QueryBuilder using the given analyzer. Declaration public QueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Properties | Improve this Doc View Source Analyzer Gets or Sets the analyzer. Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source EnablePositionIncrements Gets or Sets whether position increments are enabled. When true , result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: true. Declaration public virtual bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CreateBooleanQuery(String, String) Creates a boolean query from the query text. This is equivalent to CreateBooleanQuery(field, queryText, Occur.SHOULD) Declaration public virtual Query CreateBooleanQuery(string field, string queryText) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreateBooleanQuery(String, String, Occur) Creates a boolean query from the query text. Declaration public virtual Query CreateBooleanQuery(string field, string queryText, Occur operator) Parameters Type Name Description System.String field Field name System.String queryText Text to be passed to the analyzer. Occur operator Operator used for clauses between analyzer tokens. Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) Creates a query from the analysis chain. Expert: this is more useful for subclasses such as queryparsers. If using this class directly, just use CreateBooleanQuery(String, String) and CreatePhraseQuery(String, String) . Declaration protected Query CreateFieldQuery(Analyzer analyzer, Occur operator, string field, string queryText, bool quoted, int phraseSlop) Parameters Type Name Description Analyzer analyzer Analyzer used for this query. Occur operator Default boolean operator used for this query. System.String field Field to create queries against. System.String queryText Text to be passed to the analysis chain. System.Boolean quoted true if phrases should be generated when terms occur at more than one position. System.Int32 phraseSlop Slop factor for phrase/multiphrase queries. Returns Type Description Query | Improve this Doc View Source CreateMinShouldMatchQuery(String, String, Single) Creates a minimum-should-match query from the query text. Declaration public virtual Query CreateMinShouldMatchQuery(string field, string queryText, float fraction) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. System.Single fraction of query terms [0..1] that should match Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreatePhraseQuery(String, String) Creates a phrase query from the query text. This is equivalent to CreatePhraseQuery(field, queryText, 0) Declaration public virtual Query CreatePhraseQuery(string field, string queryText) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. Returns Type Description Query TermQuery , BooleanQuery , PhraseQuery , or MultiPhraseQuery , based on the analysis of queryText . | Improve this Doc View Source CreatePhraseQuery(String, String, Int32) Creates a phrase query from the query text. Declaration public virtual Query CreatePhraseQuery(string field, string queryText, int phraseSlop) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. System.Int32 phraseSlop number of other words permitted between words in query phrase Returns Type Description Query TermQuery , BooleanQuery , PhraseQuery , or MultiPhraseQuery , based on the analysis of queryText . | Improve this Doc View Source NewBooleanQuery(Boolean) Builds a new BooleanQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual BooleanQuery NewBooleanQuery(bool disableCoord) Parameters Type Name Description System.Boolean disableCoord Disable coord. Returns Type Description BooleanQuery New BooleanQuery instance. | Improve this Doc View Source NewMultiPhraseQuery() Builds a new MultiPhraseQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual MultiPhraseQuery NewMultiPhraseQuery() Returns Type Description MultiPhraseQuery New MultiPhraseQuery instance. | Improve this Doc View Source NewPhraseQuery() Builds a new PhraseQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual PhraseQuery NewPhraseQuery() Returns Type Description PhraseQuery New PhraseQuery instance. | Improve this Doc View Source NewTermQuery(Term) Builds a new TermQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual Query NewTermQuery(Term term) Parameters Type Name Description Term term Term. Returns Type Description Query New TermQuery instance."
  },
  "api/Lucene.Net/Lucene.Net.Util.RamUsageEstimator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RamUsageEstimator.html",
    "title": "Class RamUsageEstimator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RamUsageEstimator Estimates the size (memory representation) of .NET objects. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RamUsageEstimator 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.Util Assembly : Lucene.Net.dll Syntax public sealed class RamUsageEstimator Fields | Improve this Doc View Source NUM_BYTES_ARRAY_HEADER Number of bytes to represent an array header (no content, but with alignments). Declaration public static readonly int NUM_BYTES_ARRAY_HEADER Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_BOOLEAN Declaration public const int NUM_BYTES_BOOLEAN = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_BYTE Declaration public const int NUM_BYTES_BYTE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_CHAR Declaration public const int NUM_BYTES_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_DOUBLE Declaration public const int NUM_BYTES_DOUBLE = 8 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT16 NOTE: This was NUM_BYTES_SHORT in Lucene Declaration public const int NUM_BYTES_INT16 = 2 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT32 NOTE: This was NUM_BYTES_INT in Lucene Declaration public const int NUM_BYTES_INT32 = 4 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT64 NOTE: This was NUM_BYTES_LONG in Lucene Declaration public const int NUM_BYTES_INT64 = 8 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_ALIGNMENT A constant specifying the object alignment boundary inside the .NET runtime. Objects will always take a full multiple of this constant, possibly wasting some space. Declaration public static readonly int NUM_BYTES_OBJECT_ALIGNMENT Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_HEADER Number of bytes to represent an object header (no fields, no alignments). Declaration public static readonly int NUM_BYTES_OBJECT_HEADER Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_REF Number of bytes this .NET runtime uses to represent an object reference. Declaration public static readonly int NUM_BYTES_OBJECT_REF Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_SINGLE NOTE: This was NUM_BYTES_FLOAT in Lucene Declaration public const int NUM_BYTES_SINGLE = 4 Field Value Type Description System.Int32 | Improve this Doc View Source ONE_GB One gigabyte bytes. Declaration public const long ONE_GB = 1073741824L Field Value Type Description System.Int64 | Improve this Doc View Source ONE_KB One kilobyte bytes. Declaration public const long ONE_KB = 1024L Field Value Type Description System.Int64 | Improve this Doc View Source ONE_MB One megabyte bytes. Declaration public const long ONE_MB = 1048576L Field Value Type Description System.Int64 Methods | Improve this Doc View Source AlignObjectSize(Int64) Aligns an object size to be the next multiple of NUM_BYTES_OBJECT_ALIGNMENT . Declaration public static long AlignObjectSize(long size) Parameters Type Name Description System.Int64 size Returns Type Description System.Int64 | Improve this Doc View Source HumanReadableUnits(Int64) Returns size in human-readable units (GB, MB, KB or bytes). Declaration public static string HumanReadableUnits(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.String | Improve this Doc View Source HumanReadableUnits(Int64, IFormatProvider) Returns size in human-readable units (GB, MB, KB or bytes). Declaration public static string HumanReadableUnits(long bytes, IFormatProvider df) Parameters Type Name Description System.Int64 bytes System.IFormatProvider df Returns Type Description System.String | Improve this Doc View Source HumanSizeOf(Object) Return a human-readable size of a given object. Declaration public static string HumanSizeOf(object object) Parameters Type Name Description System.Object object Returns Type Description System.String See Also SizeOf(Object) HumanReadableUnits(Int64) | Improve this Doc View Source HumanSizeOf(Object, IFormatProvider) Return a human-readable size of a given object. Declaration public static string HumanSizeOf(object object, IFormatProvider df) Parameters Type Name Description System.Object object System.IFormatProvider df Returns Type Description System.String See Also SizeOf(Object) HumanReadableUnits(Int64) | Improve this Doc View Source ShallowSizeOf(Object) Estimates a \"shallow\" memory usage of the given object. For arrays, this will be the memory taken by array storage (no subreferences will be followed). For objects, this will be the memory taken by the fields. .NET object alignments are also applied. Declaration public static long ShallowSizeOf(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int64 | Improve this Doc View Source ShallowSizeOfInstance(Type) Returns the shallow instance size in bytes an instance of the given class would occupy. This works with all conventional classes and primitive types, but not with arrays (the size then depends on the number of elements and varies from object to object). Declaration public static long ShallowSizeOfInstance(Type clazz) Parameters Type Name Description System.Type clazz Returns Type Description System.Int64 Exceptions Type Condition System.ArgumentException if clazz is an array class. See Also ShallowSizeOf(Object) | Improve this Doc View Source SizeOf(Boolean[]) Returns the size in bytes of the bool[] object. Declaration public static long SizeOf(bool[] arr) Parameters Type Name Description System.Boolean [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Byte[]) Returns the size in bytes of the byte[] object. Declaration public static long SizeOf(byte[] arr) Parameters Type Name Description System.Byte [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Char[]) Returns the size in bytes of the char[] object. Declaration public static long SizeOf(char[] arr) Parameters Type Name Description System.Char [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Double[]) Returns the size in bytes of the double[] object. Declaration public static long SizeOf(double[] arr) Parameters Type Name Description System.Double [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int16[]) Returns the size in bytes of the short[] object. Declaration public static long SizeOf(short[] arr) Parameters Type Name Description System.Int16 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int32[]) Returns the size in bytes of the int[] object. Declaration public static long SizeOf(int[] arr) Parameters Type Name Description System.Int32 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int64[]) Returns the size in bytes of the long[] object. Declaration public static long SizeOf(long[] arr) Parameters Type Name Description System.Int64 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Object) Estimates the RAM usage by the given object. It will walk the object tree and sum up all referenced objects. Resource Usage: this method internally uses a set of every object seen during traversals so it does allocate memory (it isn't side-effect free). After the method exits, this memory should be GCed. Declaration public static long SizeOf(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(SByte[]) Returns the size in bytes of the sbyte[] object. Declaration [CLSCompliant(false)] public static long SizeOf(sbyte[] arr) Parameters Type Name Description System.SByte [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Single[]) Returns the size in bytes of the float[] object. Declaration public static long SizeOf(float[] arr) Parameters Type Name Description System.Single [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt16[]) Returns the size in bytes of the ushort[] object. Declaration [CLSCompliant(false)] public static long SizeOf(ushort[] arr) Parameters Type Name Description System.UInt16 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt32[]) Returns the size in bytes of the uint[] object. Declaration [CLSCompliant(false)] public static long SizeOf(uint[] arr) Parameters Type Name Description System.UInt32 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt64[]) Returns the size in bytes of the ulong[] object. Declaration [CLSCompliant(false)] public static long SizeOf(ulong[] arr) Parameters Type Name Description System.UInt64 [] arr Returns Type Description System.Int64 See Also SizeOf(Object) ShallowSizeOf(Object) ShallowSizeOfInstance(Type)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RecyclingByteBlockAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RecyclingByteBlockAllocator.html",
    "title": "Class RecyclingByteBlockAllocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RecyclingByteBlockAllocator A ByteBlockPool.Allocator implementation that recycles unused byte blocks in a buffer and reuses them in subsequent calls to GetByteBlock() . Note: this class is not thread-safe. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ByteBlockPool.Allocator RecyclingByteBlockAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) 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.Util Assembly : Lucene.Net.dll Syntax public sealed class RecyclingByteBlockAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source RecyclingByteBlockAllocator() Creates a new RecyclingByteBlockAllocator with a block size of BYTE_BLOCK_SIZE , upper buffered docs limit of DEFAULT_BUFFERED_BLOCKS (64). Declaration public RecyclingByteBlockAllocator() | Improve this Doc View Source RecyclingByteBlockAllocator(Int32, Int32) Creates a new RecyclingByteBlockAllocator . Declaration public RecyclingByteBlockAllocator(int blockSize, int maxBufferedBlocks) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered byte block. | Improve this Doc View Source RecyclingByteBlockAllocator(Int32, Int32, Counter) Creates a new RecyclingByteBlockAllocator Declaration public RecyclingByteBlockAllocator(int blockSize, int maxBufferedBlocks, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered byte block. Counter bytesUsed Counter reference counting internally allocated bytes. Fields | Improve this Doc View Source DEFAULT_BUFFERED_BLOCKS Declaration public const int DEFAULT_BUFFERED_BLOCKS = 64 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BytesUsed Declaration public long BytesUsed { get; } Property Value Type Description System.Int64 The number of bytes currently allocated by this ByteBlockPool.Allocator . | Improve this Doc View Source MaxBufferedBlocks Declaration public int MaxBufferedBlocks { get; } Property Value Type Description System.Int32 The maximum number of buffered byte blocks. | Improve this Doc View Source NumBufferedBlocks Declaration public int NumBufferedBlocks { get; } Property Value Type Description System.Int32 The number of currently buffered blocks. Methods | Improve this Doc View Source FreeBlocks(Int32) Removes the given number of byte blocks from the buffer if possible. Declaration public int FreeBlocks(int num) Parameters Type Name Description System.Int32 num The number of byte blocks to remove. Returns Type Description System.Int32 The number of actually removed buffers. | Improve this Doc View Source GetByteBlock() Declaration public override byte[] GetByteBlock() Returns Type Description System.Byte [] Overrides ByteBlockPool.Allocator.GetByteBlock() | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RecyclingInt32BlockAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RecyclingInt32BlockAllocator.html",
    "title": "Class RecyclingInt32BlockAllocator | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RecyclingInt32BlockAllocator A Int32BlockPool.Allocator implementation that recycles unused System.Int32 blocks in a buffer and reuses them in subsequent calls to GetInt32Block() . Note: this class is not thread-safe. NOTE: This was RecyclingIntBlockAllocator in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.Allocator RecyclingInt32BlockAllocator Inherited Members Int32BlockPool.Allocator.m_blockSize 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.Util Assembly : Lucene.Net.dll Syntax public sealed class RecyclingInt32BlockAllocator : Int32BlockPool.Allocator Constructors | Improve this Doc View Source RecyclingInt32BlockAllocator() Creates a new RecyclingInt32BlockAllocator with a block size of INT32_BLOCK_SIZE , upper buffered docs limit of DEFAULT_BUFFERED_BLOCKS . Declaration public RecyclingInt32BlockAllocator() | Improve this Doc View Source RecyclingInt32BlockAllocator(Int32, Int32) Creates a new RecyclingInt32BlockAllocator . Declaration public RecyclingInt32BlockAllocator(int blockSize, int maxBufferedBlocks) Parameters Type Name Description System.Int32 blockSize The size of each block returned by this allocator. System.Int32 maxBufferedBlocks Maximum number of buffered int blocks. | Improve this Doc View Source RecyclingInt32BlockAllocator(Int32, Int32, Counter) Creates a new RecyclingInt32BlockAllocator . Declaration public RecyclingInt32BlockAllocator(int blockSize, int maxBufferedBlocks, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered int block. Counter bytesUsed Counter reference counting internally allocated bytes. Fields | Improve this Doc View Source DEFAULT_BUFFERED_BLOCKS Declaration public const int DEFAULT_BUFFERED_BLOCKS = 64 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BytesUsed Declaration public long BytesUsed { get; } Property Value Type Description System.Int64 The number of bytes currently allocated by this Int32BlockPool.Allocator . | Improve this Doc View Source MaxBufferedBlocks Declaration public int MaxBufferedBlocks { get; } Property Value Type Description System.Int32 The maximum number of buffered byte blocks. | Improve this Doc View Source NumBufferedBlocks Declaration public int NumBufferedBlocks { get; } Property Value Type Description System.Int32 The number of currently buffered blocks. Methods | Improve this Doc View Source FreeBlocks(Int32) Removes the given number of int blocks from the buffer if possible. Declaration public int FreeBlocks(int num) Parameters Type Name Description System.Int32 num The number of int blocks to remove. Returns Type Description System.Int32 The number of actually removed buffers. | Improve this Doc View Source GetInt32Block() NOTE: This was getIntBlock() in Lucene Declaration public override int[] GetInt32Block() Returns Type Description System.Int32 [] Overrides Int32BlockPool.Allocator.GetInt32Block() | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks in Lucene Declaration public override void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end Overrides Int32BlockPool.Allocator.RecycleInt32Blocks(Int32[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RefCount-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RefCount-1.html",
    "title": "Class RefCount<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RefCount<T> Manages reference counting for a given object. Extensions can override Release() to do custom logic when reference counting hits 0. Inheritance System.Object RefCount<T> 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.Util Assembly : Lucene.Net.dll Syntax public class RefCount<T> Type Parameters Name Description T Constructors | Improve this Doc View Source RefCount(T) Declaration public RefCount(T object) Parameters Type Name Description T object Fields | Improve this Doc View Source m_object Declaration protected readonly T m_object Field Value Type Description T Methods | Improve this Doc View Source DecRef() Decrements the reference counting of this object. When reference counting hits 0, calls Release() . Declaration public void DecRef() | Improve this Doc View Source Get() Declaration public T Get() Returns Type Description T | Improve this Doc View Source GetRefCount() Returns the current reference count. Declaration public int GetRefCount() Returns Type Description System.Int32 | Improve this Doc View Source IncRef() Increments the reference count. Calls to this method must be matched with calls to DecRef() . Declaration public void IncRef() | Improve this Doc View Source Release() Called when reference counting hits 0. By default this method does nothing, but extensions can override to e.g. release resources attached to object that is managed by this class. Declaration protected virtual void Release()"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.html",
    "title": "Class RollingBuffer | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RollingBuffer LUCENENET specific class to allow referencing static members of RollingBuffer<T> without referencing its generic closing type. Inheritance System.Object RollingBuffer 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.Util Assembly : Lucene.Net.dll Syntax public static class RollingBuffer"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.IResettable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.IResettable.html",
    "title": "Interface RollingBuffer.IResettable | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Interface RollingBuffer.IResettable Implement to reset an instance Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IResettable Methods | Improve this Doc View Source Reset() Declaration void Reset()"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer-1.html",
    "title": "Class RollingBuffer<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class RollingBuffer<T> Acts like forever growing T[] , but internally uses a circular buffer to reuse instances of . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RollingBuffer<T> 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.Util Assembly : Lucene.Net.dll Syntax public abstract class RollingBuffer<T> where T : RollingBuffer.IResettable Type Parameters Name Description T Constructors | Improve this Doc View Source RollingBuffer() Declaration protected RollingBuffer() | Improve this Doc View Source RollingBuffer(Func<T>) Declaration protected RollingBuffer(Func<T> factory) Parameters Type Name Description System.Func <T> factory Properties | Improve this Doc View Source MaxPos Returns the maximum position looked up, or -1 if no position has been looked up since Reset() /init. Declaration public virtual int MaxPos { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source FreeBefore(Int32) Declaration public virtual void FreeBefore(int pos) Parameters Type Name Description System.Int32 pos | Improve this Doc View Source Get(Int32) Get T instance for this absolute position; This is allowed to be arbitrarily far \"in the future\" but cannot be before the last FreeBefore(Int32) . Declaration public virtual T Get(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description T | Improve this Doc View Source NewInstance() Declaration protected abstract T NewInstance() Returns Type Description T | Improve this Doc View Source Reset() Declaration public virtual void Reset()"
  },
  "api/Lucene.Net/Lucene.Net.Util.SentinelInt32Set.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SentinelInt32Set.html",
    "title": "Class SentinelInt32Set | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SentinelInt32Set A native System.Int32 hash-based set where one value is reserved to mean \"EMPTY\" internally. The space overhead is fairly low as there is only one power-of-two sized int[] to hold the values. The set is re-hashed when adding a value that would make it >= 75% full. Consider extending and over-riding Hash(Int32) if the values might be poor hash keys; Lucene docids should be fine. The internal fields are exposed publicly to enable more efficient use at the expense of better O-O principles. To iterate over the integers held in this set, simply use code like this: SentinelIntSet set = ... foreach (int v in set.keys) { if (v == set.EmptyVal) continue; //use v... } NOTE: This was SentinelIntSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SentinelInt32Set 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.Util Assembly : Lucene.Net.dll Syntax public class SentinelInt32Set Constructors | Improve this Doc View Source SentinelInt32Set(Int32, Int32) Declaration public SentinelInt32Set(int size, int emptyVal) Parameters Type Name Description System.Int32 size The minimum number of elements this set should be able to hold without rehashing (i.e. the slots are guaranteed not to change). System.Int32 emptyVal The integer value to use for EMPTY. Properties | Improve this Doc View Source Count The number of integers in this set. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EmptyVal Declaration public int EmptyVal { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Keys A power-of-2 over-sized array holding the integers in the set along with empty values. Declaration public int[] Keys { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source RehashCount The count at which a rehash should be done. Declaration public int RehashCount { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Exists(Int32) Does this set contain the specified integer? Declaration public virtual bool Exists(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Boolean | Improve this Doc View Source Find(Int32) (internal) Returns the slot for this key, or -slot-1 if not found. Declaration public virtual int Find(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source GetSlot(Int32) (internal) Returns the slot for this key. Declaration public virtual int GetSlot(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Hash(Int32) (internal) Return the hash for the key. The default implementation just returns the key, which is not appropriate for general purpose use. Declaration public virtual int Hash(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Put(Int32) Puts this integer (key) in the set, and returns the slot index it was added to. It rehashes if adding it would make the set more than 75% full. Declaration public virtual int Put(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Rehash() (internal) Rehashes by doubling key ( int[] ) and filling with the old values. Declaration public virtual void Rehash()"
  },
  "api/Lucene.Net/Lucene.Net.Util.ServiceNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ServiceNameAttribute.html",
    "title": "Class ServiceNameAttribute | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ServiceNameAttribute LUCENENET specific abstract class for System.Attribute s that can be used to override the default convention-based names of services. For example, \"Lucene40Codec\" will by convention be named \"Lucene40\". Using the CodecNameAttribute , the name can be overridden with a custom value. Inheritance System.Object System.Attribute ServiceNameAttribute CodecNameAttribute DocValuesFormatNameAttribute PostingsFormatNameAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetHashCode() System.Attribute.IsDefaultAttribute() System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.Match(System.Object) System.Attribute.TypeId 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.Util Assembly : Lucene.Net.dll Syntax public abstract class ServiceNameAttribute : Attribute Constructors | Improve this Doc View Source ServiceNameAttribute(String) Sole constructor. Initializes the service name. Declaration public ServiceNameAttribute(string name) Parameters Type Name Description System.String name Properties | Improve this Doc View Source Name Gets the service name. Declaration public string Name { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.SetOnce-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SetOnce-1.html",
    "title": "Class SetOnce<T> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SetOnce<T> A convenient class which offers a semi-immutable object wrapper implementation which allows one to set the value of an object exactly once, and retrieve it many times. If Set(T) is called more than once, AlreadySetException is thrown and the operation will fail. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SetOnce<T> 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.Util Assembly : Lucene.Net.dll Syntax public sealed class SetOnce<T> where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source SetOnce() A default constructor which does not set the internal object, and allows setting it by calling Set(T) . Declaration public SetOnce() | Improve this Doc View Source SetOnce(T) Creates a new instance with the internal object set to the given object. Note that any calls to Set(T) afterwards will result in AlreadySetException Declaration public SetOnce(T obj) Parameters Type Name Description T obj Exceptions Type Condition AlreadySetException if called more than once See Also Set(T) Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source Get() Returns the object set by Set(T) . Declaration public T Get() Returns Type Description T | Improve this Doc View Source Set(T) Sets the given object. If the object has already been set, an exception is thrown. Declaration public void Set(T obj) Parameters Type Name Description T obj"
  },
  "api/Lucene.Net/Lucene.Net.Util.SloppyMath.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SloppyMath.html",
    "title": "Class SloppyMath | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SloppyMath Math functions that trade off accuracy for speed. Inheritance System.Object SloppyMath 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.Util Assembly : Lucene.Net.dll Syntax public class SloppyMath Methods | Improve this Doc View Source Asin(Double) Returns the arc sine of a value. The returned angle is in the range -pi /2 through pi /2. Error is around 1E-7. Special cases: If the argument is System.Double.NaN or its absolute value is greater than 1, then the result is System.Double.NaN . Declaration public static double Asin(double a) Parameters Type Name Description System.Double a the value whose arc sine is to be returned. Returns Type Description System.Double arc sine of the argument See Also System.Math.Asin(System.Double) | Improve this Doc View Source Cos(Double) Returns the trigonometric cosine of an angle. Error is around 1E-15. Special cases: If the argument is System.Double.NaN or an infinity, then the result is System.Double.NaN . Declaration public static double Cos(double a) Parameters Type Name Description System.Double a An angle, in radians. Returns Type Description System.Double The cosine of the argument. See Also System.Math.Cos(System.Double) | Improve this Doc View Source EarthDiameter(Double) Return an approximate value of the diameter of the earth at the given latitude, in kilometers. Declaration public static double EarthDiameter(double latitude) Parameters Type Name Description System.Double latitude Returns Type Description System.Double | Improve this Doc View Source Haversin(Double, Double, Double, Double) Returns the distance in kilometers between two points specified in decimal degrees (latitude/longitude). Declaration public static double Haversin(double lat1, double lon1, double lat2, double lon2) Parameters Type Name Description System.Double lat1 Latitude of the first point. System.Double lon1 Longitude of the first point. System.Double lat2 Latitude of the second point. System.Double lon2 Longitude of the second point. Returns Type Description System.Double distance in kilometers."
  },
  "api/Lucene.Net/Lucene.Net.Util.SmallSingle.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SmallSingle.html",
    "title": "Class SmallSingle | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SmallSingle Floating point numbers smaller than 32 bits. NOTE: This was SmallFloat in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SmallSingle 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.Util Assembly : Lucene.Net.dll Syntax public class SmallSingle Methods | Improve this Doc View Source Byte315ToSingle(Byte) ByteToSingle(b, mantissaBits=3, zeroExponent=15) NOTE: This was byte315ToFloat() in Lucene Declaration public static float Byte315ToSingle(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source Byte52ToSingle(Byte) ByteToFloat(b, mantissaBits=5, zeroExponent=2) NOTE: This was byte52ToFloat() in Lucene Declaration public static float Byte52ToSingle(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source ByteToSingle(Byte, Int32, Int32) Converts an 8 bit System.Single to a 32 bit System.Single . NOTE: This was byteToFloat() in Lucene Declaration public static float ByteToSingle(byte b, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Byte b System.Int32 numMantissaBits System.Int32 zeroExp Returns Type Description System.Single | Improve this Doc View Source SByte315ToSingle(SByte) SByteToSingle(b, mantissaBits=3, zeroExponent=15) NOTE: This was byte315ToFloat() in Lucene Declaration [CLSCompliant(false)] public static float SByte315ToSingle(sbyte b) Parameters Type Name Description System.SByte b Returns Type Description System.Single | Improve this Doc View Source SByte52ToSingle(SByte) SByteToFloat(b, mantissaBits=5, zeroExponent=2) NOTE: This was byte52ToFloat() in Lucene Declaration [CLSCompliant(false)] public static float SByte52ToSingle(sbyte b) Parameters Type Name Description System.SByte b Returns Type Description System.Single | Improve this Doc View Source SByteToSingle(SByte, Int32, Int32) Converts an 8 bit System.Single to a 32 bit System.Single . NOTE: This was byteToFloat() in Lucene Declaration [CLSCompliant(false)] public static float SByteToSingle(sbyte b, int numMantissaBits, int zeroExp) Parameters Type Name Description System.SByte b System.Int32 numMantissaBits System.Int32 zeroExp Returns Type Description System.Single | Improve this Doc View Source SingleToByte(Single, Int32, Int32) Converts a 32 bit System.Single to an 8 bit System.Single . Values less than zero are all mapped to zero. Values are truncated (rounded down) to the nearest 8 bit value. Values between zero and the smallest representable value are rounded up. Declaration public static byte SingleToByte(float f, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Single f The 32 bit System.Single to be converted to an 8 bit System.Single ( System.Byte ). System.Int32 numMantissaBits The number of mantissa bits to use in the byte, with the remainder to be used in the exponent. System.Int32 zeroExp The zero-point in the range of exponent values. Returns Type Description System.Byte The 8 bit float representation. | Improve this Doc View Source SingleToByte315(Single) SingleToSByte((byte)b, mantissaBits=3, zeroExponent=15) smallest non-zero value = 5.820766E-10 largest value = 7.5161928E9 epsilon = 0.125 NOTE: This was floatToByte315() in Lucene Declaration public static byte SingleToByte315(float f) Parameters Type Name Description System.Single f Returns Type Description System.Byte | Improve this Doc View Source SingleToByte52(Single) SingleToByte(b, mantissaBits=5, zeroExponent=2) smallest nonzero value = 0.033203125 largest value = 1984.0 epsilon = 0.03125 NOTE: This was floatToByte52() in Lucene Declaration public static byte SingleToByte52(float f) Parameters Type Name Description System.Single f Returns Type Description System.Byte | Improve this Doc View Source SingleToSByte(Single, Int32, Int32) Converts a 32 bit System.Single to an 8 bit System.Single . Values less than zero are all mapped to zero. Values are truncated (rounded down) to the nearest 8 bit value. Values between zero and the smallest representable value are rounded up. NOTE: This was floatToByte() in Lucene Declaration [CLSCompliant(false)] public static sbyte SingleToSByte(float f, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Single f The 32 bit System.Single to be converted to an 8 bit System.Single ( System.SByte ). System.Int32 numMantissaBits The number of mantissa bits to use in the byte, with the remainder to be used in the exponent. System.Int32 zeroExp The zero-point in the range of exponent values. Returns Type Description System.SByte The 8 bit float representation. | Improve this Doc View Source SingleToSByte315(Single) SingleToSByte(b, mantissaBits=3, zeroExponent=15) smallest non-zero value = 5.820766E-10 largest value = 7.5161928E9 epsilon = 0.125 NOTE: This was floatToByte315() in Lucene Declaration [CLSCompliant(false)] public static sbyte SingleToSByte315(float f) Parameters Type Name Description System.Single f Returns Type Description System.SByte | Improve this Doc View Source SingleToSByte52(Single) SingleToSByte(b, mantissaBits=5, zeroExponent=2) smallest nonzero value = 0.033203125 largest value = 1984.0 epsilon = 0.03125 NOTE: This was floatToByte52() in Lucene Declaration [CLSCompliant(false)] public static sbyte SingleToSByte52(float f) Parameters Type Name Description System.Single f Returns Type Description System.SByte"
  },
  "api/Lucene.Net/Lucene.Net.Util.Sorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Sorter.html",
    "title": "Class Sorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class Sorter Base class for sorting algorithms implementations. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter InPlaceMergeSorter IntroSorter TimSorter 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.Util Assembly : Lucene.Net.dll Syntax public abstract class Sorter Constructors | Improve this Doc View Source Sorter() Sole constructor, used for inheritance. Declaration protected Sorter() Methods | Improve this Doc View Source Compare(Int32, Int32) Compare entries found in slots i and j . The contract for the returned value is the same as System.Collections.Generic.IComparer<T>.Compare(T, T) . Declaration protected abstract int Compare(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public abstract void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to | Improve this Doc View Source Swap(Int32, Int32) Swap values at slots i and j . Declaration protected abstract void Swap(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j"
  },
  "api/Lucene.Net/Lucene.Net.Util.SPIClassIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SPIClassIterator-1.html",
    "title": "Class SPIClassIterator<S> | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SPIClassIterator<S> Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of java.util.ServiceLoader but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SPIClassIterator<S> Implements System.Collections.Generic.IEnumerable < System.Type > 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.Util Assembly : Lucene.Net.dll Syntax public class SPIClassIterator<S> : IEnumerable<Type>, IEnumerable Type Parameters Name Description S Methods | Improve this Doc View Source Get() Declaration public static SPIClassIterator<S> Get() Returns Type Description SPIClassIterator <S> | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<Type> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Type > Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Util.StringHelper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.StringHelper.html",
    "title": "Class StringHelper | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class StringHelper Methods for manipulating strings. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StringHelper 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.Util Assembly : Lucene.Net.dll Syntax public abstract class StringHelper Fields | Improve this Doc View Source GOOD_FAST_HASH_SEED Pass this as the seed to Murmurhash3_x86_32(Byte[], Int32, Int32, Int32) . Declaration public static readonly int GOOD_FAST_HASH_SEED Field Value Type Description System.Int32 Properties | Improve this Doc View Source VersionComparer Returns a IComparer{string} over versioned strings such as X.YY.Z This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static IComparer<string> VersionComparer { get; } Property Value Type Description System.Collections.Generic.IComparer < System.String > Methods | Improve this Doc View Source BytesDifference(BytesRef, BytesRef) Compares two BytesRef , element by element, and returns the number of elements common to both arrays. Declaration public static int BytesDifference(BytesRef left, BytesRef right) Parameters Type Name Description BytesRef left The first BytesRef to compare. BytesRef right The second BytesRef to compare. Returns Type Description System.Int32 The number of common elements. | Improve this Doc View Source EndsWith(BytesRef, BytesRef) Returns true if the ref ends with the given suffix . Otherwise false . Declaration public static bool EndsWith(BytesRef ref, BytesRef suffix) Parameters Type Name Description BytesRef ref The BytesRef to test. BytesRef suffix The expected suffix Returns Type Description System.Boolean Returns true if the ref ends with the given suffix . Otherwise false . | Improve this Doc View Source Equals(String, String) Declaration public static bool Equals(string s1, string s2) Parameters Type Name Description System.String s1 System.String s2 Returns Type Description System.Boolean | Improve this Doc View Source Murmurhash3_x86_32(BytesRef, Int32) Returns the MurmurHash3_x86_32 hash. Original source/tests at https://github.com/yonik/java_util/ . Declaration public static int Murmurhash3_x86_32(BytesRef bytes, int seed) Parameters Type Name Description BytesRef bytes System.Int32 seed Returns Type Description System.Int32 | Improve this Doc View Source Murmurhash3_x86_32(Byte[], Int32, Int32, Int32) Returns the MurmurHash3_x86_32 hash. Original source/tests at https://github.com/yonik/java_util/ . Declaration public static int Murmurhash3_x86_32(byte[] data, int offset, int len, int seed) Parameters Type Name Description System.Byte [] data System.Int32 offset System.Int32 len System.Int32 seed Returns Type Description System.Int32 | Improve this Doc View Source StartsWith(BytesRef, BytesRef) Returns true if the ref starts with the given prefix . Otherwise false . Declaration public static bool StartsWith(BytesRef ref, BytesRef prefix) Parameters Type Name Description BytesRef ref The BytesRef to test. BytesRef prefix The expected prefix Returns Type Description System.Boolean Returns true if the ref starts with the given prefix . Otherwise false ."
  },
  "api/Lucene.Net/Lucene.Net.Util.SystemConsole.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SystemConsole.html",
    "title": "Class SystemConsole | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SystemConsole Mimics System.Console , but allows for swapping the System.IO.TextWriter of Out and Error , or the System.IO.TextReader of In with user-defined implementations. Inheritance System.Object SystemConsole 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.Util Assembly : Lucene.Net.dll Syntax public static class SystemConsole Properties | Improve this Doc View Source Error Declaration public static TextWriter Error { get; set; } Property Value Type Description System.IO.TextWriter | Improve this Doc View Source In Declaration public static TextReader In { get; set; } Property Value Type Description System.IO.TextReader | Improve this Doc View Source Out Declaration public static TextWriter Out { get; set; } Property Value Type Description System.IO.TextWriter Methods | Improve this Doc View Source Write(Boolean) Declaration public static void Write(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source Write(Char) Declaration public static void Write(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Write(Char[]) Declaration public static void Write(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source Write(Char[], Int32, Int32) Declaration public static void Write(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source Write(Decimal) Declaration public static void Write(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source Write(Double) Declaration public static void Write(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source Write(Int32) Declaration public static void Write(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source Write(Int64) Declaration public static void Write(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source Write(Object) Declaration public static void Write(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source Write(Single) Declaration public static void Write(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source Write(String) Declaration public static void Write(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Write(String, Object) Declaration public static void Write(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source Write(String, Object, Object) Declaration public static void Write(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source Write(String, Object, Object, Object) Declaration public static void Write(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source Write(String, Object[]) Declaration public static void Write(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source Write(UInt32) Declaration [CLSCompliant(false)] public static void Write(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source Write(UInt64) Declaration [CLSCompliant(false)] public static void Write(ulong value) Parameters Type Name Description System.UInt64 value | Improve this Doc View Source WriteLine() Declaration public static void WriteLine() | Improve this Doc View Source WriteLine(Boolean) Declaration public static void WriteLine(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source WriteLine(Char) Declaration public static void WriteLine(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source WriteLine(Char[]) Declaration public static void WriteLine(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source WriteLine(Char[], Int32, Int32) Declaration public static void WriteLine(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source WriteLine(Decimal) Declaration public static void WriteLine(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source WriteLine(Double) Declaration public static void WriteLine(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source WriteLine(Int32) Declaration public static void WriteLine(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source WriteLine(Int64) Declaration public static void WriteLine(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source WriteLine(Object) Declaration public static void WriteLine(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source WriteLine(Single) Declaration public static void WriteLine(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source WriteLine(String) Declaration public static void WriteLine(string value) Parameters Type Name Description System.String value | Improve this Doc View Source WriteLine(String, Object) Declaration public static void WriteLine(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source WriteLine(String, Object, Object) Declaration public static void WriteLine(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source WriteLine(String, Object, Object, Object) Declaration public static void WriteLine(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source WriteLine(String, Object[]) Declaration public static void WriteLine(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source WriteLine(UInt32) Declaration [CLSCompliant(false)] public static void WriteLine(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source WriteLine(UInt64) Declaration [CLSCompliant(false)] public static void WriteLine(ulong value) Parameters Type Name Description System.UInt64 value"
  },
  "api/Lucene.Net/Lucene.Net.Util.SystemProperties.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SystemProperties.html",
    "title": "Class SystemProperties | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class SystemProperties Helper for environment variables. This class helps to convert the environment variables to int or bool data types and also silently handles read permission errors. For instructions how to set environment variables for your OS, see https://www.schrodinger.com/kb/1842 . Note that if you want to load any of these settings for your application from a configuration file, it is recommended your application load them at startup and call SetProperty(String, String) to set them. Set the environment variable lucene.ignoreSecurityExceptions to false to change the read behavior of these methods to throw the underlying exception instead of returning the default value. Inheritance System.Object SystemProperties 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.Util Assembly : Lucene.Net.dll Syntax public static class SystemProperties Methods | Improve this Doc View Source GetProperty(String) Retrieves the value of an environment variable from the current process. Declaration public static string GetProperty(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.String The environment variable value. | Improve this Doc View Source GetProperty(String, String) Retrieves the value of an environment variable from the current process, with a default value if it doens't exist or the caller doesn't have permission to read the value. Declaration public static string GetProperty(string key, string defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.String defaultValue The value to use if the environment variable does not exist or the caller doesn't have permission to read the value. Returns Type Description System.String The environment variable value. | Improve this Doc View Source GetPropertyAsBoolean(String) Retrieves the value of an environment variable from the current process as System.Boolean . If the value cannot be cast to System.Boolean , returns false . Declaration public static bool GetPropertyAsBoolean(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.Boolean The environment variable value. | Improve this Doc View Source GetPropertyAsBoolean(String, Boolean) Retrieves the value of an environment variable from the current process as System.Boolean , with a default value if it doens't exist, the caller doesn't have permission to read the value, or the value cannot be cast to a System.Boolean . Declaration public static bool GetPropertyAsBoolean(string key, bool defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.Boolean defaultValue The value to use if the environment variable does not exist, the caller doesn't have permission to read the value, or the value cannot be cast to System.Boolean . Returns Type Description System.Boolean The environment variable value. | Improve this Doc View Source GetPropertyAsInt32(String) Retrieves the value of an environment variable from the current process as System.Int32 . If the value cannot be cast to System.Int32 , returns 0 . Declaration public static int GetPropertyAsInt32(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.Int32 The environment variable value. | Improve this Doc View Source GetPropertyAsInt32(String, Int32) Retrieves the value of an environment variable from the current process as System.Int32 , with a default value if it doens't exist, the caller doesn't have permission to read the value, or the value cannot be cast to a System.Int32 . Declaration public static int GetPropertyAsInt32(string key, int defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.Int32 defaultValue The value to use if the environment variable does not exist, the caller doesn't have permission to read the value, or the value cannot be cast to System.Int32 . Returns Type Description System.Int32 The environment variable value. | Improve this Doc View Source SetProperty(String, String) Creates, modifies, or deletes an environment variable stored in the current process. Declaration public static void SetProperty(string key, string value) Parameters Type Name Description System.String key The name of the environment variable. System.String value The new environment variable value. Exceptions Type Condition System.Security.SecurityException The caller does not have the required permission to perform this operation."
  },
  "api/Lucene.Net/Lucene.Net.Util.TextWriterInfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.TextWriterInfoStream.html",
    "title": "Class TextWriterInfoStream | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TextWriterInfoStream InfoStream implementation over a System.IO.TextWriter such as System.Console.Out . NOTE: This is analogous to PrintStreamInfoStream in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InfoStream TextWriterInfoStream PrintStreamInfoStream Implements System.IDisposable Inherited Members InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() 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.Util Assembly : Lucene.Net.dll Syntax public class TextWriterInfoStream : InfoStream, IDisposable Constructors | Improve this Doc View Source TextWriterInfoStream(TextWriter) Declaration public TextWriterInfoStream(TextWriter stream) Parameters Type Name Description System.IO.TextWriter stream | Improve this Doc View Source TextWriterInfoStream(TextWriter, Int32) Declaration public TextWriterInfoStream(TextWriter stream, int messageID) Parameters Type Name Description System.IO.TextWriter stream System.Int32 messageID Fields | Improve this Doc View Source m_messageID Declaration protected readonly int m_messageID Field Value Type Description System.Int32 | Improve this Doc View Source m_stream Declaration protected readonly TextWriter m_stream Field Value Type Description System.IO.TextWriter Properties | Improve this Doc View Source IsSystemStream Declaration public virtual bool IsSystemStream { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides InfoStream.Dispose(Boolean) | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean Overrides InfoStream.IsEnabled(String) | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message Overrides InfoStream.Message(String, String) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Util.TimSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.TimSorter.html",
    "title": "Class TimSorter | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class TimSorter Sorter implementation based on the TimSort algorithm. This implementation is especially good at sorting partially-sorted arrays and sorts small arrays with binary sort. NOTE :There are a few differences with the original implementation: The extra amount of memory to perform merges is configurable. This allows small merges to be very fast while large merges will be performed in-place (slightly slower). You can make sure that the fast merge routine will always be used by having maxTempSlots equal to half of the length of the slice of data to sort. Only the fast merge routine can gallop (the one that doesn't run in-place) and it only gallops on the longest slice. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter TimSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, 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.Util Assembly : Lucene.Net.dll Syntax public abstract class TimSorter : Sorter Constructors | Improve this Doc View Source TimSorter(Int32) Create a new TimSorter . Declaration protected TimSorter(int maxTempSlots) Parameters Type Name Description System.Int32 maxTempSlots The maximum amount of extra memory to run merges Methods | Improve this Doc View Source CompareSaved(Int32, Int32) Compare element i from the temporary storage with element j from the slice to sort, similarly to Compare(Int32, Int32) . Declaration protected abstract int CompareSaved(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) Copy data from slot src to slot dest >. Declaration protected abstract void Copy(int src, int dest) Parameters Type Name Description System.Int32 src System.Int32 dest | Improve this Doc View Source Restore(Int32, Int32) Restore element j from the temporary storage into slot i . Declaration protected abstract void Restore(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j | Improve this Doc View Source Save(Int32, Int32) Save all elements between slots i and i + len into the temporary storage. Declaration protected abstract void Save(int i, int len) Parameters Type Name Description System.Int32 i System.Int32 len | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ToStringUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ToStringUtils.html",
    "title": "Class ToStringUtils | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class ToStringUtils Helper methods to ease implementing System.Object.ToString() . Inheritance System.Object ToStringUtils 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.Util Assembly : Lucene.Net.dll Syntax public sealed class ToStringUtils Methods | Improve this Doc View Source Boost(Single) For printing boost only if not 1.0. Declaration public static string Boost(float boost) Parameters Type Name Description System.Single boost Returns Type Description System.String | Improve this Doc View Source ByteArray(StringBuilder, Byte[]) Declaration public static void ByteArray(StringBuilder buffer, byte[] bytes) Parameters Type Name Description System.Text.StringBuilder buffer System.Byte [] bytes | Improve this Doc View Source Int64Hex(Int64) NOTE: This was longHex() in Lucene Declaration public static string Int64Hex(long x) Parameters Type Name Description System.Int64 x Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.UnicodeUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.UnicodeUtil.html",
    "title": "Class UnicodeUtil | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class UnicodeUtil Class to encode .NET's UTF16 char[] into UTF8 byte[] without always allocating a new byte[] as System.Text.Encoding.GetBytes(System.String) of System.Text.Encoding.UTF8 does. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object UnicodeUtil 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.Util Assembly : Lucene.Net.dll Syntax public static class UnicodeUtil Fields | Improve this Doc View Source BIG_TERM A binary term consisting of a number of 0xff bytes, likely to be bigger than other terms (e.g. collation keys) one would normally encounter, and definitely bigger than any UTF-8 terms. WARNING: this is not a valid UTF8 Term Declaration public static readonly BytesRef BIG_TERM Field Value Type Description BytesRef | Improve this Doc View Source UNI_REPLACEMENT_CHAR Declaration public const int UNI_REPLACEMENT_CHAR = 65533 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_HIGH_END Declaration public const int UNI_SUR_HIGH_END = 56319 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_HIGH_START Declaration public const int UNI_SUR_HIGH_START = 55296 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_LOW_END Declaration public const int UNI_SUR_LOW_END = 57343 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_LOW_START Declaration public const int UNI_SUR_LOW_START = 56320 Field Value Type Description System.Int32 Methods | Improve this Doc View Source CodePointCount(BytesRef) Returns the number of code points in this UTF8 sequence. This method assumes valid UTF8 input. This method does not perform full UTF8 validation, it will check only the first byte of each codepoint (for multi-byte sequences any bytes after the head are skipped). Declaration public static int CodePointCount(BytesRef utf8) Parameters Type Name Description BytesRef utf8 Returns Type Description System.Int32 Exceptions Type Condition System.ArgumentException If invalid codepoint header byte occurs or the content is prematurely truncated. | Improve this Doc View Source NewString(Int32[], Int32, Int32) Cover JDK 1.5 API. Create a String from an array of codePoints . Declaration public static string NewString(int[] codePoints, int offset, int count) Parameters Type Name Description System.Int32 [] codePoints The code array. System.Int32 offset The start of the text in the code point array. System.Int32 count The number of code points. Returns Type Description System.String a String representing the code points between offset and count. Exceptions Type Condition System.ArgumentException If an invalid code point is encountered. System.IndexOutOfRangeException If the offset or count are out of bounds. | Improve this Doc View Source ToCharArray(Int32[], Int32, Int32) Generates char array that represents the provided input code points. LUCENENET specific. Declaration public static char[] ToCharArray(int[] codePoints, int offset, int count) Parameters Type Name Description System.Int32 [] codePoints The code array. System.Int32 offset The start of the text in the code point array. System.Int32 count The number of code points. Returns Type Description System.Char [] a char array representing the code points between offset and count. | Improve this Doc View Source ToHexString(String) Declaration public static string ToHexString(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source UTF16toUTF8(ICharSequence, Int32, Int32, BytesRef) Encode characters from this J2N.Text.ICharSequence , starting at offset for length characters. After encoding, result.Offset will always be 0. Declaration public static void UTF16toUTF8(ICharSequence s, int offset, int length, BytesRef result) Parameters Type Name Description J2N.Text.ICharSequence s System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF16toUTF8(Char[], Int32, Int32, BytesRef) Encode characters from a char[] source , starting at offset for length chars. After encoding, result.Offset will always be 0. Declaration public static void UTF16toUTF8(char[] source, int offset, int length, BytesRef result) Parameters Type Name Description System.Char [] source System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF16toUTF8(String, Int32, Int32, BytesRef) Encode characters from this System.String , starting at offset for length characters. After encoding, result.Offset will always be 0. LUCENENET specific. Declaration public static void UTF16toUTF8(string s, int offset, int length, BytesRef result) Parameters Type Name Description System.String s System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF8toUTF16(BytesRef, CharsRef) Utility method for UTF8toUTF16(Byte[], Int32, Int32, CharsRef) Declaration public static void UTF8toUTF16(BytesRef bytesRef, CharsRef chars) Parameters Type Name Description BytesRef bytesRef CharsRef chars See Also UTF8toUTF16(Byte[], Int32, Int32, CharsRef) | Improve this Doc View Source UTF8toUTF16(Byte[], Int32, Int32, CharsRef) Interprets the given byte array as UTF-8 and converts to UTF-16. The CharsRef will be extended if it doesn't provide enough space to hold the worst case of each byte becoming a UTF-16 codepoint. NOTE: Full characters are read, even if this reads past the length passed (and can result in an System.IndexOutOfRangeException if invalid UTF-8 is passed). Explicit checks for valid UTF-8 are not performed. Declaration public static void UTF8toUTF16(byte[] utf8, int offset, int length, CharsRef chars) Parameters Type Name Description System.Byte [] utf8 System.Int32 offset System.Int32 length CharsRef chars | Improve this Doc View Source UTF8toUTF32(BytesRef, Int32sRef) This method assumes valid UTF8 input. This method does not perform full UTF8 validation, it will check only the first byte of each codepoint (for multi-byte sequences any bytes after the head are skipped). Declaration public static void UTF8toUTF32(BytesRef utf8, Int32sRef utf32) Parameters Type Name Description BytesRef utf8 Int32sRef utf32 Exceptions Type Condition System.ArgumentException If invalid codepoint header byte occurs or the content is prematurely truncated. | Improve this Doc View Source ValidUTF16String(ICharSequence) Declaration public static bool ValidUTF16String(ICharSequence s) Parameters Type Name Description J2N.Text.ICharSequence s Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(Char[], Int32) Declaration public static bool ValidUTF16String(char[] s, int size) Parameters Type Name Description System.Char [] s System.Int32 size Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(String) Declaration public static bool ValidUTF16String(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(StringBuilder) Declaration public static bool ValidUTF16String(StringBuilder s) Parameters Type Name Description System.Text.StringBuilder s Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.VirtualMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.VirtualMethod.html",
    "title": "Class VirtualMethod | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class VirtualMethod A utility for keeping backwards compatibility on previously abstract methods (or similar replacements). Before the replacement method can be made abstract, the old method must kept deprecated. If somebody still overrides the deprecated method in a non-sealed class, you must keep track, of this and maybe delegate to the old method in the subclass. The cost of reflection is minimized by the following usage of this class: Define static readonly fields in the base class ( BaseClass ), where the old and new method are declared: internal static readonly VirtualMethod newMethod = new VirtualMethod(typeof(BaseClass), \"newName\", parameters...); internal static readonly VirtualMethod oldMethod = new VirtualMethod(typeof(BaseClass), \"oldName\", parameters...); this enforces the singleton status of these objects, as the maintenance of the cache would be too costly else. If you try to create a second instance of for the same method/ baseClass combination, an exception is thrown. To detect if e.g. the old method was overridden by a more far subclass on the inheritance path to the current instance's class, use a non-static field: bool isDeprecatedMethodOverridden = oldMethod.GetImplementationDistance(this.GetType()) > newMethod.GetImplementationDistance(this.GetType()); // alternatively (more readable): bool isDeprecatedMethodOverridden = VirtualMethod.CompareImplementationDistance(this.GetType(), oldMethod, newMethod) > 0 GetImplementationDistance(Type) returns the distance of the subclass that overrides this method. The one with the larger distance should be used preferable. this way also more complicated method rename scenarios can be handled (think of 2.9 TokenStream deprecations). This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object VirtualMethod 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.Util Assembly : Lucene.Net.dll Syntax public sealed class VirtualMethod Constructors | Improve this Doc View Source VirtualMethod(Type, String, Type[]) Creates a new instance for the given baseClass and method declaration. Declaration public VirtualMethod(Type baseClass, string method, params Type[] parameters) Parameters Type Name Description System.Type baseClass System.String method System.Type [] parameters Exceptions Type Condition System.InvalidOperationException if you create a second instance of the same baseClass and method declaration combination. This enforces the singleton status. System.ArgumentException If baseClass does not declare the given method. Methods | Improve this Doc View Source CompareImplementationDistance(Type, VirtualMethod, VirtualMethod) Utility method that compares the implementation/override distance of two methods. Declaration public static int CompareImplementationDistance(Type clazz, VirtualMethod m1, VirtualMethod m2) Parameters Type Name Description System.Type clazz VirtualMethod m1 VirtualMethod m2 Returns Type Description System.Int32 > 1, iff m1 is overridden/implemented in a subclass of the class overriding/declaring m2 < 1, iff m2 is overridden in a subclass of the class overriding/declaring m1 0, iff both methods are overridden in the same class (or are not overridden at all) | Improve this Doc View Source GetImplementationDistance(Type) Returns the distance from the baseClass in which this method is overridden/implemented in the inheritance path between baseClass and the given subclass subclazz . Declaration public int GetImplementationDistance(Type subclazz) Parameters Type Name Description System.Type subclazz Returns Type Description System.Int32 0 if and only if not overridden, else the distance to the base class. | Improve this Doc View Source IsOverriddenAsOf(Type) Returns, if this method is overridden/implemented in the inheritance path between baseClass and the given subclass subclazz . You can use this method to detect if a method that should normally be final was overridden by the given instance's class. Declaration public bool IsOverriddenAsOf(Type subclazz) Parameters Type Name Description System.Type subclazz Returns Type Description System.Boolean false if and only if not overridden."
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.Builder.html",
    "title": "Class WAH8DocIdSet.Builder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WAH8DocIdSet.Builder A builder for WAH8DocIdSet s. Inheritance System.Object WAH8DocIdSet.WordBuilder WAH8DocIdSet.Builder 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.Util Assembly : Lucene.Net.dll Syntax public sealed class Builder : WAH8DocIdSet.WordBuilder Constructors | Improve this Doc View Source Builder() Sole constructor Declaration public Builder() Methods | Improve this Doc View Source Add(DocIdSetIterator) Add the content of the provided DocIdSetIterator . Declaration public WAH8DocIdSet.Builder Add(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi Returns Type Description WAH8DocIdSet.Builder | Improve this Doc View Source Add(Int32) Add a document to this builder. Documents must be added in order. Declaration public WAH8DocIdSet.Builder Add(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description WAH8DocIdSet.Builder | Improve this Doc View Source Build() Declaration public override WAH8DocIdSet Build() Returns Type Description WAH8DocIdSet Overrides WAH8DocIdSet.WordBuilder.Build() | Improve this Doc View Source SetIndexInterval(Int32) Declaration public override object SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description System.Object Overrides WAH8DocIdSet.WordBuilder.SetIndexInterval(Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.html",
    "title": "Class WAH8DocIdSet | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WAH8DocIdSet DocIdSet implementation based on word-aligned hybrid encoding on words of 8 bits. This implementation doesn't support random-access but has a fast DocIdSetIterator which can advance in logarithmic time thanks to an index. The compression scheme is simplistic and should work well with sparse and very dense doc id sets while being only slightly larger than a FixedBitSet for incompressible sets (overhead<2% in the worst case) in spite of the index. Format : The format is byte-aligned. An 8-bits word is either clean, meaning composed only of zeros or ones, or dirty, meaning that it contains between 1 and 7 bits set. The idea is to encode sequences of clean words using run-length encoding and to leave sequences of dirty words as-is. TokenClean length+Dirty length+Dirty words 1 byte0-n bytes0-n bytes0-n bytes Token encodes whether clean means full of zeros or ones in the first bit, the number of clean words minus 2 on the next 3 bits and the number of dirty words on the last 4 bits. The higher-order bit is a continuation bit, meaning that the number is incomplete and needs additional bytes to be read. Clean length+ : If clean length has its higher-order bit set, you need to read a vint ( ReadVInt32() ), shift it by 3 bits on the left side and add it to the 3 bits which have been read in the token. Dirty length+ works the same way as Clean length+ but on 4 bits and for the length of dirty words. Dirty words are the dirty words, there are Dirty length of them. This format cannot encode sequences of less than 2 clean words and 0 dirty word. The reason is that if you find a single clean word, you should rather encode it as a dirty word. This takes the same space as starting a new sequence (since you need one byte for the token) but will be lighter to decode. There is however an exception for the first sequence. Since the first sequence may start directly with a dirty word, the clean length is encoded directly, without subtracting 2. There is an additional restriction on the format: the sequence of dirty words is not allowed to contain two consecutive clean words. This restriction exists to make sure no space is wasted and to make sure iterators can read the next doc ID by reading at most 2 dirty words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSet WAH8DocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) 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.Util Assembly : Lucene.Net.dll Syntax public sealed class WAH8DocIdSet : DocIdSet Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL Default index interval. Declaration public const int DEFAULT_INDEX_INTERVAL = 24 Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsCacheable Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source Cardinality() Return the number of documents in this DocIdSet in constant time. Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source Intersect(ICollection<WAH8DocIdSet>) Same as Intersect(ICollection<WAH8DocIdSet>, Int32) with the default index interval. Declaration public static WAH8DocIdSet Intersect(ICollection<WAH8DocIdSet> docIdSets) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets Returns Type Description WAH8DocIdSet | Improve this Doc View Source Intersect(ICollection<WAH8DocIdSet>, Int32) Compute the intersection of the provided sets. This method is much faster than computing the intersection manually since it operates directly at the byte level. Declaration public static WAH8DocIdSet Intersect(ICollection<WAH8DocIdSet> docIdSets, int indexInterval) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets System.Int32 indexInterval Returns Type Description WAH8DocIdSet | Improve this Doc View Source RamBytesUsed() Return the memory usage of this class in bytes. Declaration public long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Union(ICollection<WAH8DocIdSet>) Same as Union(ICollection<WAH8DocIdSet>, Int32) with the default index interval. Declaration public static WAH8DocIdSet Union(ICollection<WAH8DocIdSet> docIdSets) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets Returns Type Description WAH8DocIdSet | Improve this Doc View Source Union(ICollection<WAH8DocIdSet>, Int32) Compute the union of the provided sets. This method is much faster than computing the union manually since it operates directly at the byte level. Declaration public static WAH8DocIdSet Union(ICollection<WAH8DocIdSet> docIdSets, int indexInterval) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets System.Int32 indexInterval Returns Type Description WAH8DocIdSet"
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.WordBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.WordBuilder.html",
    "title": "Class WAH8DocIdSet.WordBuilder | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Class WAH8DocIdSet.WordBuilder Word-based builder. Inheritance System.Object WAH8DocIdSet.WordBuilder WAH8DocIdSet.Builder 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.Util Assembly : Lucene.Net.dll Syntax public class WordBuilder Methods | Improve this Doc View Source Build() Build a new WAH8DocIdSet . Declaration public virtual WAH8DocIdSet Build() Returns Type Description WAH8DocIdSet | Improve this Doc View Source SetIndexInterval(Int32) Set the index interval. Smaller index intervals improve performance of Advance(Int32) but make the DocIdSet larger. An index interval i makes the index add an overhead which is at most 4/i , but likely much less. The default index interval is 8 , meaning the index has an overhead of at most 50%. To disable indexing, you can pass System.Int32.MaxValue as an index interval. Declaration public virtual object SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description System.Object"
  },
  "api/Lucene.Net/overview.html": {
    "href": "api/Lucene.Net/overview.html",
    "title": "Lucene.Net | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net <!-- 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. --> Apache Lucene is a high-performance, full-featured text search engine library. Here's a simple example how to use Lucene for indexing and searching (using JUnit to check if the results are what we expect): <!-- = Java2Html Converter 5.0 [2006-03-04] by Markus Gebhard markus@jave.de = --> Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); // Store the index in memory: Directory directory = new RAMDirectory(); // To store an index on disk, use this instead: //Directory directory = FSDirectory.open(\"/tmp/testindex\"); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer); IndexWriter iwriter = new IndexWriter(directory, config); Document doc = new Document(); String text = \"This is the text to be indexed.\"; doc.add(new Field(\"fieldname\", text, TextField.TYPE_STORED)); iwriter.addDocument(doc); iwriter.close(); // Now search the index: DirectoryReader ireader = DirectoryReader.open(directory); IndexSearcher isearcher = new IndexSearcher(ireader); // Parse a simple query that searches for \"text\": QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, \"fieldname\", analyzer); Query query = parser.parse(\"text\"); ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs; assertEquals(1, hits.length); // Iterate through the results: for (int i = 0; i < hits.length;=\"\" i++)=\"\" {=\"\" document=\"\" hitdoc=\"isearcher.doc(hits[i].doc);\" assertequals(\"this=\"\" is=\"\" the=\"\" text=\"\" to=\"\" be=\"\" indexed.\",=\"\" hitdoc.get(\"fieldname\"));=\"\" }=\"\" ireader.close();=\"\"> The Lucene API is divided into several packages: Lucene.Net.Analysis defines an abstract Analyzer API for converting text from a {@link java.io.Reader} into a TokenStream , an enumeration of token Attribute s. A TokenStream can be composed by applying TokenFilter s to the output of a Tokenizer . Tokenizers and TokenFilters are strung together and applied with an Analyzer . analyzers-common provides a number of Analyzer implementations, including StopAnalyzer and the grammar-based StandardAnalyzer . Lucene.Net.Codecs provides an abstraction over the encoding and decoding of the inverted index structure, as well as different implementations that can be chosen depending upon application needs. Lucene.Net.Documents provides a simple Document class. A Document is simply a set of named Field s, whose values may be strings or instances of {@link java.io.Reader}. Lucene.Net.Index provides two primary classes: IndexWriter , which creates and adds documents to indices; and IndexReader , which accesses the data in the index. Lucene.Net.Search provides data structures to represent queries (ie TermQuery for individual words, PhraseQuery for phrases, and BooleanQuery for boolean combinations of queries) and the IndexSearcher which turns queries into TopDocs . A number of QueryParser s are provided for producing query structures from strings or xml. Lucene.Net.Store defines an abstract class for storing persistent data, the Directory , which is a collection of named files written by an IndexOutput and read by an IndexInput . Multiple implementations are provided, including FSDirectory , which uses a file system directory to store files, and RAMDirectory which implements files as memory-resident data structures. Lucene.Net.Util contains a few handy data structures and util classes, ie OpenBitSet and PriorityQueue . To use Lucene, an application should: Create Document s by adding Field s; Create an IndexWriter and add documents to it with AddDocument ; Call QueryParser.parse() to build a query from a string; and Create an IndexSearcher and pass the query to its Search method. Some simple examples of code which does this are: IndexFiles.java creates an index for all the files contained in a directory. SearchFiles.java prompts for queries and searches an index."
  },
  "cli/analysis/index.html": {
    "href": "cli/analysis/index.html",
    "title": "analysis | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "analysis Description Utilities to manage specialized analyzers. Commands kuromoji-build-dictionary stempel-compile-stems stempel-patch-stems"
  },
  "cli/analysis/kuromoji-build-dictionary.html": {
    "href": "cli/analysis/kuromoji-build-dictionary.html",
    "title": "kuromoji-build-dictionary | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "kuromoji-build-dictionary Name analysis-kuromoji-build-dictionary - Generates a set of custom dictionary files for the Lucene.Net.Analysis.Kuromoji library. Synopsis lucene analysis kuromoji-build-dictionary <FORMAT> <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> [-e|--encoding] [-n|--normalize] [?|-h|--help] Description Generates the following set of binary files: CharacterDefinition.dat ConnectionCosts.dat TokenInfoDictionary$buffer.dat TokenInfoDictionary$fst.dat TokenInfoDictionary$posDict.dat TokenInfoDictionary$targetMap.dat UnknownDictionary$buffer.dat UnknownDictionary$posDict.dat UnknownDictionary$targetMap.dat If these files are placed into a subdirectory of your application named kuromoji-data , they will be used automatically by Lucene.Net.Analysis.Kuromoji features such as the JapaneseAnalyzer or JapaneseTokenizer. To use an alternate directory location, put the path in an environment variable named kuromoji.data.dir . The files must be placed in a subdirectory of this location named kuromoji-data . See this blog post for information about the dictionary format. A sample is available at https://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/ . The Kuromoji project documentation may also be helpful. Arguments FORMAT The dictionary format. Valid values are IPADIC and UNIDIC. If an invalid value is passed, IPADIC is assumed. INPUT_DIRECTORY The directory where the dictionary input files are located. OUTPUT_DIRECTORY The directory to put the dictionary output. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the input files. If not supplied, the default value is EUC-JP . -n|--normalize Normalize the entries using normalization form KC. Example lucene analysis kuromoji-build-dictionary IPADIC X:\\kuromoji-data X:\\kuromoji-dictionary --normalize"
  },
  "cli/analysis/stempel-compile-stems.html": {
    "href": "cli/analysis/stempel-compile-stems.html",
    "title": "stempel-compile-stems | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "stempel-compile-stems Name analysis-stempel-compile-stems - Compiles a stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project. Synopsis lucene analysis stempel-compile-stems <STEMMING_ALGORITHM> <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help] Description See the Egothor project documentation for more information. Arguments STEMMING_ALGORITHM The name of the desired stemming algorithm to use. Possible values are Multi (which changes the stemmer to use the MultiTrie2 rather than a Trie class to store its data) or 0 which instructs the stemmer to store the original data. Any other supplied value will use the default algorithm. See the Egothor project documentation for more information. STEMMER_TABLE_FILE The path to a file containing a stemmer table. Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the stemmer files. If not supplied, the default value is UTF-8 . Note this value can alternatively be supplied by setting the environment variable egothor.stemmer.charset . Example lucene analysis stempel-compile-stems test X:\\stemmer-data\\table1.txt X:\\stemmer-data\\table2.txt"
  },
  "cli/analysis/stempel-patch-stems.html": {
    "href": "cli/analysis/stempel-patch-stems.html",
    "title": "stempel-patch-stems | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "stempel-patch-stems Name analysis-stempel-patch-stems - Generates patch commands from an already prepared stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project. Synopsis lucene analysis stempel-patch-stems <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help] Description See the Egothor project documentation for more information. Arguments STEMMER_TABLE_FILE The path to a file containing a stemmer table. Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the stemmer files. If not supplied, the default value is UTF-8 . Note this value can alternatively be supplied by setting the environment variable egothor.stemmer.charset . Example lucene analysis stempel-patch-stems X:\\stemmer-data\\table1.txt X:\\stemmer-data\\table2.txt --encoding UTF-16"
  },
  "cli/benchmark/extract-reuters.html": {
    "href": "cli/benchmark/extract-reuters.html",
    "title": "extract-reuters | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "extract-reuters Name benchmark-extract-reuters - Splits Reuters SGML documents into simple text files containing: Title, Date, Dateline, Body. Synopsis lucene benchmark extract-reuters <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> [?|-h|--help] Arguments INPUT_DIRECTORY Path to Reuters SGML files. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. Example Extracts the reuters SGML files in the z:\\input directory and places the content in the z:\\output directory. lucene benchmark extract-reuters z:\\input z:\\output"
  },
  "cli/benchmark/extract-wikipedia.html": {
    "href": "cli/benchmark/extract-wikipedia.html",
    "title": "extract-wikipedia | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "extract-wikipedia Name benchmark-extract-wikipedia - Extracts a downloaded Wikipedia dump into separate files for indexing. Synopsis lucene benchmark extract-wikipedia <INPUT_WIKIPEDIA_FILE> <OUTPUT_DIRECTORY> [-d|--discard-image-only-docs] [?|-h|--help] Arguments INPUT_WIKIPEDIA_FILE Input path to a Wikipedia XML file. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. -d|--discard-image-only-docs Tells the extractor to skip WIKI docs that contain only images. Example Extracts the c:\\wiki.xml file into the c:\\out directory, skipping any docs that only contain images. lucene benchmark extract-wikipedia c:\\wiki.xml c:\\out -d"
  },
  "cli/benchmark/find-quality-queries.html": {
    "href": "cli/benchmark/find-quality-queries.html",
    "title": "find-quality-queries | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "find-quality-queries Name benchmark-find-quality-queries - Suggests quality queries based on index contents. Used for making quality test benchmarks. Synopsis lucene benchmark find-quality-queries <INPUT_DIRECTORY> [?|-h|--help] Arguments INDEX_DIRECTORY Path to the index. Options ?|-h|--help Prints out a short help for the command. Example Finds quality queries on the c:\\lucene-index index directory. lucene benchmark find-quality-queries c:\\lucene-index"
  },
  "cli/benchmark/index.html": {
    "href": "cli/benchmark/index.html",
    "title": "benchmark | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "benchmark Description Utilities for benchmarking Lucene.Net. Commands extract-reuters extract-wikipedia find-quality-queries run run-trec-eval sample"
  },
  "cli/benchmark/run.html": {
    "href": "cli/benchmark/run.html",
    "title": "run | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "run Name benchmark-run - Runs a benchmark based on an algorithm file. Synopsis lucene benchmark run <ALGORITHM_FILE> <OUTPUT_DIRECTORY> [?|-h|--help] Arguments ALGORITHM_FILE An algorithm file specifying the parameters of the benchmark to run. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. Example Runs a benchmark on the c:\\check.alg algorithm file. lucene benchmark run c:\\check.alg"
  },
  "cli/benchmark/run-trec-eval.html": {
    "href": "cli/benchmark/run-trec-eval.html",
    "title": "run-trec-eval | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "run-trec-eval Name benchmark-run-trec-eval - Runs a TREC evaluation. Synopsis lucene benchmark run-trec-eval <INPUT_TOPICS_FILE> <INPUT_QUERY_RELEVANCE_FILE> <OUTPUT_SUBMISSION_FILE> <INDEX_DIRECTORY> [-t|--query-on-title] [-d|--query-on-description] [-n|--query-on-narrative] [?|-h|--help] Arguments INPUT_TOPICS_FILE Input file containing queries. INPUT_QUERY_RELEVANCE_FILE Input file conataining relevance judgements. OUTPUT_SUBMISSION_FILE Output submission file for TREC evaluation. INDEX_DIRECTORY The index directory. Options ?|-h|--help Prints out a short help for the command. -t|--query-on-title Use title field in query. This flag will automatically be on if no other field is specified. -d|--query-on-description Use description field in query. -n|--query-on-narrative Use narrative field in query. Example Runs a TREC evaluation on the c:\\topics queries file and the c:\\queries relevance judgements on the c:\\lucene-index index using the description and narrative fields and places the output in c:\\output.txt . lucene benchmark run-trec-eval c:\\topics.txt c:\\queries.txt c:\\submissions.txt c:\\output.txt c:\\lucene-index -d -n"
  },
  "cli/benchmark/sample.html": {
    "href": "cli/benchmark/sample.html",
    "title": "sample | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "sample Name benchmark-sample - Sample of a performance test written programatically instead of using an algorithm file. Synopsis lucene benchmark sample [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example Runs the sample. lucene benchmark sample"
  },
  "cli/demo/associations-facets.html": {
    "href": "cli/demo/associations-facets.html",
    "title": "associations-facets | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "associations-facets Name demo-associations-facets - Shows example usage of category associations. Synopsis lucene demo associations-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo associations-facets"
  },
  "cli/demo/distance-facets.html": {
    "href": "cli/demo/distance-facets.html",
    "title": "distance-facets | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "distance-facets Name demo-distance-facets - Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. Synopsis lucene demo distance-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo distance-facets"
  },
  "cli/demo/expression-aggregation-facets.html": {
    "href": "cli/demo/expression-aggregation-facets.html",
    "title": "expression-aggregation-facets | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "expression-aggregation-facets Name demo-expression-aggregation-facets - Shows facets aggregation by an expression. Synopsis lucene demo expression-aggregation-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo expression-aggregation-facets"
  },
  "cli/demo/index.html": {
    "href": "cli/demo/index.html",
    "title": "demo | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "demo Description Demos for various Lucene.Net functionality including C# code samples. Commands associations-facets distance-facets expression-aggregation-facets index-files multi-category-lists-facets range-facets search-files simple-facets simple-sorted-set-facets"
  },
  "cli/demo/index-files.html": {
    "href": "cli/demo/index-files.html",
    "title": "index-files | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "index-files Name demo-index-files - Index all files under a directory. Synopsis lucene demo index-files \\<INDEX_DIRECTORY> \\<SOURCE_DIRECTORY> [-u|--update] [?|-h|--help] lucene demo index-files [-src|--view-source-code] [-out|--output-source-code] Description This demo can be used to learn how to build a Lucene.Net index. After the index has been built, you can run the search-files demo to run queries against it. Arguments INDEX_DIRECTORY The directory of the index. SOURCE_DIRECTORY The source directory containing the files to index. This directory will be analyzed recursively. Options ?|-h|--help Prints out a short help for the command. -u|--update Adds new documents to an existing index. If not supplied, any existing index in the INDEX_DIRECTORY will be overwritten. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example Indexes the contents of C:\\Users\\BGates\\Documents\\ and places the Lucene.Net index in X:\\test-index\\ . lucene demo index-files X:\\test-index C:\\Users\\BGates\\Documents"
  },
  "cli/demo/multi-category-lists-facets.html": {
    "href": "cli/demo/multi-category-lists-facets.html",
    "title": "multi-category-lists-facets | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "multi-category-lists-facets Name demo-multi-category-lists-facets - Demonstrates indexing categories into different indexed fields. Synopsis lucene demo multi-category-lists-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo multi-category-lists-facets"
  },
  "cli/demo/range-facets.html": {
    "href": "cli/demo/range-facets.html",
    "title": "range-facets | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "range-facets Name demo-range-facets - Shows simple usage of dynamic range faceting. Synopsis lucene demo range-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo range-facets"
  },
  "cli/demo/search-files.html": {
    "href": "cli/demo/search-files.html",
    "title": "search-files | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "search-files Name demo-search-files - Simple command-line based search demo. Synopsis lucene demo search-files \\<INDEX_DIRECTORY> [-f|--field] [-r|--repeat] [-qf|--queries-file] [-q|--query] [--raw] [-p|--page-size] [?|-h|--help] lucene demo search-files [-src|--view-source-code] [-out|--output-source-code] Description Run the index-files demo first to generate an index to search. NOTE: To run queries interactively in the console, omit both the --queries-file and the --query arguments. Arguments INDEX_DIRECTORY The directory of the index that has previously been created using the index-files demo . Options ?|-h|--help Prints out a short help for the command. -f|--field <FIELD> The index field to use in the search. If not supplied, defaults to contents . -r|--repeat <NUMBER> Repeat the search and time as a benchmark. -qf|--queries-file <PATH> A file containing the queries to perform. -q|--query <QUERY> A query to perform. --raw Output raw format. -p|--page-size <NUMBER> Hits per page to display. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Examples Search the index located in the X:\\test-index directory interactively, showing 15 results per page in raw format: lucene demo search-files X:\\test-index -p 15 --raw Run the query \"foobar\" against the \"path\" field in the index located in the X:\\test-index directory: lucene demo search-files X:\\test-index --field path --query foobar"
  },
  "cli/demo/simple-facets.html": {
    "href": "cli/demo/simple-facets.html",
    "title": "simple-facets | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "simple-facets Name demo-simple-facets - Shows simple usage of faceted indexing and searching. Synopsis lucene demo simple-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo simple-facets"
  },
  "cli/demo/simple-sorted-set-facets.html": {
    "href": "cli/demo/simple-sorted-set-facets.html",
    "title": "simple-sorted-set-facets | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "simple-sorted-set-facets Name demo-simple-sorted-set-facets - Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts. Synopsis lucene demo simple-sorted-set-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo simple-sorted-set-facets"
  },
  "cli/index.html": {
    "href": "cli/index.html",
    "title": "Lucene.Net command line interface (CLI) tools | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Lucene.Net command line interface (CLI) tools The Lucene.Net command line interface (CLI) is a new cross-platform toolchain with utilities for maintaining Lucene.Net and demos for learning basic Lucene.Net functionality. Prerequisites .NET Core 3.1.0 Runtime Installation Perform a one-time install of the lucene-cli tool using the following dotnet CLI command: dotnet tool install lucene-cli -g --version 4.8.0-beta00007 You may then use the lucene-cli tool to analyze and update Lucene.Net indexes and use its demos. CLI Commands The following commands are installed: analysis demo index lock Command structure CLI command structure consists of the driver (\"lucene\"), the command, and possibly command arguments and options. You see this pattern in most CLI operations, such as checking a Lucene.Net index for problematic segments and fixing (removing) them: lucene index check C:\\my-index --verbose lucene index fix C:\\my-index"
  },
  "cli/index/check.html": {
    "href": "cli/index/check.html",
    "title": "check | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "check Name index-check - Checks an index for problematic segments. Synopsis lucene index check [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [-s|--segment] [?|-h|--help] Description Basic tool to check the health of an index. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Arguments INDEX_DIRECTORY The path to the directory of the index to check. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -v|--verbose Enable verbose output. -c|--cross-check-term-vectors Cross-check term vectors. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform. -s|--segment <SEGMENT> Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a. Examples Check the index located at X:\\lucenenet-index\\ verbosely, scanning only the segments named _1j_Lucene41_0 and _2u_Lucene41_0 for problems: lucene index check X:\\lucenenet-index -v -s _1j_Lucene41_0 -s _2u_Lucene41_0 Check the index located at C:\\taxonomy\\ using the MMapDirectory memory-mapped directory implementation: lucene index check C:\\taxonomy --directory-type MMapDirectory"
  },
  "cli/index/copy-segments.html": {
    "href": "cli/index/copy-segments.html",
    "title": "copy-segments | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "copy-segments Name index-copy-segments - Copies segments from one index to another index. Synopsis lucene index copy-segments <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help] Description This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple FileStream) so it will not work with non FSDirectory Directory implementations. Arguments INPUT_DIRECTORY The directory of the index to copy. OUTPUT_DIRECTORY The directory of the destination index. SEGMENT, SEGMENT_2 The segments to copy, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Copy the _71_Lucene41_0 segment from the index located at X:\\lucene-index to the index located at X:\\output : lucene index copy-segments X:\\lucene-index X:\\output _71_Lucene41_0"
  },
  "cli/index/delete-segments.html": {
    "href": "cli/index/delete-segments.html",
    "title": "delete-segments | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "delete-segments Name index-delete-segments - Deletes segments from an index. Synopsis lucene index delete-segments <INDEX_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help] Description You can easily accidentally remove segments from your index, so be careful! Always make a backup of your index first. Arguments INDEX_DIRECTORY The directory of the index. SEGMENT The segments to delete, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Delete the segments named _8c and _83 from the index located at X:\\category-data\\ : lucene index delete-segments X:\\category-data _8c _83"
  },
  "cli/index/extract-cfs.html": {
    "href": "cli/index/extract-cfs.html",
    "title": "extract-cfs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "extract-cfs Name index-extract-cfs - Extracts sub-files from a .cfs compound file. Synopsis lucene index extract-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help] Description Extracts .cfs compound files (that were created using the CompoundFileDirectory from Lucene.Net.Misc) to the current working directory. In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored. Arguments CFS_FILE_NAME The path to a .cfs compound file containing words to parse. Options ?|-h|--help Prints out a short help for the command. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform. Examples Extract the files from the compound file at X:\\lucene-index\\_81.cfs to the current working directory: lucene index extract-cfs X:\\lucene-index_81.cfs Extract the files from the compound file at X:\\lucene-index\\_64.cfs to the current working directory using the SimpleFSDirectory implementation: lucene index extract-cfs X:\\lucene-index_64.cfs --directory-type SimpleFSDirectory"
  },
  "cli/index/fix.html": {
    "href": "cli/index/fix.html",
    "title": "fix | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "fix Name index-fix - Fixes an index by removing problematic segments. Synopsis lucene index fix [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [--dry-run] [?|-h|--help] Description Basic tool to write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. WARNING: This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. You have been warned! Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -v|--verbose Enables verbose output. -c|--cross-check-term-vectors Cross check term vectors. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If omitted, it defaults to the optimal FSDirectory for your OS platform. --dry-run Doesn't change the index, but reports any actions that would be taken if this option were not supplied. Examples Check what a fix operation would do if run on the index located at X:\\product-index\\ , using verbose output: lucene index fix X:\\product-index --verbose --dry-run Fix the index located at X:\\product-index and cross check term vectors: lucene index fix X:\\product-index -c"
  },
  "cli/index/index.html": {
    "href": "cli/index/index.html",
    "title": "index | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "index Description Utilities to manage specialized analyzers. WARNING: Many of these operations change an index in ways that cannot be reversed. Always make a backup of your index before running these commands. Commands check copy-segments delete-segments extract-cfs fix list-cfs list-high-freq-terms list-segments list-taxonomy-stats list-term-info merge split upgrade"
  },
  "cli/index/list-cfs.html": {
    "href": "cli/index/list-cfs.html",
    "title": "list-cfs | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "list-cfs Name index-list-cfs - Lists sub-files from a .cfs compound file. Synopsis lucene index list-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help] Description Prints the filename and size of each file within a given .cfs compound file. The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc. Arguments CFS_FILE_NAME The .cfs compound file containing words to parse. Options ?|-h|--help Prints out a short help for the command. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If omitted, defaults to the optimal FSDirectory for your OS platform. Example Lists the files within the X:\\categories\\_53.cfs compound file using the NIOFSDirectory directory implementation: lucene index list-cfs X:\\categories_53.cfs -dir NIOFSDirectory"
  },
  "cli/index/list-high-freq-terms.html": {
    "href": "cli/index/list-high-freq-terms.html",
    "title": "list-high-freq-terms | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "list-high-freq-terms Name index-list-high-freq-terms - Lists the top N most frequent terms by document frequency. Synopsis lucene index list-high-freq-terms [<INDEX_DIRECTORY>] [-t|--total-term-frequency] [-n|--number-of-terms] [-f|--field] [?|-h|--help] Description Extracts the top N most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -t|--total-term-frequency Specifies that both the document frequency and term frequency are reported, ordered by descending total term frequency. -n|--number-of-terms <NUMBER> The number of terms to consider. If omitted, defaults to 100. -f|--field <FIELD> The field to consider. If omitted, considers all fields. Examples List the high frequency terms in the index located at F:\\product-index\\ on the description field, reporting both document frequency and term frequency: lucene index list-high-freq-terms F:\\product-index --total-term-frequency --field description List the high frequency terms in the index located at C:\\lucene-index\\ on the name field, tracking 30 terms: lucene index list-high-freq-terms C:\\lucene-index --f name -n 30"
  },
  "cli/index/list-segments.html": {
    "href": "cli/index/list-segments.html",
    "title": "list-segments | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "list-segments Name index-list-segments - Lists segments in an index. Synopsis lucene index list-segments [<INDEX_DIRECTORY>] [?|-h|--help] Description After running this command to view segments, use copy-segments to copy segments from one index directory to another or delete-segments to remove segments from an index. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. Example List the segments in the index located at X:\\lucene-index\\ : lucene index list-segments X:\\lucene-index"
  },
  "cli/index/list-taxonomy-stats.html": {
    "href": "cli/index/list-taxonomy-stats.html",
    "title": "list-taxonomy-stats | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "list-taxonomy-stats Name index-list-taxonomy-stats - Displays the taxonomy statistical information for a taxonomy index. Synopsis lucene index list-taxonomy-stats [<INDEX_DIRECTORY>] [-tree|--show-tree] [?|-h|--help] Description Prints how many ords are under each dimension. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. NOTE: This directory must be a facet taxonomy directory for the command to succeed. Options ?|-h|--help Prints out a short help for the command. -tree|--show-tree Recursively lists all descendant nodes. Example List the taxonomy statistics from the index located at X:\\category-taxonomy-index\\ , viewing all descendant nodes: lucene index list-taxonomy-stats X:\\category-taxonomy-index -tree"
  },
  "cli/index/list-term-info.html": {
    "href": "cli/index/list-term-info.html",
    "title": "list-term-info | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "list-term-info Name index-list-term-info - Gets document frequency and total number of occurrences of a term. Synopsis lucene index list-term-info <INDEX_DIRECTORY> <FIELD> <TERM> [?|-h|--help] Description Gets document frequency and total number of occurrences (sum of the term frequency for each document) of a term. Arguments INDEX_DIRECTORY The directory of the index. FIELD The field to consider. TERM The term to consider. Options ?|-h|--help Prints out a short help for the command. Example List the term information from the index located at C:\\project-index\\ : lucene index list-term-info C:\\project-index"
  },
  "cli/index/merge.html": {
    "href": "cli/index/merge.html",
    "title": "merge | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "merge Name index-merge - Merges multiple indexes into a single index. Synopsis lucene index merge <OUTPUT_DIRECTORY> <INPUT_DIRECTORY> <INPUT_DIRECTORY_2>[ <INPUT_DIRECTORY_N>...] [?|-h|--help] Description Merges the the input index directories into a combined index at the output directory path. Arguments OUTPUT_DIRECTORY The output directory to merge the input indexes into. INPUT_DIRECTORY, INPUT_DIRECTORY_2, INPUT_DIRECTORY_N Two or more input index directories, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Merge the indexes C:\\product-index1 and C:\\product-index2 into an index located at X:\\merged-index : lucene index merge X:\\merged-index C:\\product-index1 C:\\product-index2"
  },
  "cli/index/split.html": {
    "href": "cli/index/split.html",
    "title": "split | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "split Name index-split - Splits an index into multiple equal parts. Synopsis lucene index split <OUTPUT_DIRECTORY> <INPUT_DIRECTORY>[ <INPUT_DIRECTORY_2>...] [-n|--number-of-parts] [-s|--sequential] [?|-h|--help] Description Splits the input index into multiple equal parts. The method employed here uses IndexWriter.AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document ids that fall outside the selected partition. Deletes are only applied to a buffered list of deleted documents and don't affect the source index. This tool works also with read-only indexes. The disadvantage of this tool is that source index needs to be read as many times as there are parts to be created. The multiple passes may be slow. NOTE: This tool is unaware of documents added automatically via IndexWriter.AddDocuments(IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer) or IndexWriter.UpdateDocuments(Term, IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer) , which means it can easily break up such document groups. Arguments OUTPUT_DIRECTORY Path to output directory to contain partial indexes. INPUT_DIRECTORY, INPUT_DIRECTORY_2 The path of the source index, which can have deletions and can have multiple segments (or multiple readers). Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -n|--number-of-parts <NUMBER> The number of parts (output indices) to produce. If omitted, defaults to 2. -s|--sequential Sequential doc-id range split (default is round-robin). Example Split the index located at X:\\old-index\\ sequentially, placing the resulting 2 indices into the X:\\new-index\\ directory: lucene index split X:\\new-index X:\\old-index --sequential Split the index located at T:\\in\\ into 4 parts and place them into the T:\\out\\ directory: lucene index split T:\\out T:\\in -n 4"
  },
  "cli/index/upgrade.html": {
    "href": "cli/index/upgrade.html",
    "title": "upgrade | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "upgrade Name index-upgrade - Upgrades all segments of an index from previous Lucene.Net versions to the current segment file format. Synopsis lucene index upgrade [<INDEX_DIRECTORY>] [-d|--delete-prior-commits] [-v|--verbose] [-dir|--directory-type] [?|-h|--help] Description This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. WARNING: This tool may reorder document IDs! Be sure to make a backup of your index before you use this. Also, ensure you are using the correct version of this utility to match your application's version of Lucene.Net. This operation cannot be reversed. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -d|--delete-prior-commits Deletes prior commits. -v|--verbose Verbose output. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. Defaults to the optional FSDirectory for your OS platform. Examples Upgrade the index format of the index located at X:\\lucene-index\\ to the same version as this tool, using the SimpleFSDirectory implementation: lucene index upgrade X:\\lucene-index -dir SimpleFSDirectory Upgrade the index located at C:\\indexes\\category-index\\ verbosely, deleting all but the last commit: lucene index upgrade C:\\indexes\\category-index --verbose --delete-prior-commits"
  },
  "cli/lock/index.html": {
    "href": "cli/lock/index.html",
    "title": "lock | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "lock Description Utilities for verifying concurrent locking integrity. Commands stress-test verify-server"
  },
  "cli/lock/stress-test.html": {
    "href": "cli/lock/stress-test.html",
    "title": "stress-test | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "stress-test Name lock-stress-test - Simple tool that forever acquires and releases a lock using a specific LockFactory . Synopsis lucene lock stress-test <ID> <VERIFIER_HOST> <VERIFIER_PORT> <LOCK_FACTORY_TYPE> <LOCK_DIRECTORY> <SLEEP_TIME_MS> <TRIES> [?|-h|--help] Description You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running verify-server . Arguments ID An integer from 0 - 255 (should be unique for test process). VERIFIER_HOST Hostname or IP address that verify-server is listening on. VERIFIER_PORT Port that verify-server is listening on. LOCK_FACTORY_TYPE The primary LockFactory implementation that we will use. LOCK_DIRECTORY The path to the lock directory (only utilized if LOCK_FACTORY_TYPE is set to SimpleFSLockFactory or NativeFSLockFactory ). SLEEP_TIME_MS Milliseconds to pause between each lock obtain/release. TRIES Number of locking tries. Options ?|-h|--help Prints out a short help for the command. Example Run the client (stress test), connecting to the server on IP address 127.0.0.4 and port 54464 using the ID 3, the NativeFSLockFactory , specifying the lock directory as F:\\temp , sleep for 50 milliseconds, and try to obtain a lock up to 10 times: lucene lock stress-test 3 127.0.0.4 54464 NativeFSLockFactory F:\\temp 50 10"
  },
  "cli/lock/verify-server.html": {
    "href": "cli/lock/verify-server.html",
    "title": "verify-server | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "verify-server Name lock-verify-server - Server that must be running when you use VerifyingLockFactory (or stress-test ). Synopsis lucene lock verify-server <IP_HOSTNAME> <MAX_CLIENTS> [?|-h|--help] Description This server simply verifies that at most one process holds the lock at a time. Arguments IP_HOSTNAME Hostname or IP address that verify-server will listen on. MAX_CLIENTS The maximum number of threads that are observing the lock from within the verify-server process. When using stress-test , each thread will be used by a single connected client and the server won't start running until this number of clients is reached. Options ?|-h|--help Prints out a short help for the command. Example Run the server on IP 127.0.0.4 with a 10 connected clients: lucene lock verify-server 127.0.0.4 10"
  },
  "index.html": {
    "href": "index.html",
    "title": "Lucene.Net Docs - The documentation website for Lucene.Net | Apache Lucene.NET 4.8.0-beta00008 Documentation",
    "keywords": "Apache Lucene.Net 4.8.0-beta00008 Documentation Lucene is a .NET full-text search engine . Lucene.NET is not a complete application, but rather a code library and API that can easily be used to add search capabilities to applications. This is the official API documentation for Apache Lucene.NET 4.8.0-beta00008 . Getting Started The following section is intended as a \"getting started\" guide. It has three audiences: first-time users looking to install Apache Lucene in their application; developers looking to modify or base the applications they develop on Lucene; and developers looking to become involved in and contribute to the development of Lucene. The goal is to help you \"get started\". It does not go into great depth on some of the conceptual or inner details of Lucene: Lucene demo, its usage, and sources : Tutorial and walk-through of the command-line Lucene demo. Introduction to Lucene's APIs : High-level summary of the different Lucene packages. Analysis overview : Introduction to Lucene's analysis API. See also the TokenStream consumer workflow . Reference Documents Changes : List of changes in this release. System Requirements: Minimum and supported .NET versions. TODO: Add link Migration Guide: What changed in Lucene 4; how to migrate code from Lucene 3.x. TODO: Add link File Formats : Guide to the supported index format used by Lucene. This can be customized by using an alternate codec . Search and Scoring in Lucene : Introduction to how Lucene scores documents. Classic Scoring Formula : Formula of Lucene's classic Vector Space implementation. (look here for other models) Classic QueryParser Syntax : Overview of the Classic QueryParser's syntax and features. Libraries Lucene.Net - Core library Lucene.Net.Analysis.Common - Analyzers for indexing content in different languages and domains Lucene.Net.Analysis.Kuromoji - Japanese Morphological Analyzer Lucene.Net.Analysis.Morfologik - Analyzer for dictionary stemming, built-in Polish dictionary Lucene.Net.Analysis.OpenNLP - OpenNLP Library Integration Lucene.Net.Analysis.Phonetic - Analyzer for indexing phonetic signatures (for sounds-alike search) Lucene.Net.Analysis.SmartCn - Analyzer for indexing Chinese Lucene.Net.Analysis.Stempel - Analyzer for indexing Polish Lucene.Net.Benchmark - System for benchmarking Lucene Lucene.Net.Classification - Classification module for Lucene Lucene.Net.Codecs - Lucene codecs and postings formats Lucene.Net.Expressions - Dynamically computed values to sort/facet/search on based on a pluggable grammar Lucene.Net.Facet - Faceted indexing and search capabilities Lucene.Net.Grouping - Collectors for grouping search results Lucene.Net.Highlighter - Highlights search keywords in results Lucene.Net.ICU - Specialized ICU (International Components for Unicode) Analyzers and Highlighters Lucene.Net.Join - Index-time and Query-time joins for normalized content Lucene.Net.Memory - Single-document in-memory index implementation Lucene.Net.Misc - Index tools and other miscellaneous code Lucene.Net.Queries - Filters and Queries that add to core Lucene Lucene.Net.QueryParser - Text to Query parsers and parsing framework Lucene.Net.Replicator Files replication utility Lucene.Net.Sandbox - Various third party contributions and new ideas Lucene.Net.Spatial - Geospatial search Lucene.Net.Suggest - Auto-suggest and Spell-checking support Lucene.Net.TestFramework - Framework for testing Lucene-based applications Tools Lucene CLI : Dotnet tool to work with Lucene indexes from the command line Demo : Simple example code"
  }
}